操作数据(insert、update、delete)
插入数据
使用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)的更多相关文章
- 关于MyBatis mapper的insert, update, delete返回值
这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干
1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...
- [Hive - LanguageManual] DML: Load, Insert, Update, Delete
LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...
- insert update delete 语法 以及用法
insert update delete 被称为 数据定义语句语句 也就是数据的增加 修改 删除 其中不包括查询 譬如: create database -创建数据库 alter database - ...
- sql中同一个Trigger里同时包含Insert,Update,Delete
sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...
- mybatis select/insert/update/delete
这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...
- mysql数据恢复 insert\update\delete 工具MyFlash
一.简介MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具.该工具通过解析v4版本的binlog,完成回滚操作.相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易. 该 ...
- LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作
我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...
- mybatis insert update delete返回都是整型 0,1,增,删,改要提交事物
mybatis insert update delete返回都是整型 0,1, 没有扔 增,删,改要提交事物
随机推荐
- Android 自学之画廊视图(Gallery)功能和用法
Gallery与之前讲的Spinner有共同的父类:AbsSpinner,表明Gallery和Spinner都是一个列表框.他们之间的区别在于Spinner显示的是一个垂直的列表框,而Gallery显 ...
- hdu 4267 树形DP
思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...
- hdu 1394 树状数组
思路:从后面往前面统计,每次先sum+=Sum(num[i]+1),然后在update(num[i]+1,1).这样每次Sum每次加的个数就是num[i]的逆序对个数. 每次从队首调一个元素到队尾,逆 ...
- BZOJ 2962
2962: 序列操作 Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 618 Solved: 225[Submit][Status][Discuss] ...
- BZOJ 3831
3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 121 Solved: 68[Submit][S ...
- css cursor url用法格式详解
css cursor url用法格式:css:{cursor:url('图标路径'),auto;} //IE,FF,chrome浏览器都可以 实例代码:html{cursor: url("h ...
- MyBatis(3.2.3) - Handling enumeration types
MyBatis supports persisting enum type properties out of the box. Assume that the STUDENTS table has ...
- Slickflow.NET 开源工作流引擎基础介绍(五) -- 会签加签高级特性介绍
前言:会签和加签是常见审批流程模式,在引擎中,对这两种流程模式做了分别定义和实现,其中也用到了Workflow Pattern的Multiple Instance(多实例) . 1. 会签和加签的定义 ...
- asp自动解析网页中的图片地址,并将其保存到本地服务器
程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...
- WPF、Silverlight项目中使用柱状图、饼状图、折线图
在开发的过程中,可能会遇到柱状图.饼状图.折线图来更好的显示数据,最近整理了一下,遂放出来望需要的朋友可以参考.本文仅仅是简单显示,如需复杂显示效果请参考官网代码示例.----本文代码使用WPF,Si ...