INSERT以COUNT为条件

时间:2010-12-28 02:36:38

标签: sql mysql insert count conditional

如果表中已经满足某些条件的行数少于20,那么如何构造一个执行的MySQL INSERT查询,否则会失败?

也就是说,如果表有18行满足条件,那么INSERT应该继续。如果表有23行满足条件,那么INSERT应该失败。

对于原子性,我需要在一个查询中表达这一点,因此两个请求不能同时进行INSERT,每个请求都在“信念”中只有19行满足条件。

谢谢。

4 个答案:

答案 0 :(得分:7)

怎么样:

INSERT INTO TargetTable(Column1, Column2, ...)
    SELECT 'Value For Column 1', 'Value For Column 2', ...
      FROM Dual
     WHERE (SELECT COUNT(*) FROM TargetTable WHERE ...Some Condition...) < 20;

如果不满足WHERE子句,则不插入行;如果满足where子句,则插入一行。

您可以调整相同的机制以从另一个表中进行选择(而不是来自DUAL的单行值)。

答案 1 :(得分:1)

我唯一能得到的就是锁定表格,计算记录,执行操作,解锁表格。

LOCK TABLES t WRITE;

perform count

decide - to insert or not in your programming language

UNLOCK TABLES;

答案 2 :(得分:0)

declare @varaibleOne int;

WAITFOR DELAY '00:00:02';
select
@varaibleOne=SUM(case when (condition satisfied) then 1 else 0 end)
from table where (if you have anything)

IF(@varaibleOne<=20)
begin
insert into table ()
end

等待陈述不确定..你可以谷歌吧..

答案 3 :(得分:0)

我知道获取查询以实际抛出错误的唯一方法是使用SIGNAL command - 只能在存储过程内部的MySQL 5.5中访问。

创建存储过程以体现此任务是否可以接受?如果是这样,就可以做你想做的事。

否则,您唯一的选择是运行两个查询 - 一个用于检查行数,另一个用于插入新行,如果有足够的行来满足您的条件。

这也可以在存储过程(或函数)中完成,这样您就可以使用代码中的一个查询来调用它。

相关问题