学习sqlserve的一些笔记
创建表:
1 create table 表名 2 { 3 //定义列名 4 id int identify(1,1) primary key,//自动编号:从1开始每次增长1,约束:主键约束 5 name nvarchar(50) not null //非空约束 6 }
表数据的增删改查:
1 insert into 表名 values() 2 delete from 表名 3 update 表名 set 4 select * from 表名 5 注:当删除表中所有数据还可使用truncate table 表名,它不能加where条件但是比delect所有表数据效率高,因为它通过释放数据页来删除数据,在事务日志中只记录数据页的释放;而且删除数据后计数器重置为定义的种子,如果没有定义种子,则使用默认值1。
修改表结构:
1 alter table 表名 2 add 列名 数据类型 //增加一列 3 drop column 列名 //删除一列 4 alter column 表名 数据类型 not null //修改一列,并添加非空约束 5 add constraint PK_表名_列名 primary key(列名) //添加主键约束 6 add constraint UQ_表名_列名 unique(列名) //添加唯一约束 7 add constraint DF_表名_列名 default(值) for 列名 //添加默认约束 8 add constraint CK_表名_列名 check(列的条件表达式) //添加检查约束 9 add constraint FK_表名_列名 foreign key(外键表的列名) references 主键表名(主键表的列名) //添加外键约束 10 drop constraint 约束名1,约束名2............ //删除约束
去除重复记录:
1 select distinct .... from 表名 ...... //对查询的结果集去重(针对每一列都相同的情况)
排序:
1 select * from 表名 order by 列名 desc //按照列名降序排序,默认为asc升序排序 2 注:order by语句必须放在整个sql语句的后面。
查询数据前多少条:
1 select top 2 值 //如:5,则表示查询该表前5条 3 (表达式) //如:(2*2),则表示查询该表的前4条 4 值 percent //如:30 percent,则表示查询该表的前30% 5 * from 表名
模糊查询:
通配符:_ 表示任意的单个字符
1 例如:select * from 表名 where 列名 like '张_' //表示查询出 张字开头,单个任意字符结尾 的数据
% 匹配任意多个字符
1 例如:select * from 表名 where 列名 like '%张%' //表示查询出 包含张字 的数据
[] 表示范围内的单个字符
1 例如:select * from 表名 where 列名 like '张[0-9]' //表示查询出 张开头,0-9中任意数字结尾 的数据
[^] 不在指定范围内的单个字符
1 例如:select * from 表名 where 列名 like '[^0-9]' //表示查询出 不是0-9中任意数字 的单个字符
自定义转义符:escape
1 例如:select * from 表名 where 列名 like '%/[%' escape '/' //定义/为转义符,此语句表示查询出所有包含[的数据
空值判断:
1 select * from 表名 where 列名 2 is null //判断为空 3 is not null //判断部位空
类型转换函数:cast(表达式 as 数据类型)、convert(数据类型,表达式[,格式])
注:[]表示参数可写可不写。
联合结果集:union,union all
1 例如:select 列名1,列名2 from 表1 2 union all 3 select 列名3,列名4 from 表2 4 注意:联合的结果集列名默认使用第一个结果集中的列名,每个结果集必须有相同的列数,每一列的数据类型必须相容。 5 区别:union会去除重复列,所以效率较低。
T-SQL:
声明变量:
1 declare @name nvarchar(50),@age int = 18
变量赋值:
1 set @name = '张三'
循环:
1 while 条件 2 begin 3 .......... 4 end
条件判断:
1 if 条件 2 begin 3 .... 4 end 5 else 6 begin 7 ... 8 end
事务:
特性ACID:
原子性(Atomicity):事务是一个完整的操作,事务的各个步骤是不可分割的,要么全部执行,要么全都不执行。
一致性(Consistency):当事务完成时,数据必须处于一致状态。
隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。
持久性(Durability):事务完成后,它对数据库的修改被永久保持。
1 例子: 2 begin transaction //开始一个事务 3 declare @sum int = 0 //声明一个变量,记录sql语句出错次数 4 sql语句1 5 set @sum = @sum + @@error //@@error:如果sql语句没有错返回0 6 sql语句2 7 set @sum = @sum + @@error 8 if @sum <> 0 //如果sum不等于0,表示有sql语句出错 9 begin 10 rollback //回滚 11 end 12 else 13 begin 14 commit //提交该事务 15 end
存储过程:
执行存储过程:exec 存储过程名称
创建存储过程:
1 create proc 存储过程名称 2 as 3 begin 4 ....... 5 end
创建带参数的存储过程及执行:
1 create proc usp_test //创建代参的存储过程 2 @name nvarchar(50), //定义参数 3 @age int output //定义输出参数 4 as 5 begin 6 set @age = select 表.age from 表 where 表.name = @name //参数的使用 7 end 8 9 declare @num int //声明一个变量,传递给输出参数 10 exec usp_test @name = '张三',@age = @num output //执行带参的存储过程 11 print @num //输出变量,即输出参数的值
例子(存储过程实现分页):
1 create proc usp_getPage 2 @pageSize int = 6, //每页的条数 3 @pageIndex int = 1, //当前要查看第几页 4 @pageCount int output, //共多少页,输出参数 5 @recordCount int output //共多少条记录,输出参数 6 as 7 begin 8 select * 9 from (select * ,rownumber = row_number() over(order by id asc) from 表名) as temp 10 where temp.rownumber between (@pageIndex - 1)*@pageSize + 1 and @pageSize*pageIndex 11 set @recordCount = (select count(*) from 表名) //计算表中记录 12 set @pageCount = ceiling(@recordCount*1.0/pageSize) //计算页数,ceiling()向上取整13 end 14
15 declare @rc int,@pc int //用于传递给输出参数 16 exec usp_getPage @pageSize = 6, @pageIndex = 1, @recordCount = @rc output, @pageCount = @pc output //执行带参数的存储过程 17 print @rc //打印总记录条数 18 print @pc //打印总页数
创建触发器:
1 create trigger 触发器名称 on 表名 2 after insert,delete,update //当进行增加、删除、修改时触发 3 as 4 begin 5 ........ 6 end