爱吃巧克力的程序媛

爱吃巧克力的程序媛

– 事物:是一组操作的集合,它是一个业务,是不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或销毁操作。假设存在两条正在执行的sql,这两条sql要么都成功,要么都失败
/*
事物原则:ACID原则
原子性:这两个步骤一起成功或一起失败,不能出现一个成功一个失败
一致性:事务完成时,必须使所有的数据保持一致状态
持久性:事务一旦提交或回滚,它对数据库中数据的改变就是永久性的
隔离性:数据库系统提供隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
*/

/*
隔离性可能出现的问题:
脏读:一个事物读取了另一个事物未提交的数据
不可重复度:在一个事物内读取表中的某一行数据,多次读取的结果不同
幻读:一个事务内读取到了别的事物插入的数据
*/

INSERT INTO `account` (`name`,`money`) VALUES ('A',2000),('B',1000)
-- mysql 默认开启事务自动提交

-- 手动处理事务
-- 操作:开启事务:START TRANSACTION;/BEGIN    提交事务:COMMIT    回滚事务:ROLLBACK

-- 1.关闭自动提交
SET autocommit = 0  -- 关闭

-- 2. 事务开启
START TRANSACTION  -- 标记一个事务的开始,这个之后的sql都在一个事务内(sQL都成功,或都失败)

-- 事务控制的SQL
UPDATE `account` SET `money` = `money` - 500 WHERE `name` = 'A'
UPDATE `account` SET `money` = `money` + 500 WHERE `name` = 'B'
 
-- 3.
-- ①执行成功,COMMIT 提交:持久化到数据库 
COMMIT
-- 或②执行失败,ROLLBACK 回滚:回到原来的状态
ROLLBACK
-- 事务结束
SET autocommit = 1  -- 开启自动提交

-- 补充
SAVEPOINT 保存点  -- 设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点 -- 回滚到保存点
03-02 02:52