MySQL-存储引擎、锁以及事务
2019-06-04 本文已影响0人
遇明不散
MySQL存储引擎(处理表的处理器)
# 查看所有存储引擎
show engines;
# 查看已有表的存储引擎
show create table 表名;
# 创建表指定的存储引擎
create table 表名(...)engine=myisam;
# 已有表
lter table 表名 engine=innodb;
锁
解决客户端并发访问的冲突问题
锁分类
锁类型
- 读锁(共享锁)
加读锁之后别人不能更改表记录,但可以进行查询 - 写锁(互斥锁、排他锁)
可以进行insert、delete、update等操作,加写锁之后别人不能查、不能改
锁粒度
- 表级锁(myisam)
- 行级锁(innodb)
常用存储引擎特点
InnoDB特点
- 共享表空间
# 表名.frm :表结构和索引文件
# 表名.ibd :表记录
- 支持行级锁
- 支持外键、事务操作
MyISAM特点
- 独享表空间
# 表名.frm :表结构
# 表名.myd :表记录
# 表名.myi :索引文件
- 支持表级锁
如何决定使用哪个存储引擎
- 执行查操作多的表用MyISAM(使用InnoDB浪费资源)
- 执行写操作多的表用InnoDB
事务
- 一件事从开始发生到结束的整个过程
- 确保数据一致性
- 事务与事务回滚只针对对记录的操作:增加、删除、修改,对创建库、创建表是无效的
属性
- 原子性:一个事务是不可分割的工作单位,事务中的各个操作要么都做,要么都不做。
- 一致性:事务必须从一个一致性状态到另一个一致性状态。
- 隔离性:一个事务的执行的不能被其他并发事务干扰。
- 持久性:一个事务一旦提交,它对数据库的改变是永久性的。
事务和事务回滚应用
- MySQL中sql命令会自动commit到数据库
show variables like "autocommit";
事务应用
# 开启事务
# 开始事务后,自动提交被禁用
begin;
# 终止事务(回滚事务)
commit; | rollback;