您的位置:首页 > 数据库

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

2017-08-13 15:17 302 查看
数据库三大范式:

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(...)来设置隔离级别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: