MySQL—事务(ACID)

烂漫一生 提交于 2020-02-11 20:41:32

参考博客文章:https://blog.csdn.net/dengjili/article/details/82468576

 

原子性(Atomicity)
  要么都成功,要么都失败。

一致性(Consistency)
  事务前后数据的完整性必须保持一致。

持久性(Durability)

  事务一旦提交侧不可逆,被持久化到数据库中!

隔离性(Isolation)
  事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

  每个操作每个事务都要互相隔离。

    隔离所导致的一些问题

      1.脏读:

        指一个事务读取了另外一个事务未提交的数据。

      2.不可重复读:

        在一个事务内读取表中的某一行数据,多次读取结果不同。

       (这个不一定是错误,只是某些场合不对) 

      3.虚读(幻读)

        是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
        (一般是行影响,多了一行)

MySQL---它是默认开启事务提交的!

模拟转账案例:

 -- 创建表

CREATE TABLE account(
id INT(3) NOT NULL auto_increment,
name VARCHAR(30) NOT NULL,
money DECIMAL(9,2) NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8


INSERT INTO account(name,money) VALUES('A',2000.00),('B',1000.00)


-- 模拟转账:事务
SET autocommit = 0; -- 关闭自动提交
START TRANSACTION -- 开启一个事务(一组事务)


UPDATE account SET money=money-500 WHERE name = 'A'; -- A减500
UPDATE account SET money=money+500 WHERE name = 'B'; -- B加500


COMMIT; -- 提交事务
ROLLBACK; -- 回滚


SET autocommit = 1; -- 恢复默认自动提交

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!