数据库事务的四个基本特征
- 原子性:事务包含的所有操作,要么成功,要么全部失败。
- 一致性:同一个事务来说,执行成功后使数据库从一个一致性状态变成另一个一致性状态。如果数据库系统出现故障,有些事务没有完成就中断,那么他修改过的一部分数据就会使数据库成为不一致性的。
- 隔离性:不同事务相互独立,互不干扰
- 持久性:事务提交后,对数据库的改变就是永久的,不能回滚
四个隔离级别
- 读取未提交:可以读取到未提交的内容,查询是不加锁的。隔离级别最差,会产生“脏读”,“未重复读”,“幻读”的情况
- 读取已提交:读取到已提交的内容,是SQL server的默认情况。一个事务已经修改但是未提交,那么另一个事务就查询不到他,避免脏读的情况。
- 可重复读:MySql的默认级别,如果一个事务在执行事务,那么其他事务就不可修改执行的内容,就防止了在两次读取内容的时候,数据被修改了。
- 串行化:最高级别,所有事情按顺序执行,效率最差。
脏读,不可重复读,幻读
- 脏读:事务a读了事务b处理的数据,然后事务b进行回滚操作,那么事务a读到的数据就是脏数据。
- 不可重复读:事务a多次读取一个数据,中间事务b对数据进行了更新,那么事务a读取的数据前后结果不一样。解决不可重复读要锁读取的行
- 幻读:事务a把数据分成abcd四个级别,此时有n条数据,事务b改变或增加删除了m条数据,使得这m条数据符合了事务a的标准,就有n+m条数据符合标准了。解决幻读要锁表
数据冗余
一个信息在数据库中多次重复出现,比如一个表有一个字段,在另一个表中这个字段具有一样的意义,那么就是数据冗余。在设计数据库时候应该减少数据冗余避免空间浪费,但是不能完全没有,数据冗余可以用作实现一些功能,就像两个表通过共同属性来建立联系就要数据冗余。