1.概念
一条或者多条sql语句的集合!
事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败
2.事务的特性 ACID
A:原子性 完整的,不可分割的
原子性 (Atomicity):在事务中的操作,要么都执行,要么都不执行!
C: 一致性 事务执行完毕后,数据的状态是一致的()
一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!
I: ISOLation 隔离性 两个事务执行互不影响
隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!
D: 永久性 事务执行完后,对数据的影响是永久的。
持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!
3.事务操作的关键字
自动提交事务开关set autocommit=0
开始事务 start transaction /begin
提交事务 commit
回滚事务 rollback
set autocommit=1
4. 转账
DELIMITER $$ CREATE PROCEDURE usp_transfer() BEGIN ##错误总数默认是0 DECLARE t_error INTEGER DEFAULT 0; ## continue 继续 hanlder 执行 并且对 t_error重新赋值为1 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; SET autocommit=0; START TRANSACTION; UPDATE bank SET balance=balance-100 WHERE cid=1; UPDATE bank SET balance =balance+100 WHERE cid=2; IF t_error > 0 THEN ROLLBACK; ELSE COMMIT; END IF; SET autocommit=1; END$$ DELIMITER ; CALL test_sp800()
-- 事务回滚 ROLLBACK
-- 提交事务 COMMIT
UPDATE bank SET currentMoney=500000
WHERE customerName='小黑';
-- 证明mysql是默认提交事务的!
SET autocommit=0(关闭事务自动提交) | 1(开启事务自动提交)
关闭事务自动提交
SET autocommit=0; BEGIN; -- 开启事务 UPDATE bank SET currentMoney=currentMoney-10000 WHERE customerName='小黑'; UPDATE bank SET currentMoney=currentMoney+10000 WHERE customerName='小白'; COMMIT; -- 手动提交事务 UPDATE bank SET currentMoney=10000; ROLLBACK; -- 事务回滚 SET autocommit=1; -- 恢复自动提交