mysql笔记(三)--事务

文章目录

(一) mysql笔记–基本概念
(二) mysql笔记–基本操作
(三) mysql笔记–事务
(四) mysql笔记–索引
(五) mysql笔记–其他操作

3. 事务

    事务保证了一些操作同时成功或者同时失败,例如转账,即提供撤销机会
mysql默认开启事务(自动提交), select @@autocommit;查看;写完sql语句后需要执行commit;提交后无法撤销,若事务未结束更改表属性或其他操作会隐式提交
    开启自动提交后执行sql语句立即生效,不能回滚(rollback即撤销)

3.1 事务的特性
  • A 原子性(Atomicity): 事务时最小单位,不可以分割
  • C 一致性(Consistency): 同一事务中必须保证同时成功或失败
  • I 隔离性(Isolation): 事务之间相互隔离
  • D 持久性(Durability): 事务一旦结束,不可返回

    事务–详见百科

3.2 事务的操作
  1. 事务开启
	修改默认提交 set autocommit = 0
	使用 begin;
	使用 start transaction;
  1. 事务提交 commit
  2. 事务撤销 rollback
	直接回滚回到最初状态
	设置回滚点: savepoint 名称
	回滚到某个点: rollback to 回滚点名称
3.3 事务的隔离性
3.3.1 隔离等级
  1. 查看数据库隔离等级:
	会话级: select @@transaction_isolation 或者 select @@tx_isolation
	系统级: select @@global.transaction_isolation
  • read uncommitted; 读取未提交的
  • read commited; 读取已提交的
  • repeatable read; 可以重复度,默认级别
  • serializable; 串行化
  1. 更改系统隔离级别
	等级1 set global transation isolation level read uncommitted;
	等级2 set global transation isolation level read committed;
	等级3 set global transation isolation level repeatable read;
	等级4 set global transation isolation level serializable;
	等级越高效率越低
3.3.2 读取问题
  1. 脏读现象:在read uncommitted级别1,不同终端读取到未提交的数据,其他终端可撤回,造成欺骗,这不允许的
  2. 不可重复读现象:在read commited级别2,事务过程中其他终端操作了同一张表,造成前后数据不一致
  3. 幻读:在repeatable read级别3,事务中其他的终端插入了新的数据,但不可读取到,当插入相同的主键时产生错误
  4. 串行化serializable,解决了以上问题,即给表上锁,不同终端排队操作,没有超时的情况下则排队,但不能并发读写,性能极低

你可能感兴趣的:(mysql)