为什么需要事务:
示例:
银行转账问题 假定资金从账户A转到账户B,至少需要两步 账户A的资金减少 然后账户B的资金相应增加。
示例
假定张三的账户有1000元,李四账户有1元
UPDATE bank set money=money-500 WHERE name='张三';
UPDATE bank set money=money+500 WHERE name='李四';
什么是事务
事务的特性:
事务必须具备以下四个属性,简称ACID 属性
原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)
原子性:
事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行
一致性:
当事务完成时,数据必须处于一致状态
隔离性:
并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
持久性:
事务完成后,它对数据库的修改被永久保持
语法
如何创建事务如何创建事务:
MySQL中支持事务的存储引擎有InnoDB和BDB
开始事务
BEGIN ; 或 START TRANSACTION;
提交事务
COMMIT ;
回滚(撤销)事务
ROLLBACK ;
示列:
set autocommit=0;
BEGIN;
UPDATE bank set money=money-500 WHERE name='张三';
UPDATE bank set money=money+500 WHERE name='李四';
COMMIT;
默认情况下,每条单独的SQL语句视为一个事务 关闭默认提交状态后,可手动开启、关闭事务
关闭/开启自动提交状态
SET autocommit = 0|1;
值为0:关闭自动提交 值为1:开启自动提交
关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务