细小知识点之MySQL(二)

来源:互联网 发布:剑灵千甄拳捏脸数据 编辑:程序博客网 时间:2024/04/29 20:57

1.三范式

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

第二范式是除了主键以外的其它列,都依赖于该主键,消除部分依赖(A->B,C->D。A,D为主键)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关消除传递依赖(A->B,B->C。C为主键)


2.事务的隔离级别

脏读:一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交

幻读(Phantom Reads):事务两次查询同一数据但是结果不一样。这是因为在两次查询过程中有另外一个事务插入或删除数据造成的,重点是插入或删除

不可重复读(Non-repeatable Reads)一个事务对同一行数据重复读取两次,但是却得到了不同的结果,重点是修改

未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。不允许两个事务同时写,但允许一个写,一个读。该隔离级别可以通过“排他写锁”实现。

提交(Read Committed):允许不可重复读取不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务


序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。




0 0
原创粉丝点击