数据库范式、事务、锁学习

来源:互联网 发布:mac海洋亮白粉饼色号 编辑:程序博客网 时间:2024/05/17 09:39
数据库三大范式:
1、第一范式:保证每列的原子性,不能再拆分,比如联系方式,能拆成用户名和手机,就不要合在一起;
2、第二范式:保证每列都和主键关联;
3、第三范式:保证每列都和主键直接相关,而不是间接相关,这个涉及到拆分字段到其他表,主表只显示其他表主键信息。

--------------------------
数据库事务:
1、原子性:要么都执行,要么都不执行;
2、一致性:事务开始和结束后,数据保持一致性的状态。一致性包含强一致性、弱一致性、最终一致性;
3、隔离性:分为 读未提交(可能出现脏读、不可重复读、幻读),读已提交(可能出现不可重复读、幻读),可重复读(可能出现幻读),串行读。脏读是读到别的事务未提交的事务;不可重复读是一个事务内读2次,数据不一样,可能被另一个事务更新了;幻读是读2次,返回的记录数不一样了,可能被新增或删除了记录。Innodb默认是 可重复读级别。
4、持久性:事务提交后,对数据库造成的影响是永久的。

--------------------------
Mysql中的锁:
1)MyIsam支持表级锁。
表级锁又分为共享读锁和独占写锁。
1、共享读,其他事务还可以读;
2、独占写锁,其他事务读也不行,整个表锁了就为了写。

2)Innodb支持表级锁和行级锁。行级锁分为共享锁和排他锁。
1、共享锁允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。( Select * from table_name where ......lock in share mode)。
2、排他锁允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。(select * from table_name where.....for update) 。为了允许行锁和表锁共存,实现多粒度锁机制;同时还有两种内部使用的意向锁(都是表锁),分别为意向共享锁和意向排他锁。

3)对比表级锁和行级锁
表级锁加锁快、开销小,但是锁定粒度大,影响并发
行级锁加锁慢、开销大、但是锁定粒度小,并发高

--------------------------
Jdbc的事务依赖数据库的事务支持,通过conn.setAutoCommit(false),conn.setTransactionIsolation(...)来设置隔离级别