只有当表为空时才执行mysql插入

只有当表为空时才执行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`)' 

究竟如何,我应该编写查询,以便仅当表格为空时插入值?

+0

首先它应该是VALUES而不是第一个SELECT。 – Sebastian 2013-03-25 00:51:48

+0

链接问题中的最佳答案不同。我试图复制发布的代码:它告诉不要使用VALUES。 – Saturnix 2013-03-25 00:52:52

你有一个语法错误在你的语句:

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`); 

在此版本中,您需要为列指定名称。

或者,您可以使用两个单独的插入语句。

+0

第一个给我这个错误:“你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,在正确的语法附近使用WHERE NOT EXISTS(SELECT * FROM'statuses')union所有SELECT'Something',''第3行' – Saturnix 2013-03-25 01:13:46

+0

@Saturnix ...我唯一能想到的就是解析问题。我添加了括号来防止这种情况发生。在实践中,我通常将'union'语句放在'from'子句中,就像在第二个查询中一样。 – 2013-03-25 01:26:04

+0

第一个仍然不起作用(与以前相同的错误),但第二个正常工作,谢谢! – 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); 

这是为我工作。

+0

这也适用于我。用它与sqlite。 – tbutcaru 2016-02-20 02:07:21