如果表为空,则执行INSERT?

时间:2011-03-15 03:20:33

标签: mysql sql

有没有办法在计数条件下进行插入,例如:

INSERT INTO my_table (colname) VALUES('foo') IF COUNT(my_table) < 1

基本上我想在表当前为空时插入一条默认记录。我正在使用mysql。

3 个答案:

答案 0 :(得分:22)

使用SELECT而不是VALUES能够使用WHERE子句扩展查询。

EXISTS是一个更好的&amp;比COUNT更快的测试

INSERT INTO my_table (colname)
SELECT 'foo'
WHERE NOT EXISTS (SELECT * FROM my_table)

答案 1 :(得分:2)

一种方法是在列上放置一个唯一键。然后执行REPLACE

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
  

REPLACE与INSERT完全一样,   除非表中有一个旧行   与a的新行具有相同的值   PRIMARY KEY或UNIQUE索引,旧的   在新行之前删除行   插入

答案 2 :(得分:0)

这更容易理解:

INSERT INTO my_table (colname) 
SELECT 'foo' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM my_table);

VALUES减少了SELECT FROM DUAL,这将提供值。 FROM DUAL并不总是必需的,但是将它包含在需要它的奇怪配置中并没有什么坏处(比如我正在使用的Percona的安装)。

NOT EXISTS比执行计数更快,计数在具有大量行的表上可能很慢。