php - 我可以使用 SET 选项将 ON DUPLICATE KEY UPDATE 与 INSERT 查询一起使用吗?

标签 php mysql key duplicates

我看到了以下内容(使用 VALUES 选项):

$query = "INSERT INTO $table (column-1, column-2, column-3) VALUES ('value-1', 'value-2', 'value-3') ON DUPLICATE KEY UPDATE SET column1 = value1, column2 = value2, column3 = value3, ID=LAST_INSERT_ID(ID)"; 

...但我不知道如何在我正在使用的内容中添加 ON DUPLICATE KEY UPDATE:

$query = "INSERT INTO $table SET
    column-1 ='value-1',
    column-2 ='value-2',
    column-3 ='value-3'
";

例如:,伪代码

$query = "INSERT INTO $table SET
    column-1 ='value-1',
    column-2 ='value-2',
    column-3 ='value-3'
    ON DUPLICATE KEY UPDATE SET
    column1 = value1,
    column2 = value2,
    column3 = value3,
    $id=LAST_INSERT_ID(id)"; 
    $my_id = mysql_insert_id();
";

我会发现后者更容易阅读。希望得到澄清,在手册中找不到示例。

干杯

最佳答案

我经常使用ON DUPLICATE KEY UPDATE。在某些情况下,它是真正值得使用的非标准 SQL 扩展。

首先,您需要确保具有唯一的键约束。 ON DUPLICATE KEY UPDATE 函数仅在出现唯一 key 违规时才会启动。

这是一种常用的格式:

 $query = "INSERT INTO $table (column1, column2, column3)
 VALUES ('value-1', 'value-2', 'value-3')
 ON DUPLICATE KEY UPDATE
 column1 = values(column1),
 column2 = values(column2),
 column3 = values(column3);"

column1 = values(column1) 表示“如果查询没有遇到重复键冲突,则使用本应插入的值更新 column1”。换句话说,它只是意味着将 column1 更新为插入工作时的状态。

看看这段代码,您正在更新您尝试插入的所有三列似乎不正确。哪一列对其有唯一约束?

编辑:根据 OP 中的问题,根据 mysql 插入语句的“SET”格式进行修改。

基本上,要使用ON DUPLICATE KEY UPDATE,您只需照常编写插入语句,但在末尾添加ON DUPLICATE KEY UPDATE 子句。我相信它应该像这样工作:

INSERT INTO $table 
    set column1 = 'value-1',
        column2 = 'value-2',
        column3 = 'value-3'
ON DUPLICATE KEY UPDATE
    column1 = values(column1),
    column2 = values(column2),
    column3 = values(column3);

同样,您要插入的列之一必须具有唯一索引(或列的组合)。这可能是因为其中之一是主键或因为表上有唯一索引。

关于php - 我可以使用 SET 选项将 ON DUPLICATE KEY UPDATE 与 INSERT 查询一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618056/

相关文章:

c# - LINQ 按多个属性分组并创建字典

security - 将私钥存储在数据库中

PHP 到 mySQL - 查找插入 ID 时复制条目

php - PHP 的文件夹大小?

php - 除非我刷新页面,否则数据不会插入数据库?

php - PDO:查询中的 IF 语句?

php - 插件内的 Wordpress 简码

php - 改进工作正则表达式以匹配多行

php - 在短语编号中添加值 +1

python - 使用两种不同的键和值源的字典推导式