【三大范式】:
第一范式:
第一范式(1NF)用来确保每列的原子性,要求每列(或者每个属性值)都是不可再
分的最小数据单元(也称为最小的原子单元)。
第二范式:
在第一范式的基础上更进一层,要求表中的每列都和主键相关,即要求实体的唯一性。
如果一个表满足第一范式,并且除了主键以外的其他列全部都依赖于该主键,那么该
表满足第二范式。
第三范式:
在第二范式的基础上更进一层,第三范式是确保每列都和主键列直接相关,而不是间
接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他
列都依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。
【五大约束】:
主键约束:保证数据的唯一性,不允许为空值
唯一约束:保证数据的唯一性,但允许为空值
检查约束:对该列数据的范围、格式的限制(如:年龄、性别等)
默认约束:该数据的默认值
外键约束:需要建立两表间的关系并引用主表的列
【索引】:
- 索引使数据库系统无需对整个表进行扫描,加快查询速度
【 适合创建索引的列】:
主键、外键
需要快速或频繁查询的列
排序、聚合函数中的列
不适合创建索引的列:
很少查的列、很少有唯一值的列、频繁更新的列、行数较少的表
【聚集索引、非聚集索引 】:
插入数据速度查询数据速度索引的数量所需空间聚集索引慢快一表一
个少非聚集索引 快慢一表可以多个多
- create [unique] [clustered|nonclustered]
index 索引名
on table名 (列1,列2)
【事务】:
- 事务内的语句作为一个整体执行。
- 事务的特性:原子性、一致性、隔离性、持久性
- 启动事务:begin transaction
提交事务:commit transaction
回滚事务:rollback transaction
【触发器 】:
- 触发器是由事件来激发的,加强数据的完整性约束和逻辑规则
- inserted表和deleted表
对数据的操作inserted表deleted表insert添加操作存放新增的数据
update更新操作存放更新后的数据存放更新前的数据delete删除操
作存放删除的记录
【最左匹配】:
最左优先,以左为起点任何连续的索引都能匹配上。同时遇到范围
查询(>、<、between、like)就会停止匹配
【如何避免死锁】:
1 使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;
2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放
弃本次操作,避免进程悬挂;
3 优化程序,检查并避免死锁现象出现;
4 .对所有的脚本和SP都要仔细测试,在正是版本之前。
5 所有的SP都要有错误处理(通过@error)
6 一般不要修改SQL SERVER事务的默认级别。不推荐强行加锁
【为什么使用联合索引】:
1.减少开销
创建一个联合索引相当于创建了几个单独索引,这样就减少了操
作的开销和磁盘的开销
2.覆盖索引
可以之间遍历索引取得数据,而无需回表,减少了很多随机io操作
效率高,索引列越多,通过索引筛选出的数据越少。