1.概述
逻辑上的一组操作,组成这样操作的单元要么全部成功,要么全部失败
分类:
自动事务:一条sql语句就是一个事务,自动事务为MySql的默认事务
2.开启事务
手动开启事务:
(1)
start transaction;开启事务
commit:提交 //执行不出现正常,提交【未提交之前,修改是在临时区修改,提交之后再去修改数据库数据】
rollback;回滚 //当执行失败执行回滚即返回原状态
-- 开启事务
START TRANSACTION;
-- 转账
update account set money=money-100 where name='张三';
SELECT * from account;
-- 事务回滚:执行失败时回滚
SELECT * from account;
ROLLBACK;
-- 提交
COMMIT;
补充:回滚点
回滚点设置 |
---|
设置回滚点 :savepoint |
回到回滚点 rollback to name |
start TRANSACTION; --初始设置money=1000
UPDATE account set money=money-100 where name='张三';
UPDATE account set money=money-100 where name='张三';
UPDATE account set money=money-100 where name='张三';
SAVEPOINT a;//此时money=700
UPDATE account set money=money-100 where name='张三';
UPDATE account set money=money-100 where name='张三';
SELECT * from account;//money=500
ROLLBACK to a;
SELECT * FROM account;//money=700
COMMIT;
(2)设置MYSQL中自动提交参数
- show variables like ‘%commit%’ //查看是否自动提交
设置自动提交参数为OFF
- List item
- set autocommit =0;–0:off 1:on
-- 修改自动提交
set autocommit =0;
3.事务的特性
原子性
指原子的不可分割性,事务中的操作要么发生,要么全部不发生
一致性
指事务前后数据完整性必须保持一致
持久性
指一个事物一旦提交,在数据库存储的数据的改变是永久性的
隔离性
指多个用于并发操作数据库,互不影响,互不干扰
补充 如果不考虑隔离性,会发生的状况
并发访问的问题 |
---|
脏读:一个事务读取到另一个事物还未提交的数据 |
不可重复读:多次读取事务的【内容】不一致,由其他用户更新数据库引起(update) |
幻读:两次读事务的数据不一致,是由于其他用户的insert,delete操作引起的 |