仅当表为空时执行mysql insert
在这个问题之后,我一直在尝试模拟正确的答案,仅当数据为空时才在表中插入数据 这是我的代码:仅当表为空时执行mysql insert,mysql,Mysql,在这个问题之后,我一直在尝试模拟正确的答案,仅当数据为空时才在表中插入数据 这是我的代码: INSERT INTO `statuses` SELECT ('Something', 'Something else', 123), ('Something', 'Something else', 234) WHERE NOT EXISTS (SELECT * FROM `statuses`); 但是如果表为空,我没有添加元素,而是得到: #1064 - You have
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`);
在此版本中,需要为列指定名称
或者,您可以只使用两个单独的insert语句。正确的语法是:
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);
这对我很有用。首先,它应该是值,而不是第一个选择。链接问题中的顶部答案表示不同。我试图复制发布的代码:它告诉我不要使用值。第一个错误告诉我:“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“WHERE not EXISTS(SELECT*FROM
statuses
)附近使用的正确语法。union all选择'Something','在第3行”@土星。。。我唯一能想到的就是解析问题。我添加了括号以防止出现这种情况。在实践中,我通常将union
语句放在from
子句中,就像在第二个查询中一样。第一个仍然不起作用(与以前的错误相同),但第二个很好,谢谢!