针对Mysql数据库,进行数据处理中添加或删除记录时需要加锁,以保证数据的一致性和完整性。当然,有些数据库的设计能够自动检测并解决并发问题,Mysql并不是其中之一。如果在数据处理时不存在该记录,那么是否需要加锁呢?下面我们来看具体情况。
对于单记录的操作,如果该记录不存在,则不需要加锁。比如说,以下的伪代码:
BEGIN;
SELECT * FROM `table` WHERE `id`=FOR UPDATE;
IFNOT FOUND THEN
ROLLBACK;
END IF;
...
COMMIT;
当查询的记录不存在时,自然无需对记录进行加锁,因为不存在的记录无需检测并发。
对于一组记录的操作,如果要实现查询并更新操作需要加上排他锁,这样才能保证其它并发操作不能修改已经查询出的数据。不加锁的话,虽然不存在的记录不会被加锁,但是查询会引起数据的变动,因此需要加锁以保护该区块。
例如:
BEGIN;
SELECT * FROM `table` WHERE `field`=FOR UPDATE;
...
UPDATE `table` SET `field`=WHERE `field`=;
COMMIT;
最后,需要注意的是在进行并发操作时,数据库的表需要正确的索引和设计,以避免在高并发情况下引起死锁和其它问题。