如何在MySQL的SQL语句中避免数据唯一性冲突
2015-03-20 15:13
316 查看
MySQL在修改完每一行数据后都验证数据约束,而不是像SQL标准里执行完整条语句才验证。这样做带来的一个问题就是,如果一条SQL语句会改动多行数据,即使改动过程中违反了数据约束但改动后并不违反数据约束,也会被MySQ判为违反数据约束从而执行失败。举例来说:
create table t (i int not null primary key); insert into t(i) values (1), (2), (3), (4); update t set i = i + 1; -- ERROR 1062 (23000): Duplicate entry '2' for key 1这个问题我没有找到完美的解决方法。但有几个在特定情况下有效的解法:1)暂时删除相关约束,改动完数据后再加回去2)在update语句中使用order by子句控制行改动次序,保证在任一行改动后都不违法约束。这个方法局限性比较大,有时我们是想交换两个不相邻行的值3)使用一个临时值做中转(如一个没有被其它任何行使用的值,有些情况下NULL是一个不错的选择)。类似于程序设计中典型的交换两个变量值的方法4)重新设计应用逻辑,尽量避免一次更改多行的情况出现
相关文章推荐
- 【SQL】如何一次(一条SQL语句)向ORACLE中插入多组/多条数据,不同于mysql
- mysql进阶(十九)SQL语句如何精准查找某一时间段的数据
- mysql进阶(十九)SQL语句如何精准查找某一时间段的数据
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- Mysql如何批量删除具有相同表前缀的数据表(纯SQL语句)
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- mysql进阶(十九)SQL语句如何精准查找某一时间段的数据
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- mysql如何处理亿级数据,第一个阶段——优化SQL语句
- 如何用SQL语句查询Excel数据?
- 如何用SQL语句把同一列的数据按某个group by语句组合成一行数据
- zencart如何清空商品演示数据和没有商品数据的sql执行语句
- MySQL复制表结构和数据SQL语句
- 用SQL语句解决mysql导入大数据文件的问题
- MySQL - SQL语句语法(数据定义语句)
- 在SqlServer中如何使用Sql语句将一张表的数据复制到另一张表
- MySQL - MySQL 5.1参考手册 - 第13章:SQL语句语法 - 13.1. 数据定义语句 - CREATE TABLE
- 在SQL Server中sqlserver,access,excel之间数据如何使用sql语句直接操作
- 用SQL语句解决mysql导入大数据文件的问题