插入数据

使用Insert Into 插入

if(exists(select * from sys.databases where name = 'webDB'))
drop database webDB
go
--创建数据库
create database webDB on primary
(
name = 'webDB',
filename='d:\webDB.mdf',
size = 5mb,
maxsize=unlimited,
filegrowth=10%
)
log on
(
name = 'webDB_log',
filename = 'd:\webDB.ldf',
size=3mb,
maxsize=50mb,
filegrowth=2mb
) use webDB
go
--创建表
create table student(
id int identity(1,1) primary key,
name varchar(20) not null,
sex char(2) not null,
age int
) --使用Insert Into 插入一行数据
insert into student (name,sex,age) values ('白大伟','男',26)
--id为标识列 自动增长 无需为其添加值 --插入某个列
insert into student (name,sex) values ('魏力夫','妖') --如果插入全部列,可以不用写列名
insert into student values ('李东','男',37)

插入标识列Set Identity_Insert

--如果需要在标识列中插入一个值,可以使用Set Identity_Insert语句,但注意 主键不可重复!
set Identity_Insert student on --设置允许插入标识列
insert into student (id,name,sex,age) values (4,'梁不贱','男',24)
set Identity_Insert student off --插入后 关闭

使用Insert Into 插入多行数据

--使用Insert Into 插入多行数据,使用逗号分割
insert into student (name,sex,age) values
('张三','男',18),
('李四','女',19),
('王五','女',20)

使用Select语句插入

--使用Select 语句可以将现有表中的多行数据插入到目标表中
insert into student (name,sex,age) select Sname,Ssex,Sage from oldTable

使用Select Into插入

--使用Select Into 插入数据
--该方法其实是创建了一张新表,然后由select语句将所有行添加到新创建的表中。
select id,name,sex,age
into newTable
from student
--这种方式创建的表,没有主键,索引,以及约束,并且表列的长度也会发生变化。不适合创建永久表

更新数据

使用Update语句更新数据

--需要注意的是,如果不限制范围,则整表都会更新
update student set name='王大锤' where id = 3

引用多表更新数据

--有时会需要引用另外的表,用来限制更新记录
create table [user]
(
userID int identity(1,1) primary key,
userName varchar(30) not null,
passWord varchar(30) not null,
RoleId int not null
)
create table [role]
(
roleId int identity(1,1) primary key,
roleName varchar(30) not null,
roleContent varchar(50) not null
)
insert into [user] values ('admin','admin',1),('editor','editor',2),('system','system',3)
insert into [role] values ('管理员','网站管理员'),('编辑','网站编辑'),('系统','系统管理员') update [role] set roleContent = '只有user表中的用户名类似adm才会修改'
from Role r
inner join [user] u
on r.roleId = u.RoleId
where u.userName like 'adm%' --如果没有这个限制条件 则整表都更新 select * from [role]

删除数据

使用Delete删除

--如果不限制条件则整表都会被删除。
delete from student where id = 1

引用多表删除数据

--先删除user表中的admin
delete from [user] where userName = 'Admin' delete from [role]
from [role] r
left outer join [user] u
on r.roleId = u.userID
where u.RoleId is null --删除权限表中未被user表中引用的数据,管理员被删除 select * from [role]

使用truncate删除所有行

truncate table oldTable
--truncate 会删除所有行,无法指定范围.

合并数据

Merge 语句是一个多种功能的混合语句,在一个查询中可以完成Insert、Update、Delete等功能。

根据与源表联接的结果,对目标表执行插入、更新或删除操作。源表中包含即将被添加(或更新)到目标表中的数据行,而目标表接受插入(或更新)操作,可以对两个表进行同步操作。

SQL Server 2008之前的版本中是没有的,所以以前都是先删掉再添加,或写一些分支条件判断存在否 再insert 或update。

--创建源表
create table sourceTable(
id int,
content varchar(30)
) --创建目标表
create table targetTable(
id int,
content varchar(30)
) --插入测试数据
insert into sourceTable values (1,'S001'),(2,'S002'),(3,'S003'),(4,'S004'),(5,'S005')
insert into targetTable values (1,'target001'),(2,'target002'),(6,'target006'),(7,'target007') select * from sourceTable
--源表
--1 S001
--2 S002
--3 S003
--4 S004
--5 S005
select * from targetTable
--目标表
--1 target001
--2 target002
--6 target006
--7 target007 --编写merge语句
merge into targetTable t --目标表
using sourceTable s --源表
on t.id = s.id --类似join 完成两表之间的匹配
when matched --如果两表中有值被匹配,更新
then update set t.content = s.content
when not matched --如果没有匹配结果,插入
then insert values(s.id,s.content)
when not matched by source --目标表中存在但源表中不存在,删除
then delete; --再次查询,则两表同步

返回输出的数据

OUTPUT 子句可以把受影响的数据行返回给执行请求的任何接口,并且可以插入到一张表中。

OUTPUT子句可以引用inserted或deleted虚拟表,取决于需要修改前(deleted)或修改后(inserted)的数据。

输出insert语句的执行结果

insert into student
output inserted.id,inserted.name,inserted.sex,inserted.age --inserted.* 所有
select '哈哈','女',24
--返回insert语句插入的记录,对于查找服务器生成的值并返回给应用程序是很有用的。

输出update语句的执行结果

update student set name='张振'
output deleted.name as oldName,inserted.name as updateValue
where id = 4
--返回修改之前的名字 和修改之后的名字
--可以用来追踪对数据库的删除操作

将OUTPUT结果插入一张表中

--创建审计表
create table db_Audit
(
id int not null,
name varchar(50) not null,
sex varchar(50) not null,
age int,
deleteDate datetime not null
constraint DF_deleteDate_TOday default(getdate()) --默认约束 当前时间
) delete from student
output deleted.id,deleted.name,deleted.sex,deleted.age
into db_Audit(id,name,sex,age)
where id <10 -- 将id小于10的全部删除并插入到审计表中 select * from db_Audit

Merge通过output子句,可以将刚刚做过变动的数据进行输出。

merge into targetTable t    --目标表
using sourceTable s --源表
on t.id = s.id --类似join 完成两表之间的匹配
when matched --如果两表中有值被匹配,更新
then update set t.content = s.content
when not matched --如果没有匹配结果,插入
then insert values(s.id,s.content)
when not matched by source --目标表中存在但源表中不存在,删除
then delete
output $action as action,inserted.id as 插入的id,
inserted.content as 插入的内容,
deleted.id as 删除的id,
deleted.content as 删除的内容;

操作数据(insert、update、delete)的更多相关文章

  1. 关于MyBatis mapper的insert, update, delete返回值

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  2. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  3. mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干

    1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...

  4. [Hive - LanguageManual] DML: Load, Insert, Update, Delete

    LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...

  5. insert update delete 语法 以及用法

    insert update delete 被称为 数据定义语句语句 也就是数据的增加 修改 删除 其中不包括查询 譬如: create database -创建数据库 alter database - ...

  6. sql中同一个Trigger里同时包含Insert,Update,Delete

    sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...

  7. mybatis select/insert/update/delete

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  8. mysql数据恢复 insert\update\delete 工具MyFlash

    一.简介MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具.该工具通过解析v4版本的binlog,完成回滚操作.相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易. 该 ...

  9. LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  10. mybatis insert update delete返回都是整型 0,1,增,删,改要提交事物

    mybatis insert update delete返回都是整型 0,1, 没有扔 增,删,改要提交事物

随机推荐

  1. Android 自学之画廊视图(Gallery)功能和用法

    Gallery与之前讲的Spinner有共同的父类:AbsSpinner,表明Gallery和Spinner都是一个列表框.他们之间的区别在于Spinner显示的是一个垂直的列表框,而Gallery显 ...

  2. hdu 4267 树形DP

    思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...

  3. hdu 1394 树状数组

    思路:从后面往前面统计,每次先sum+=Sum(num[i]+1),然后在update(num[i]+1,1).这样每次Sum每次加的个数就是num[i]的逆序对个数. 每次从队首调一个元素到队尾,逆 ...

  4. BZOJ 2962

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 618  Solved: 225[Submit][Status][Discuss] ...

  5. BZOJ 3831

    3831: [Poi2014]Little Bird Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 121  Solved: 68[Submit][S ...

  6. css cursor url用法格式详解

    css cursor url用法格式:css:{cursor:url('图标路径'),auto;} //IE,FF,chrome浏览器都可以 实例代码:html{cursor: url("h ...

  7. MyBatis(3.2.3) - Handling enumeration types

    MyBatis supports persisting enum type properties out of the box. Assume that the STUDENTS table has ...

  8. Slickflow.NET 开源工作流引擎基础介绍(五) -- 会签加签高级特性介绍

    前言:会签和加签是常见审批流程模式,在引擎中,对这两种流程模式做了分别定义和实现,其中也用到了Workflow Pattern的Multiple Instance(多实例) . 1. 会签和加签的定义 ...

  9. asp自动解析网页中的图片地址,并将其保存到本地服务器

    程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...

  10. WPF、Silverlight项目中使用柱状图、饼状图、折线图

    在开发的过程中,可能会遇到柱状图.饼状图.折线图来更好的显示数据,最近整理了一下,遂放出来望需要的朋友可以参考.本文仅仅是简单显示,如需复杂显示效果请参考官网代码示例.----本文代码使用WPF,Si ...