一、加锁
表名:test
1、加读锁
#读锁,锁定之后,无论是当前线程还是其他线程均只能读操作,写操作全部被堵塞,备份时可以用,避免在备份过程中,表被更新 LOCK TABLES test READ;
2、加写锁
#写锁,锁定之后,只有当前线程可以进行读操作和写操作,其他线程读操作和写操作均被堵塞. LOCK TABLES test WRITE;
3、行级锁、排它锁
表需要是InnoDB引擎,还需要配合事务;
BEGIN; SELECT * FROM test WHERE sn = 'F20LIKE22082316' FOR SELECT; COMMIT; #事务提交[或者 ROLLBACK 事务回滚]
在启动事务然后锁定某一行后,在事务提交之前或者事务回滚之前该行会一直处于锁定状态,此时只允许当前线程进行读写操作,其他线程只能进行读操作,其他写操作全部被堵塞。
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型不支持;
二、解锁
1、查看正在被锁的表
show OPEN TABLES where In_use > 0;
解锁表:
#解锁 (不用写表名,只能自己解锁,即同一连接,别人无效,不同连接无效。) UNLOCK TABLES;
2、查锁表进程
#查锁表进程 show full processlist; #或 SELECT * FROM information_schema.PROCESSLIST; #杀掉锁表进程id=33(任何人都行)(连接断开,即进程结束,即锁也没了。) kill 33;
3、事务锁
1:查看当前的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 杀死进程id,就是上面命令的trx_mysql_thread_id列 kill 线程ID; 2:查看当前锁定的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 3:查看当前等锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
标签:TABLES,事务,加锁,解锁,线程,mysql,INNODB,SELECT From: https://www.cnblogs.com/weiyiming007/p/17332643.html