数据库的事务(Transaction) 是一种机制、一个操作序列,包含了一组数据库操作命令。
事务把所有命令作为写一个整体向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。
事务是一个不可分割的工作逻辑单元
开启事务 Start Transaction; 或者begin
提交事务 commit
回滚事务 rollback
例如实现转账操作, 模拟用户a向用户b转账 500元
先准备好要测试的数据
- -- 事务
-
- -- 创建表进行测试
- CREATE table if not EXISTS employee(
- e_id int(5) PRIMARY KEY,
- e_name VARCHAR(10) comment'员工名称',
- e_money int(10)
- );
-
- select * from employee;
-
- -- 添加两条测试数据
- INSERT INTO employee VALUES(1,'张三',1000),(2,'李四',1000);
-
-
先不用事务写,如果程序出异常,上面的执行了,下面的就没有执行
张三:500 李四:1000
- -- 先不用事务模拟 张三给李四转账500
- -- 张三减钱
- UPDATE employee set e_money=e_money-500 WHERE e_name='张三';
-
- 这里瞎写让程序出bug
- -- 李四加钱
- UPDATE employee SET e_money=e_money+500 WHERE e_name='李四';
-
- -- 把钱复原
- UPDATE employee set e_money=1000;
用事务的方式写(出错后只是临时更改了数据,你在新建一个窗口查也是查不到的,一回滚事务,数据就会复原,只有提交事务,数据才会被真正的更改)
- -- 利用事务的方式写
- -- 开启事务
- BEGIN;
- -- 张三减钱
- UPDATE employee set e_money=e_money-500 WHERE e_name='张三';
-
- 这里瞎写让程序出bug
- -- 李四加钱
- UPDATE employee SET e_money=e_money+500 WHERE e_name='李四';
-
- -- 如果出异常就回滚事务(回滚到开启事务之前)
- rollback;
-
- -- 没错误就提交事务
- COMMIT;
原子性(Atomicity) 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency) 事务完成时,必须使所有的数据保持一致状态
隔离性(isolation) 多个事务之间,操作的可见性
持久性(Durability) 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
查看事务的默认提交方式1为自动提交 0为手动提交
- -- 查询事务默认提交的方式 1自动提价 0为手动提交
- SELECT @@AUTOCOMMIT;
-
- -- 修改事务为手动提交
- set @@AUTOCOMMIT =0;
如果采用手动提交,临时修该,自己的窗口查询是可以发生改变的,但是别人的窗口是查询不到变化得,用了commit命令,才算真正的修改