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

    如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题则插入。
    例如,如果列 a 为主键或拥有UNIQUE索引,值为1,以下语句具有相同效果:

    INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
    UPDATE TABLE SET c=c+1 WHERE a=1;

    如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。

    其他用法:
    如果INSERT多行记录(假设 a 为主键或 a 是UNIQUE索引):

    INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;

    执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1)。

    INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);

    执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7)。
    注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
    该语法适合用在需要判断记录是否存在,若不存在则插入,存在则更新的场景。

    实例:

    '''第一次执行
    mysql> INSERT INTO Tbl_AdUser (FUId,FAdPrdId,FStatus,FUName,FTargetType,FCreatedTime,FIndustry,FComeFrom) VALUES(115399076,1,1,'企业',25,1351650732,2,1) ON DUPLICATE KEY UPDATE FAdPrdId=1,FStatus=1,FUName='企业',FTargetType=25,FCreatedTime=1351650732,FIndustry=2,FComeFrom=1;
    Query OK, 1 row affected, 2 warnings (0.00 sec)
    '''第二次执行
    mysql> INSERT INTO Tbl_AdUser (FUId,FAdPrdId,FStatus,FUName,FTargetType,FCreatedTime,FIndustry,FComeFrom) VALUES(115399076,1,1,'企业',25,1351650732,2,1) ON DUPLICATE KEY UPDATE FAdPrdId=1,FStatus=1,FUName='企业',FTargetType=25,FCreatedTime=1351650732,FIndustry=2,FComeFrom=1;
    Query OK, 2 rows affected, 2 warnings (0.00 sec)

    http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert

  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/brookin/p/2969844.html
Copyright © 2011-2022 走看看