我可以使用SET选项对INSERT查询使用ON DUPLICATE KEY UPDATE吗?



我看到了以下内容(使用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函数只有在存在唯一键冲突时才会启动。

下面是常用的格式:

 $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)表示"更新列n1的值,如果查询没有遇到重复键冲突,将被插入。"换句话说,它的意思是将column1更新为插入操作生效时的值。

看看这段代码,你更新了你试图插入的所有三个列似乎是不正确的。哪一列有唯一的约束?

EDIT:基于'SET'格式修改mysql insert语句

基本上要使用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);

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

你试过用REPLACE INTO代替吗?

http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-key-update-and-replace-into/

最新更新