首页 > 数据库 > MySQL > 正文

MySQL设置锁、事务隔离级别的常用命令

2024-07-24 12:59:56
字体:
来源:转载
供稿:网友

1、查看表锁, Table_locks_waited较高表明锁争用比较严重

show status like 'table%'

2、查看行锁,Innodb_row_lock_waits和InnoDB_row_lock_time_avg较高表明锁争用比较严重

show status like 'innodb_row_lock%'

3、加写表锁(需手动unclock tables,用commit不会自动解锁)

lock table user write;4、加读表锁(需手动unclock tables,用commit不会自动解锁)

lock table user read;5、加读表锁(需手动unclock tables,用commit不会自动解锁),并支持另一个事务的insert操作

lock table user read local;6、加共享行锁(提交事务,自动解锁)

select * from user where id=2 lock in share mode; 7、加排他行锁(提交事务,自动解锁)

delete from user where id=2 for update;

8、其他说明

INSERT...SELECT...和 CREATE TABLE...SELECT...语句,会锁原表

set global concurrent_insert=2; -- 设置是否开启并发insert,0=不开启,1=没有空洞的情况下,允许insert,2=不管有没有空洞,都允许插入select @@LOW_PRIORITY_UPDATES; -- 默认情况下,写锁比读锁优先级高,所以写锁会先得到锁,用这个命令可以降低写锁的级别select @@max_write_lock_count; -- 当写锁达到指定数量,会降低写锁优先级事务

1、开启事务

set autocommit=0;2、提交事务(不会自动释放表锁)

commit;3、回滚事务

rollback;4、设置事务的隔离级别会“可重复读”

SET session TRANSACTION ISOLATION LEVEL REPEATABLE READ;5、设置事务的隔离级别为“序列化”

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表