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文本
作者:骘涅
链接:https://www.jianshu.com/p/99e60faca27c