zoukankan      html  css  js  c++  java
  • mysql "ON DUPLICATE KEY UPDATE" 语法

    是实际的开发过程中,可能会遇到这样的需求,先判断某一记录是否存在,如果不存在,添加记录,如果存在,则修改数据。在INSERT语句末尾指定ON DUPLICATE KEY UPDATE可以解决这类问题。

    其用法如下:如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE操作,如果不会导致唯一值重复的问题,则执行INSERT操作。

    例如:如果字段id为主键或拥有UNIQUE索引,并且包含值1,则以下两条语句具有相同的效果:

    INSERT INTO user (id, username, age) VALUES (1, 'jason', 88) ON DUPLICATE KEY UPDATE age = 88;
    UPDATE user SET age = 88 WHERE id = 1;
    如果语句被正确执行,会返回一个影响的行数。如果行作为新记录被插入,则受影响的行值为1,如果原有的记录被更新,则受影响的行值为2.

    如果INSERT多行记录。

    INSERT INTO user (id, username, age)
    VALUE
    (3, 'Alex', 18),
    (3, 'Alex', 20) ON DUPLICATE KEY UPDATE age = age + 1;
    字段age的值将会更改为19,因为第二条记录与第一条重复,所以age的值被更改为19;

    INSERT INTO user (id, username, age)
    VALUE
    (4, 'wang', 22),
    (4, 'wang', 25) ON DUPLICATE KEY UPDATE age = VALUES(age);
    字段age的值将会更改为25,因为第二条记录的与第一条重复,所以age的直接取重复的值。

    注意以上两条sql语句之间的区别,第一条sql语句,当出现主键或索引重复时,修改第一条记录的值,不会涉及到第二条记录的值。第二条sql语句,当出现主键或索引重复时,取第二条记录的值。

  • 相关阅读:
    浅谈GET和POST请求方式
    浅淡建立bitmap实例
    从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误
    为RichTextBox添加快捷功能菜单(复制,粘贴,全选等)
    针对解决sql server数据库中不区分大小写问题.
    <转>用C#创建可拖动窗体
    如何:对 Windows 窗体控件进行线程安全调用
    正则
    <转>反射的第二部分:Emit
    『励志』一些普通又具有深刻哲理的警句(转载)
  • 原文地址:https://www.cnblogs.com/liujie-php/p/14048121.html
Copyright © 2011-2022 走看看