在MySQL中,默认使用的是自动提交事务的方式。如果需要锁定一行或多行数据,可以开启行锁或表锁。
首先是开启行锁,只需要在SQL语句中加上FOR UPDATE即可:
SELECT * FROM 表名 WHERE 列名=值 FOR UPDATE;
这样就会锁定查询出来的行,其他事务就无法对这些行进行修改。如果需要取消锁定,可以用COMMIT或ROLLBACK语句来提交或回滚事务。
接下来是开启表锁,需要修改MySQL的参数来实现:
SET GLOBAL innodb_table_locks=1;
innodb_table_locks参数的默认值为1,表示开启表锁。如果需要关闭表锁,可以将其值设置为0。
同时,如果开启了表锁,在执行查询、插入、更新等操作时,在表级别上会自动加上X锁或S锁,当事务提交或回滚后,锁也会被释放。