mysql-事务与存储引擎
事务
事务是恢复和并发控制的基本单位,指一件事从开始发生到结束的整个过程。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
- 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
事务应用:
开启事务:start transaction;
执行sql命令;
中止事务:commit; rollback;
rollback只针对于对表记录的增删改,对创建库、创建表的操作无效
存储引擎
存储引擎是用来处理表的处理器。
基本操作:
查看表的引擎:show create table 表名;
创建表时指定存储引擎:create table 表名 () engine=myisam;
查看所有的数据引擎:show engines;
常用存储引擎特点:
innodb:
- 共享表空间:表名.frm (表结构) 表名.ibd(表结构&索引信息)
- 支持行级锁
myisam:
- 独享表空间:表名.frm(表结构) 表名.myd(表记录) 表名.myi(索引信息)
- 支持表级锁
memory:
- 表名.frm(表结构)
- 存储于内存当中,服务重启之后表结构在,表记录都消失
锁:为了解决客户端并发访问的冲突问题
锁类型:读锁(可以进行查询,但不能改变表中内容),写锁(insert、update、delete,互斥锁,排他锁)
锁粒度:表级锁、行级锁
执行查询比较多的表使用myism引擎(使用innodb比较浪费资源);执行写操作比较多的表使用innodb引擎