MySql-什么时候应该使用锁

MySql-什么时候应该使用锁,mysql,locking,Mysql,Locking,我有一个用户表,其中包含礼品数量和用户id字段 我是否应该在下一个语句中添加锁(它可能来自多个线程) 最好使用表锁,而不是显式表锁 示例会话如下所示: START TRANSACTION; UPDATE `users` SET `gifts_count` = `gifts_count` + 1 WHERE `users`.`user_id` = user_id; COMMIT; 如果需要(取决于您正在做什么),您还可以在查询和提交之间执行一些完整性检查,如果出现问题,您可以始终使用回滚 如果

我有一个用户表,其中包含
礼品数量
用户id
字段

我是否应该在下一个语句中添加锁(它可能来自多个线程)


最好使用表锁,而不是显式表锁

示例会话如下所示:

START TRANSACTION;
UPDATE `users` SET `gifts_count` = `gifts_count` + 1 WHERE `users`.`user_id` = user_id;
COMMIT;
如果需要(取决于您正在做什么),您还可以在查询和提交之间执行一些完整性检查,如果出现问题,您可以始终使用回滚


如果要在更新特定行时防止读取该行(如果使用带行级锁定的
InnoDB
),则可以在最后使用共享模式下的
LOCK
运行
SELECT
查询,如下所示:

SELECT * FROM `users` `users`.`user_id` = user_id LOCK IN SHARE MODE;

该查询将一直挂起,直到您的事务
COMMIT
ed或
ROLLBACK
'd。

当我使用事务时,我的礼物计数是否可以读取?@Babibu它们是。我想如果您不希望这成为可能,您应该使用锁定(即行级读取锁定);)编辑:事实上,我甚至不确定了,已经有一段时间没用了,让我检查一下。
SELECT * FROM `users` `users`.`user_id` = user_id LOCK IN SHARE MODE;