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

我见过以下内容(使用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-3 ='value-3'
    ON DUPLICATE KEY UPDATE SET
    column1 = value1,$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-3')
 ON DUPLICATE KEY UPDATE
 column1 = values(column1),column2 = values(column2),column3 = values(column3);"

column1 = values(column1)表示“如果查询未达到重复键冲突,则更新column1,其中包含已插入的值.”换句话说,它只是意味着将column1更新为插入工作所需的内容.

查看此代码,您正在更新要插入的所有三个列似乎不正确.哪个列有独特的约束条件?

编辑:根据OP的问题,根据’SET’格式修改MysqL插入语句.

基本上使用ON DUPLICATE KEY UPDATE,您只需像往常一样编写insert语句,但添加ON DUPLICATE KEY UPDATE子句.我相信它应该像这样工作:

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

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

相关文章

优化MySQL数据库发布系统存储的方法有:1.mysql库主从读写分...
使用mysql的方法:在“我的电脑”→右键→“管理”→“服务”...
在mysql中查看root用户权限的方法:1.命令行启动mysql服务;...
MySQL主从复制是用来备份一个与主数据库一样环境的从数据库,...
运行mysql的方法1.启动mysql服务,在“我的电脑”→右键→“...
开启mysql的方法1.可以通过快捷键win+r,输入cmd,打开窗口,...