有没有办法在计数条件下进行插入,例如:
INSERT INTO my_table (colname) VALUES('foo') IF COUNT(my_table) < 1
基本上我想在表当前为空时插入一条默认记录。我正在使用mysql。
答案 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
比执行计数更快,计数在具有大量行的表上可能很慢。