zoukankan      html  css  js  c++  java
  • mysql修改数据 -- 主键冲突

    mysql 插入数据唯一键冲突
    前提: 修改数据三种可用的方法解决主键冲突的问题
    1. insert into ... on duplicate key update set ...
    2. update ... set = case key when ... then ... when ... then ... else end where ...;
    3. replace into ... (与1相似,但若主键冲突会先删除原数据,后再插入新数据 ,所以运用时最好带上主键)
    例:
    table : dev_wlcolor ;
    field : primary key(wlcolorid) , union index(wlid , yscode , yscode);
    有两条数据:
    wlcolorid :108 wlid:367 yscode:A type:2
    wlcolorid :114 wlid:367 yscode:B type:2
    现在需要批量修改为:
    wlcolorid :108 wlid:367 yscode:B type:2
    wlcolorid :114 wlid:367 yscode:A type:2

    测试过程:
    1. sql :insert into dev_wlcolor(`wlcolorid` ,`wlid`,`yscode` `type`) values (114 ,'367' , 'B' , 2) , (108 ,'367', 'A' 2) on duplicate key update `yscode` = values(`yscode`);
    测试结果 :因为虽然是批量插入数据,但mysql 数据库 每插入一条数据都会检测数据是否冲突 , 当插入数据 wlcolorid 为 108 时发现数据库中存在该唯一键 ,后mysql 尝试把yscode字段的A改为B ,但发现如果更新yscode字段发现
    wlcolorid 为114 这条数据也存在一个唯一键 wlid-yscode-type(367-B-2),所以产生唯一键冲突 ,修改数据失败;
    2. sql :update dev_wlcolor set yscode = case wlcolorid when 108 then 'B' when 114 then 'A' else yscode end where wlcolorid in(108 , 114);
    测试结果 :同上;
    3. sql : replace into dev_wlcolor(`wlcolorid` ,`wlid`,`yscode`, `type`) values (114 ,'367' , 'B' , 2) , (108 ,'367', 'A' 2);
    测试结果 : 因为每次有唯一键冲突 , mysql 都会先把数据删除 , 再插入一条新的数据 , 所以修改数据成功


    tip: 使用 insert ignore table(...) values(...) 插入数据时可跳过主键(或唯一键)冲突的数据 而继续插入剩下的数据;

  • 相关阅读:
    数论&数学中结论证明
    「Uva11401」数三角形
    「CJOJ2725」Wave
    「CJOJ2724」Number
    「CJOJ2723」Reserve
    「CJOJ2722」Ping
    「CJOJ2573」Snake vs Block
    「CJOJ2574」Lucky Transformati
    「CJOJ2721」取石块儿
    「CJOJ2366」机器人采集金属
  • 原文地址:https://www.cnblogs.com/Acsii/p/10895755.html
Copyright © 2011-2022 走看看