MySQL多用户冲突错误处理

MySQL多用户冲突错误处理

 
以上面的例子来说,首先在用户A取得数据的时候,就对数据进行锁定,这样用户B在用户A对数据进行操作的时候是不能对同一数据进行操作的。只有当用户A完成对数据的更新并解除锁定后,用户B才能取得数据,这样数据冲突就解决了。
 
数据库锁定的种类
按照使用的目的可以将锁定分为共享锁定(Shared Lock)与排他锁定(eXclusive Lock) 。共享锁定是当用户参照数据时,将对象数据变为只读形式的锁定。在上面的例子中,当用户A对数据实施了共享锁定后,用户B只能对数据进行参照而不能更新.有时候也被称为读取锁定。
而排他锁定是使用INSERT/UPDATE/DELETE命令对数据进行更新时使用的锁定。其他的进程(或事务)一律不能读取该数据。实施了排他锁定的数据,在其他事务处理中当然不能进行更新以及参照。因此也被称为写入锁定或独占锁定。
数据库锁定粒度
锁定对象的大小,单位通常被称为锁定的粒度。支持的粒度随着数据库的不同而有所差异,有以下3种锁定的粒度:
1、锁定记录(行);
2、锁定表;
3、锁定数据库.
锁定的粒度影响同时运行的进程数量(或称作同时运行性)。例如,在实施了行锁定的情况下,还可以对同一表的其他行进行处理, 而如果实施了表锁定,那么其他的事务处理只能在这个表锁定被解除后才能对这个表进行操作。一般的情况下,锁定的粒度越小同时运行性才越高。
 
但是也不是意味着采用越小的粒度越好,因为一个个的锁定都还是要消耗数据库服务器资源的, 也就是说锁定的数目越多,消耗的服务器资源也会越多。
这里, 如果数据库中行单位粒度的锁定大量发生的情况时,数据库有将这些锁定的粒度自动向上提升的机制,通常被称为锁定提升(Lock Escalation)。

posted @ 2015-09-18 20:19  Uncle_Nucky  阅读(983)  评论(0编辑  收藏  举报