一、完整性约束:
实体完整性、参照完整性、用户定义完整性
实体完整性:主键不为空。
参照完整性:外键只能是另一个表的主键或者空。
二、范式
第一范式 1NF 确保每列保持原子性
定义: 所有属性都不可再分,即数据项不可分。
第二范式 2NF 消除了非主属性对于码的部分函数依赖。
定义: 若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。
第三范式 3NF 消除了非主属性对于码的传递函数依赖。
定义: 非主属性不传递依赖于码()
BC范式 消除主属性对码的传递函数依赖。
定义:任何属性不传递依赖于码。
三、事务
由一系列的操作构成的整体,整体必须全部执行成果,否则恢复到未执行之前。
事务特性
原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性:事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。一致状态的含义是数据库中的数据应满足完整性约束,符合现实逻辑状态。
隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性:一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。
数据一致性问题
脏读:事务A读到了事务B还没有提交的数据
不可重复读:事务A先读一次记录一,然后事务B提交修改(update)、删除(delete)记录一,事务A在读一次记录一,两次数据不一致。
幻读:事务A先读一次十条记录,然后事务B提交插入(insert)其他记录,事务A在读一次,发现插入的新数据。
事务隔离级别
未提交读:写数据,则另外一个事务不允许同时进行写操作,但允许读。不使用锁。
提交读:读事务,则允许其他事务读写,写事务,禁止其他事务读写,防止脏读。使用写锁。
可重复读:在一个事务内,多次读同一个数据,在这个事务还没结束时,其他事务不能读写,禁止脏读、不可重复读。使用读写锁。
串行化:提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。保证数据一致性。一般通过锁表实现。
共享锁:读锁
排他锁:写锁
四、连接
内连接:包含两者共有的。
左连接:左边显示,右边不存在设为空。
外连接:包含两者全部,某个数据不存在设为空。
Mysql
InnoDB:支持事务,支持外键,支持行锁和表锁