mysql表锁定

通过下面的查询, 来查询当前数据库, 有哪些事务,都锁定哪些资源。
 
     trx_id  AS   `事务id`,
     trx_state  AS  `事务状态`,
     trx_requested_lock_id   AS   `事务需要等待的资源`,
     trx_wait_started     AS   `事务开始等待时间`,
     trx_tables_in_use  AS  `事务使用表`,
     trx_tables_locked  AS  `事务拥有锁`,
     trx_rows_locked   AS  `事务锁定行`,
     trx_rows_modified   AS  `事务更改行`,
   trx_mysql_thread_id AS '事物的线程ID'
     information_schema.innodb_trx ;

查看事件比较久的事物。如何当前时间select sysdate();AM 10:07而事物开始的时间是:AM 9:50,显示是不正常的。根据这个事物的线程ID(trx_mysql_thread_id)。
执行命令:
kill 线程ID  
数据库修复正常。

1
2
3
4
5
6
7
8
9
10
11
12
13
查看正在锁的事务
     lock_id          AS   `锁id`,
     lock_trx_id     AS   `拥有锁的事务id`,
     lock_mode       AS   `锁模式    `,
     lock_type       AS   `锁类型`,
     lock_table          AS   `被锁的表`,
     lock_index          AS   `被锁的索引`,
     lock_space          AS   `被锁的表空间号`,
     lock_page       AS   `被锁的页号`,
     lock_rec        AS   `被锁的记录号`,
     lock_data       AS   `被锁的数据`
     information_schema.innodb_locks;
1
2
3
4
5
6
7
查看等待锁的事务
   requesting_trx_id    AS   `请求锁的事务id`,
   requested_lock_id    AS   `请求锁的锁id`,
   blocking_trx_id      AS   `当前拥有锁的事务id`,
   blocking_lock_id     AS   `当前拥有锁的锁id`
   innodb_lock_waits;
追问:
没有很明白,能不能举例说下?谢谢
追答:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
会话1:
 
mysql>  select  from  test_main;
+ ----+---------+
| id | value   |
+ ----+---------+
|  1 | ONE     |
|  2 | TWO     |
|  3 | THREE-3 |
|  4 | FOUR-4  |
|  6 | SIX     |
+ ----+---------+
rows  in  set  (0.00 sec)
 
 
 
mysql> START  TRANSACTION ;
Query OK, 0  rows  affected (0.00 sec)
 
mysql>  UPDATE  test_main  SET  value =  'FOUR-4'  WHERE  id = 4;
Query OK, 0  rows  affected (0.00 sec)
Rows  matched: 1  Changed: 0  Warnings: 0
 
 
会话2:
 
mysql>  START  TRANSACTION ;
Query OK, 0  rows  affected (0.00 sec)
 
 
mysql>  UPDATE  test_main  SET  value = 'THREE-3'  WHERE  id = 3;
Query OK, 0  rows  affected (0.00 sec)
Rows  matched: 1  Changed: 0  Warnings: 0
 
 
会话1:
UPDATE  test_main  SET  value = 'THREE-5'  WHERE  id = 3;
 
因为会话2 已经锁定了 id=3 的这行数据,
因此, 当前会话暂时不能更新被锁定行, 进入锁定等待状态......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值