我有以下sql查询/语句:
INSERT INTO `tags` (`tag`) SELECT 'water' FROM tags WHERE NOT EXISTS (SELECT id FROM `tags` WHERE `tag`='water') LIMIT 1
表结构只有2列 (id, tag)
.
sql语句的功能是接收一个标记,在上面的例子中,它接收一个标记 water
,它检查标记是否已经存在。如果标记已存在,则应返回0个结果。如果它不存在,它应该创建一个带有标记的新行。
目前,它只在我的本地mamp服务器上工作,该服务器运行mysql版本5.6.35)。我在另外两个mysql版本上进行了测试,5.6.39-log和5.7.22。。。但似乎都没用。
显示的唯一错误是在运行查询之前:
但是,运行它不会给出一个错误,而是一个绿色的框 0 rows inserted. (Query took 0.0014 seconds.)
语法改变了吗?如果是的话,有人能告诉我一些文件吗?我一整天都在查文件。
1条答案
按热度按时间ercv8c1e1#
只要表上至少有其他行,插入似乎就可以工作。如果表为空,则不执行插入。
它返回2行(x和water),但是,如果删除insert x,则不会插入任何内容,因此不会返回任何内容。
看这里。您可以尝试使用不同版本的mysql。在所有版本中似乎都是一样的
我认为一个更简单的选择是使用
INSERT IGNORE
声明。https://www.db-fiddle.com/f/adzpjz3k1l15bc69budkez/0
如果使用ignore修饰符,则会忽略执行insert语句时发生的错误。例如,在不忽略的情况下,复制表中现有唯一索引或主键值的行将导致重复键错误,并且语句将中止。使用ignore时,将丢弃该行,并且不会发生错误。忽略的错误将生成警告。
https://dev.mysql.com/doc/refman/8.0/en/insert.html