MySQL——事务

Posted 名字真的很急用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL——事务相关的知识,希望对你有一定的参考价值。

事务

  1. 什么是事务

    • 是由一条或者多条sql语句组成, 要么全部成功,要么全部失败(执行回滚)
  2. 回滚(从哪来的回哪去)

    • 在事务运行的过程中发生了某个故障,事务便不再继续执行下去,系统对事物中数据所有已完成的

      操作全部撤销,滚回到开始时的状态

CREATE TABLE zh(
   id INT PRIMARY KEY AUTO_INCREMENT,
   sname VARCHAR(20),
   money DOUBLE
	
)
INSERT INTO zh VALUES(NULL,'小明',1000);
INSERT INTO zh VALUES(NULL,'小王',1000);

-- 转钱操作

UPDATE zh SET money = money - 500 WHERE id = 1;
系统崩了
UPDATE zh SET money = money + 500 WHERE id = 2;


事务的操作

  • 手动提交事务
  • 自动的提交事务

手动提交事务的格式

开启事务start transation;BEGIN
提交事务commit
回滚事务rollback
START TRANSACTION;
UPDATE zh SET money = money - 500 WHERE id = 1;
崩了
UPDATE zh SET money = money + 500 WHERE id = 2;

SELECT * FROM zh
ROLLBACK
# commit

回滚:事务开启前的状态

取消自动提交

  • SHOW VARIABLES LIKE ‘autocommit’ —查看当前的提交方式

    • on :自动提交
    • off :手动提交
  • SHOW VARIABLES LIKE 'autocommit'
    
    SET @@autocommit = off
    
    SELECT * FROM zh
    
    INSERT INTO zh VALUES(NULL,"松江",5)
    

事务的四大特性

特性含义
原子性每个事务都是一个整体,不可再拆分。事务中所有的sql要么全部执行成功,要么都失败
一致性事务在执行前数据库的状态与执行后数据库的状态保持一致;
隔离性事务和事务之间不应该相互影响,执行时保持隔离状态
持久性一旦事务执行成功,对数据库修改是永久的。就算你关机,数据也会保存下来

mysql的隔离级别(了解)

数据并发访问

  • 一个数据库可能有多个客户端在访问,这些客户端都可以并发方式访问数据库,数据库的相同数据可能被多个事务同时访问,如果我们不对其采用隔离,就会发生各种问题,破坏数据的完整性

数据并发访问产生的问题

并发访问引发的问题含义
脏读一个事务读取到了另一个事务的尚未提交的数据
不可重复读一个事务中两次读取的数据内容不一致
幻读一个事务中,某一次的select操作结果所表现得数据状态,无法支撑后续的因为误操作,查询到的数据不准确,导致幻读

四种隔离级别

级别名字隔离级别脏读不可重复读幻读
1读未提交read uncommitted不能不能不能
2读已提交read committed不能不能
3可重复读repeatable read不能
4串行化serializable
  • 级别效果,执行效率越低

查看隔离级别

SELECT @@tx_isolation

设置隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别

脏读

不可重复读

  • 同一个事务中,进行查询操作,每次读取的内容是不一样的

幻读

  • select 某记录是否存在,不存在,插入数据,但是执行insert的时候发现记录已经存在,无法插入。

以上是关于MySQL——事务的主要内容,如果未能解决你的问题,请参考以下文章

基础-事务

理解片段事务期间片段的生命周期方法调用

提交带有全屏片段的片段事务

使用 OnItemClickListener 列出视图片段到片段事务

Android中的片段事务问题

Android从后台堆栈中删除事务