设为首页
加为收藏
联系我们
  • 电子商务
  • 软件网络
  • 看天下
  • 营销财经
  • 关闭导航
  • 网络编程
  • 数据库类
  • 关闭导航
  • 网络编程
  • 社交礼仪
  • 数据库类
  • 人文地理
  • 关闭导航
  • 编程工具
  • 电子书籍
  • 关闭导航
  • 生活休闲
  • 演讲讲座
  • 视频教程
  • 经典影视
  • 关闭导航
  • 您的位置: 首页 > 入门教程 > 数据库类 > MySQL

    MySQL UPDATE 主键冲突解决立案

    时间: 2008-09-20  信息来源: 中国站长站  作者: 编辑整理  点击数:

    内容提示:MySQL UPDATE 主键冲突是MySQL常见问题,本文将介绍相应解决方案.
    假设有一个表,结构如下:

       mysql> CREATE TABLE `a` (
      `id` 
    int(10) unsigned NOT NULL AUTO_INCREMENT,
      `id2` int(10) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`)
      ) ENGINE=MyISAM;

     该表中只有6条记录,如下:

     mysql> select * from a;
    +----+---------+
    | id | city_id |
    +----+---------+
    |  2 |       2 |
    |  3 |       3 |
    |  5 |       5 |
    |  4 |       4 |
    |  6 |       6 |
    |  7 |       7 |
    +----+---------+

    现在想要把id字段分别-1,执行以下语句,得到报错:

       mysql> update a set id=id-1;
      ERROR 1062 (23000): Duplicate entry '4' for 
    key 'PRIMARY'

     看看更新后的结果,可以看到:

     mysql> select * from a;
    +----+---------+
    | id | city_id |
    +----+---------+
    |  1 |       2 |
    |  2 |       3 |
    |  5 |       5 |
    |  4 |       4 |
    |  6 |       6 |
    |  7 |       7 |
    +----+---------+

     存储在最前面的2条记录更新成功了,后面的则失败,因为第三条记录如果也要更新,则会引发主键冲突。

    这个时候,如果我们在更新时增加 ORDER BY 的话,则可以顺利更新成功。

       mysql> update a set id=id-1 order by id;
      
    Query OK, 6 rows affected (0.00 sec)
      Rows matched: 6 Changed: 6 Warnings: 0


     
    Tags: MySQL,UPDATE,主键冲突 责任编辑:直来直往
     
      关于我们 友情链接 网站地图 广告服务 联系我们 管理登陆  
      鄂ICP备07014143号  
      Powered by EmpireCMS 5.0  
      Template designed by 直来直往.
      联系信息: QQ 365931563 Email:jiangtian001@sina.com  
      ©CopyRight 2007-2008, SKDE.CN, Inc. All Rights Reserved