前言
在我们与MySQL亲密接触的这几天,我们了解的MySQL的前世今生,也和MySQL一起发生了很多有趣的事情,经过这几天的接触我们与MySQL已经变得亲密无间了。人生的道路总是在前进,我们也需要去发现另外的好朋友,也需要看看其他美好的风景,所以我们和MySQL也进行道别,当我们以后需要的时候可以随时回来找到我们的好朋友MySQL。
事务
概念:
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
数据库引擎
概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中
操作:
show engines: 查看mysql支持的存储引擎
在这里我们会涉及到一个面试问题:
MyISAM 与 InnoDB 区别?
事务的ACID特征
原子性(Atomicity):是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency):保证数据的状态操作前和操作后保持一致
隔离性(Isolation):多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
持久性(Durability):当事务提交或回滚后,数据库会持久化的保存数据
事务操作步骤
1. 开启事务
2. 编写事务逻辑操作单元
3. 提交事务或回滚事务
事务分类
隐式事务:没有明显的开启和结束事务的标志
insert、update、delete语句本身就是一个事务
显式事务:具有明显的开启和结束事务的标志
1. 取消自动提交事务:set autocommit=0;
2. 开启事务:start transaction;
3. 提交或回滚事务:
- commit;
- rollback;
事务的隔离级别(面试常考)
这个是有关事务的常考面试题所以我们需要重视
事务并发问题是如何产生的?
- 当多个事务同时操作同一个数据库的相同数据时
事务并发问题
- 脏读:一个事务读取到了另外一个事务未提交的数据
- 不可重复读:同一个事务中,多次读取到的数据不一致
- 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
处理事务并发问题,设置事务隔离级别
- READ UNCOMMITTED
- READ COMMITTED:可以避免脏读
- REPEATABLE READ:可以避免脏读、不可重复读和一部分幻读
- SERIALIZABLE:可以避免脏读、不可重复读和幻读
注意:隔离级别从小到大安全性越来越高,但是效率越来越低
设置隔离级别
- set session|global transaction isolation level 隔离级别名;
查看隔离级别
- select @@tx_isolation;
数据库的三大范式
1.第一范式:保证列具有原子性,不可再分
2.第二范式:满足第一范式的基础上,具有唯一性,添加主键外键等,限制表中多对多的关系
3.第三范式:每列和主键都有直接关系,限制一张表中的一对多关系
具体可以去看看这篇博客。
总结
数据库的学习我们就到此结束,我们在下一次将会踏上另一端征程。