只有当表为空时才执行mysql插入
在这个问题之后,我一直试图模仿正确的答案,只在数据表为空时插入数据。只有当表为空时才执行mysql插入
Execute INSERT if table is empty?
这是我的代码:
INSERT INTO `statuses` SELECT
('Something', 'Something else', 123),
('Something', 'Something else', 234)
WHERE NOT EXISTS (SELECT * FROM `statuses`);
而不是添加元素如果表是空的,但是,我只是得到:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM `statuses`)'
究竟如何,我应该编写查询,以便仅当表格为空时插入值?
你有一个语法错误在你的语句:
INSERT INTO `statuses`
(SELECT 'Something', 'Something else', 123
WHERE NOT EXISTS (SELECT * FROM `statuses`)
) union all
(SELECT 'Something', 'Something else', 234
WHERE NOT EXISTS (SELECT * FROM `statuses`)
);
你需要重复两次where
在这种情况下,一次为每个子查询。您也可以这样做:
INSERT INTO `statuses`
select t.*
from ((SELECT 'Something' as col1, 'Something else' as col2, 123 as col3
) union all
(SELECT 'Something', 'Something else', 234
)
) t
WHERE NOT EXISTS (SELECT * FROM `statuses`);
在此版本中,您需要为列指定名称。
或者,您可以使用两个单独的插入语句。
第一个给我这个错误:“你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,在正确的语法附近使用WHERE NOT EXISTS(SELECT * FROM'statuses')union所有SELECT'Something',''第3行' – Saturnix 2013-03-25 01:13:46
@Saturnix ...我唯一能想到的就是解析问题。我添加了括号来防止这种情况发生。在实践中,我通常将'union'语句放在'from'子句中,就像在第二个查询中一样。 – 2013-03-25 01:26:04
第一个仍然不起作用(与以前相同的错误),但第二个正常工作,谢谢! – Saturnix 2013-03-25 01:32:18
正确的语法是:
INSERT INTO user_authentication
SELECT t.*
FROM ((SELECT 1 as col1, 'kingston' as col2, 'test' as col3, true as col4)) t
WHERE NOT EXISTS (SELECT * FROM user_authentication);
这是为我工作。
这也适用于我。用它与sqlite。 – tbutcaru 2016-02-20 02:07:21
首先它应该是VALUES而不是第一个SELECT。 – Sebastian 2013-03-25 00:51:48
链接问题中的最佳答案不同。我试图复制发布的代码:它告诉不要使用VALUES。 – Saturnix 2013-03-25 00:52:52