MySQL 条件插入

2021-11-20 00:00:00 conditional insert mysql

我很难形成条件插入

我有 x_table 列(实例、用户、项目),其中实例 ID 是唯一的.只有当用户已经没有给定的项目时,我才想插入一个新行.

I have x_table with columns (instance, user, item) where instance ID is unique. I want to insert a new row only if the user already does not have a given item.

例如尝试插入 instance=919191 user=123 item=456

For example trying to insert instance=919191 user=123 item=456

Insert into x_table (instance, user, item) values (919191, 123, 456) 
    ONLY IF there are no rows where user=123 and item=456 

在正确方向上的任何帮助或指导将不胜感激.

Any help or guidance in the right direction would be much appreciated.

推荐答案

如果您的 DBMS 没有对您在执行插入时选择的表施加限制,请尝试:

If your DBMS does not impose limitations on which table you select from when you execute an insert, try:

INSERT INTO x_table(instance, user, item) 
    SELECT 919191, 123, 456
        FROM dual
        WHERE NOT EXISTS (SELECT * FROM x_table
                             WHERE user = 123 
                               AND item = 456)

在这里,dual 是一个只有一行的表(最初在 Oracle 中发现,现在也在 mysql 中).逻辑是 SELECT 语句生成具有所需值的单行数据,但仅在尚未找到值时才生成.

In this, dual is a table with one row only (found originally in Oracle, now in mysql too). The logic is that the SELECT statement generates a single row of data with the required values, but only when the values are not already found.

或者,查看 MERGE 语句.

Alternatively, look at the MERGE statement.

相关文章