事务处理
将对数据库进行隔离,acid(原子性,一致性,隔离性,持久性)
- 只有INnoDB类型的表支持事物处理
- 在
autocommit=false
的情况下操作insert / update / delete
(也就是对数据的更改),如果不明确的指定是否commit或者rollback,对外面的数据是没有影响的。
MyIsam
数据库引擎不起作用,修改:
alter table t1 engine=innodb [AUTO_INCREMENT=1 CHARSET=utf8 comment '数据引擎修改']
show create table t1;
一般设置
set autocommit = 0; 自动提交机制
start transaction; 开启一个事务
demo 一个汇钱的过程
delete from t1 where id=11; 执行操作
update t1 set money = money - 5000 where uid='001'
update t1 set money = money + 5000 where uid='002'
savepoint p1; 保存,设置还原点
rollback to p1; 恢复到p1的原点
防插入锁–自动识别死锁
防插入锁
SELECT * FROM tablename WHERE id>200 那么id>200的记录无法被插入
自动识别死锁:
先进来的进程被执行,后来的进程收到出错消息,并按ROLLBACK方式回滚
innodb_lock_wait_timeout = n 来设置最长等待时间,默认是50秒
CMD 模式
不让mysql自动提交机制 或为 autocommit= 1; 都会产即生效
mysql > set autocommit = 0;
开启一个事务
mysql > start transaction;
对数据内容进行维护 包括insert update delete这三种操作
mysql > update book set name='redhat' where id=3;
是否提交我的操作,commit是提交 rollback是回滚。
mysql > commit/rollback;