Mysql插入操作导致表被锁定

时间:2016-10-28 02:54:59

标签: mysql

这是我的create table查询字符串和表desc:

CREATE TABLE `ts_template_size` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `template_id` int(11) NOT NULL,
  `type` smallint(6) NOT NULL DEFAULT '2',
  `width` varchar(100) NOT NULL DEFAULT '' ,
  `height` varchar(100) NOT NULL DEFAULT '' ,
  PRIMARY KEY (`id`),
  KEY `idx_template_id` (`template_id`)
) ENGINE=InnoDB AUTO_INCREMENT=134428 DEFAULT CHARSET=utf8

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| template_id | int(11)      | NO   | MUL | NULL    |                |
| type        | smallint(6)  | NO   |     | 2       |                |
| width       | varchar(100) | NO   |     |         |                |
| height      | varchar(100) | NO   |     |         |                |
+-------------+--------------+------+-----+---------+----------------+

这是插入查询:

INSERT INTO nova_ts_liguangyi.ts_template_size  
    (id, template_id, type, width, height)  
VALUES 
    (NULL, 20002, 2, '960', '90'),
    (NULL, 20002, 2, '960', '60'),
    (NULL, 20000, 2, '960', '90'),
    (NULL, 20000, 2, '960', '60')

如果我单独执行插入,则可能成功。

但是,插入操作是在事务处理下执行的,在插入操作之前,对表有一个删除操作。

这是我得到的错误:

{ [Error: ER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction]
  code: 'ER_LOCK_WAIT_TIMEOUT',
  errno: 1205,
  sqlState: 'HY000',
  index: 0 }

桌子似乎已被锁定?然后我检查HeidiSQL客户端中的INNODB_LOCKINNODN_TRX表,这是我得到的结果:

enter image description here enter image description here

似乎插入操作案例是锁?我该如何解决这个问题?

BTW,我通过节点js模块mysqljs操作mysql,所以我不能用一些参数执行查询,比如--lock-table=false

0 个答案:

没有答案