12.事务
事务:
将一组SQL放在一个批次中去执行
原则:ACID
原子性:要么都成功,要么都失败
一致性:事务前后的数据完整要保持一致,最终一致性
隔离性:是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离
隔离导致的问题:
脏读:一个事务读取了另一个事务没有提交的数据
不可重读:在一个事务内读取表中的某一行数据,多次读取结果不同
虚读(幻读):是指在一个事务内读取都了别的事务插入的数据,导致前后读取不一致
持久性:事务一旦提交就不可逆,被持久化到数据库中
===================
测试事务实现转账
mysql自动开始事务自动提交的
SET autocommit=0; /*关闭*/
SET autocommit=1; /*开启*/
--手动处理事务
--事务开启,从这之后的SQL都在同一个事务内
START TRANSACTION
提交:持久化(成功) commit
回滚:回到原来的样子(失败)
--事务结束
SET autocommit=1 /*开启自动提交
保存点名--设置一个事务的保存点
SAVEPOINT
ROLLBACK TO SAVEPOINT 回滚保存点
删除保存点 RELEASE SAVEPOINT
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shop
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; --恢复默认值
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号