MySQL-存储引擎、锁以及事务

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;

转载于:https://www.jianshu.com/p/ae2c055218d0

猜你喜欢

转载自blog.csdn.net/weixin_34315665/article/details/91228932