sql - 以 COUNT 为条件的 INSERT

标签 sql mysql insert count conditional

如何构造一个 MySQL INSERT 查询,在表中已有的满足某些条件的行数小于 20 时执行,否则失败?

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

为了原子性,我需要在单个查询中表达这一点,所以两个请求不能同时插入,每个请求都在“相信”只有 19 行满足条件。

谢谢。

最佳答案

关于:

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 中选择一行值)。

关于sql - 以 COUNT 为条件的 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4543277/

相关文章:

mysql - sql查询数据格式

mysql - MySQL存储过程语法错误

java - Android 批量插入或忽略 JSONArray

安卓:SQLite - insertWithOnConflict

python - 我正在尝试使用插入方法在列表中已经存在的每个元素之后将相同的元素添加到我的列表中

c# - SQL Server 查询 : Get a List of Columns Which Don't Exist in Another Table's Field

mysql - WHERE 子句需要一个附加子句 - 我认为

mysql - 在 MySQL 中查找并替换字符串的一部分

php - 关于MySQL存储查询的问题

php - 我的逻辑正确吗? Ajax 和/或 PHP 与 Mysql