yonghu表
uid user rid
1 小明 10
2 小张 20
3 小李 30
4 小高 30
renwu表
id rid shengyusl
1 30 1
怎么样一个语句把yonghu表里面rid为30的字段rid修改0 并且修改了几个renwu表里面的shengyusl就加几个数量
如果分多个语句如果过程中有其他程序把yonghu里面的rid修改了,怎么保证完整性
其他的连接不会阻塞的,但是如果连接中有去操作数据库进行增删改时,由于上面的那个事务中对操作的数据进行加锁了,所以连接中的增删改操作也就会被阻塞。
但是读操作是不会被阻塞的,由于MVCC多版本并发控制读是不会被阻塞的,因为一般读操作都是快照读,而更新删除等操作都是当前读,由于加锁了,才会被阻塞的。
注:上面的场景是在 innodb 存储引擎下的默认 RR可重复 隔离级别下。
其实可以使用两个语句的,手动开启一个事务,在这个事务中执行这两个更新语句,最后再手动提交事务即可;
在一个事务中,当你更新yonghu表中数据时会进行加锁的,此时不提交事务那么锁就不会释放;
然后再去更新renwu表数据还是会进行加锁,并且在更新完renwu表数据后,手动提交了事务后,那么才会释放在两张表中加的锁;
在事务没提交前,两张表的其它的增删改操作会被阻塞的,是事务提交后释放了锁,此时别的增删改操作才可以继续执行;
所以就不用担心数据的一致性问题;注意 两个sql语句的执行在一个事务中才可以的;
注:上面的场景是在 innodb 存储引擎下的默认 RR可重复 隔离级别下。
开启事务只是这个句柄的增删改会被阻塞吧 其他连接数据库的不会阻塞吧