【发布时间】:2018-04-02 09:01:32
【问题描述】:
我有一个程序(在本例中为 QT)尝试通过 8 个线程将 4000 条记录同时插入到 source_names 表中:每个线程 500 条记录。
我的表如下:
CREATE TABLE `source_names` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`source_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx` (`source_name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=101952 DEFAULT CHARSET=latin1;
如上面代码中所指定,我的source_name 列是UNIQUE。
所以我有 8 个线程,每个线程同时执行这些代码:
INSERT IGNORE INTO source_names (source_name) VALUES ('a001'),('a002'),...,('a500')
如果有重复的source_name,则会发出警告,不会发生任何事情。
但主要的问题是有时会出现Deadlock 错误,我无法处理:
Deadlock found when trying to get lock; try restarting transaction QMYSQL3: Unable to execute statement
我认为这是因为UNIQUE 列。如果我只使用一个线程没有问题,但是如何使用多个线程来解决呢?
【问题讨论】:
标签: mysql multithreading qt deadlock