MySQL 条件插入

MySQL Conditional Insert(MySQL 条件插入)
本文介绍了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.

这篇关于MySQL 条件插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Simulating MySQL#39;s ORDER BY FIELD() in Postgresql(在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD())
Using MySQL query to traverse rows to make a recursive tree(使用MySQL查询遍历行制作递归树)
MySQL LOAD DATA INFILE with ON DUPLICATE KEY UPDATE(MySQL LOAD DATA INFILE 和 ON DUPLICATE KEY UPDATE)
Search for quot;whole word matchquot; in MySQL(搜索“全字匹配在 MySQL 中)
add column to mysql table if it does not exist(如果不存在,则将列添加到 mysql 表)
MIN/MAX vs ORDER BY and LIMIT(MIN/MAX 与 ORDER BY 和 LIMIT)