关于autocommit的设置和FOR UPDATE的使用

关于autocommit的设置

show variables like 'autocommit';//可以查状态值。


默认1,提交语句执行立即写入磁盘数据。

set autocommit=0;//所有语句执行成功后不会立即写入磁盘数据,直到
commit;//提交或者
rollback;//撤销。


相当默认开启事务。
改变autocommit值,会隐式的自动做一次commit;

FOR UPDATE
需配合事务使用。

BEGIN WORK;
SELECT * FROM user WHERE id=1 FOR UPDATE;


此时user 数据中id=1 的数据被锁住,其它事务必须等待此次事务 提交后才能执行

COMMIT WORK;


InnoDB 预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock 将整个数据表单给锁住((有数据的话)。

事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
1. 原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
2. 一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
3. 隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
4. 持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
0 分享

要回复文章请先登录注册