一. 数据库的三个设计范式,
第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要
求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。
第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.
注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性
二. 事物
事物特性acid:
1、原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2、一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账:转账前aaa+bbb=2000;转账后aaa+bbb=2000;
3、隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4、持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的。
事物的隔离级别:
1、如果不考虑事务的隔离性,会出现什么问题?
脏读:一个线程中的事务读到了另一个线程中事务未提交的数据
不可重复读:一个线程中的事务读到了另一个线程中提交的update的数据,前后两次读到的内容不一致。
虚读:一个线程中的事务读到了另一个线程中提交的insert或delete的数据,前后读到的记录条数不一致。
2、事务的隔离级别:
READ UNCOMMITTED 脏读、不可重复读、虚读都有可能发生
READ COMMITTED 能避免脏读;不可重复读、虚读有可能发生(Oracle默认)
REPEATABLE READ 能避免脏读、不可重复读;虚读有可能发生(MySQL默认)
SERIALIZABLE 能避免脏读、不可重复读、虚读的发生
以上隔离级别:从上到下,级别越高,性能越低,数据也越安全。
MySQL:
查看当前数据库的隔离级别:
select @@tx_isolation;
更改隔离级别:(开启事务之前更改)
set transaction isolation level 四个级别之一