清远信息港
教育
当前位置:首页 > 教育

该表中只有6条记录如下

发布时间:2019-07-15 22:03:01 编辑:笔名

14:25 来源:IT专家 :谷汶锴【纠错】人评论

A-A+ 怎么开淘宝店 站优化方法 创业如何获得投资 小米note顶配版评测 LOL活动

假设有一个表,结构如下:   mysqlCREATETABLE`a`(   `id`int(10)unsignedNOTNULLAUTO_INCREMENT   `id2`int(10)unsignedNOTNULLDEFAULT'0'   PRIMARYKEY(`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,执行以下语句,得到报错:

mysqlupdateasetid=id-1;   ERROR1062(23000):Duplicateentry'4'forkey'PRIMARY'

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

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

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

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

mysqlupdateasetid=id-1orderbyid;   QueryOK6rowsaffected(0.00sec)   Rowsmatched:6Changed:6Warnings:0

接下来,我们看看把它转成 innodb 表,结果会是怎样的。

mysql alter table a engine = innodb;Query OK 6 rows affected (0.01 sec)Records: 6 Duplicates: 0 Warnings: 0

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

看到变化了吧,行数据按照 id 的顺序来显示了。

1 2 下一页 查看全文

成都治疗癫痫病专科医院
济南治癫痫专科医院哪好
石家庄治疗牛皮癣医院
西宁医院治癫痫
友情链接