我正在尝试做与MySQL: Insert record if not exists in table中描述的相同的事情,但我在命令行上运行它,所以我需要手动锁定表。这就是我所拥有的:
LOCK TABLES `mytable` WRITE;
INSERT INTO `mytable` (`mycolumn`)
SELECT * FROM (SELECT 'test') AS temp
WHERE NOT EXISTS (
SELECT `mycolumn`
FROM `mytable`
WHERE `mycolumn` = 'test'
) LIMIT 1;
UNLOCK TABLES;
但是,当我运行它时,我得到了错误:
ERROR 1100 (HY000) at line 239: Table 'mytable' was not locked with LOCK TABLES
该命令在 MySQL Workbench 中无需锁定/解锁即可正常执行。我的猜测是我需要锁定“临时”表,但我该怎么做呢?
LOCK TABLES `mytable` WRITE, <something> AS temp WRITE;
由于“temp”不是数据库中的实际表,它只是(SELECT 'test')。
我可以补充一点,我不想(只是)创建唯一索引的原因是,这会导致我不知道如何处理的错误,因为命令行进程的退出代码总是只有 1 in如果出现错误,我真的不想为它解析 stderr ......