针对同一个事务的,这个事务中要么都完成,要么都不完成
表示事务的结束后的数据不随着外界原因导致数据丢失(事务一旦提交,就不可改变)
针对多用户同时操作,主要是排除其他事务对本次事务的影响(一旦隔离失败就会产生脏读)
注:1.脏读:一旦隔离失败就会产生脏读(脏读,指一个事务读取到另一个事务未提交的数据)
2.不可重复读:在一个事务内读取表中某一行数据,多次读取结果不同,(这个不一定是错误,只是某些场合不对)
3.虚读(幻读):指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致(一般是行影响,多了一行)
-- =======事务=========、 -- 语法 -- mysql是默认开启事务自动提交的 SET autocommit=0-- 关闭 SET autocommit=1-- 开启(默认的) -- 手动处理事务 -- 事务开启 START TRANSACTION-- 标记一个事务的开始,从这个之后sql都在同一个事务里 INSERT xx INSERT xx -- 提交:持久化(成功) COMMIT -- 回滚:回到原来的样子(失败) ROLLBACK -- 事务结束 SET autocommit=1-- 开启自动提交 SAVEPOINT 保存点名-- 设置一个事务保存点 ROLLBACK TO SAVEPOINT 保存点名 --回滚到保存点
-- =======事务=========、 -- 模拟转账(事务),先创建一张表 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;-- 恢复默认值 SELECT * FROM account
原文:https://www.cnblogs.com/CL-King/p/13733748.html