SQL
•范式
第一范式◾目标是确保每列的原子性。每列都是不可再分的最小数据单元 ◦
第二范式◾目标是要求每个表值描述一件事情 ◦
第三范式◾除了主键以外的其他列都不传递依赖于主键列
•语句◦
插入◾INSERT INTO 表名(列1,列2····)VALUES(值1,值2····) ◦
删除◾DELETE FROM 表名 WHERE ◦
修改◾UPDATE 表名 SET 列1=值1,列2=值2··· WHERE ◦
查找◾SELECT 列1,列2···FROM 表名 WHERE ··· group by··· having····order by
◾SELECT 列1,列2 FROM 表1 INNER JOIN 表2 ON···· ◦
约束
◾加约束◾alter table 表名 //add constraint 约束名 约束类型 约束说明
◾删约束◾alter table 表名//drop constraint 约束名 ◦
◾system databases 新建的数据库,systemobjects 新建的数据表,sysindexs 索引
◾新数据库 if exists (select * from system databases where name='') //drop database/table 名 //create database 名 //on { //name = //size= //maxsize= //filegrowth= //filename= } //log on { // 同上
◾新表 列名 数据类型 是否为空 ◦
循环
◾IF ELSE
◾IF(条件)//BEGIN//语句//END//ELSE//BEGIN//语句//END
◾WHILE
◾WHILE(条件)//BEGIN//语句//BREAK//END
◾CASE
◾CASE//WHILE 条件1 THEN 结果1//WHILE 条件2 THEN 结果2·············//END
•列操作◦
max(列),min(列),avg(列),sum(列),count(列)
•完整性◦
域完整性◾检查约束(CHECK_KEY),默认约束(DEFAULT),非空约束 ◦
实体完整性◾主键约束(PRIMARY_KEY),唯一约束(UNIQUE),标识列 ◦
引用完整性◾外键约束(FOREIGN) ◦
自定义完整性◾触发器,存储过程,规则
•数据类型转换◦
convert(数据类型,变量) ◦
cast(变量名 as 数据类型)
•变量◦
定义变量(局部)
◾Declare @变量名 数据类型 ◦赋值
◾Set/Select @变量名 = 值 ◦
全局变量
◾@@ERROR 最后一个T-SQL错误的错误号
◾@@IDENTITY 最后一次插入的标识值
◾@@LANGUAGE 当前使用的语言的名称
◾@@MAX_CONNECTIONS 可以创建的同时连接的最大数目
◾@@ROWCOUNT 受上一个SQL语句影响的行数
◾@@SERVERNAME 本地服务器的名称
◾@@TRANSCOUNT 当前连接打开的事物数
◾@@VERSION SQL Server的版本信息
•事务(TRANSACTION)◦
作为单个逻辑工作单元执行的一系列操作。
多个操作作为一个整体向系统提交,要么都执行,要么都不执行。
事务是一个不可分割的工作逻辑单元 ◦
ACID属性
◾原子性(Atomicity)事务是一个完整的操作,要么一起执行,要么一起不执行
◾一致性(Consistency)事务完成时,数据必须处于一致状态
◾隔离性(Isolation)并发事务之间彼此隔离,独立,不应以任何方式影响和依赖
◾永久性(Durability)事务完成后,它对数据库的修改被永久保持 ◦
开始事务 BEGIN Transaction
提交事务 Commit Transaction
回滚(撤销)事务 Rollback Transaction ◦
将隐性事务模式设置为打开 SET IMPLICIT_TRANSACTIONS ON
•视图◦
一个查询的名字,提高数据安全性,是一张虚拟表,不存放数据。
将多个物理数据库抽象为一个逻辑数据库 ◦
新建视图 Create View 名字 //AS(SELECT查询语句)
•索引◦
唯一索引(Unique不运行两行具有相同的索引值) ◦
主键索引(是唯一索引的特殊类型) ◦
聚集索引(clustered 一张表只允许有一个聚集索引。表中各行的物理顺序于键值的逻辑索引顺序相同)
非聚集索引(nonclustered指定表的逻辑顺序) ◦
创建索引
◾Create [Unique/clustered/nonclustered] Index 名字 on 表名(列)[with Fill factor = x]x表示填充因子:制定一个0-100的值,表示索引页填充的百分比 ◦
注意事项◾查询时,避免*,只返回需要列;索引尽量小,字节数小的列上建立索引;包含索引列的表达式作为条件时应写在第一个;避免在order by子句中使用表达式;根据业务数据发送频率,定期重新生成或重新组织索引
•存储过程◦
预先存储好的SQL程序(操作语句,变量,逻辑控制语句);保存在数据库中;通过名称和参数执行,也可返回结果;存储过程嵌套最大32层 ◦
系统存储过程
◾sp_databases 列出服务器上的所有数据库
◾sp_renamedb 更改数据库的名称
◾sp_tables 返回当前环境下可查询的对象的列表
◾sp_columns 返回某个列的信息
◾sp_hele 查看某个表的所有信息
◾sp_helpconstraint 查看某个表的约束
◾sp_helptext 显示默认值,未加密的存储过程,用户定义的存储过程,触发器或试图的实际文本
◾sp_helpindex 查看某个表的索引
◾sp_password 添加或修改登陆账户的密码 ◦
调用
◾execute 过程名[参数] ◦
创建
◾create proc[edure] 存储过程名 //@参数1 数据类型 = 默认值 output,···//As SQL语句//Go
•触发器TRIGGER◦
定义
◾一种特殊的存储过程,在对表进行更新删除插入自动执行,
◾也具备事务的功能;
◾能在多表之间执行特殊的业务规则
◾不能直接调用,常用于强制业务规则,高及约束 ◦
创建
◾create Trigger 名 On 表名[with encryption]//For 触发器类型[Delete,Update,Insert]//As Sql语句//GO with encryption表示加密触发器定义的SQL文本
•游标◦
是一种能从包括多条数据记录的结果集中每次提取一条的机制; 可以用来存放在数据库表中的数据行副本,可以指向存储在数据库中的数据行的指针; ◦
常见用途,保存查询结果 ◦fetch next from 游标名 into//Set nocount ON/OFF