如何在MySQL的SQL语句中避免数据唯一性冲突
来源:互联网 发布:黄金时时彩软件 编辑:程序博客网 时间:2024/05/17 20:33
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)重新设计应用逻辑,尽量避免一次更改多行的情况出现
0 0
- 如何在MySQL的SQL语句中避免数据唯一性冲突
- 如何避免c++中using语句造成的名称冲突
- 在OA 中应避免使用的PL/SQL语句
- stringbuffer拼出SQL语句,避免加号带来的引号冲突
- 如何在开发中避免SQL注入
- mysql删除表中造成唯一键冲突的记录
- 在Oracle使用sql语句中如何插入日期格式的数据
- 在Oracle使用sql语句中如何插入日期格式的数据
- 如何保证Excel中数据的唯一性
- 尽量避免在SQL语句中使用OR
- 尽量避免在SQL语句中使用LIKE
- Oracle 尽量避免在SQL语句中使用 OR
- Oracle 尽量避免在 SQL语句中使用 LIKE
- 尽量避免在SQL语句的WHERE子句中使用函数
- Oracle 尽量避免在 SQL语句的WHERE子句中使用函数
- mysql中删除完全重复数据的准确SQL语句
- mysql 快速清除指定表中数据的sql语句
- 在Java中如何避免“!=null”式的判空语句?
- ios日期格式转换
- dede织梦缩略图,JS方法,图片自动比例
- 【转载】MySQL 加锁处理分析
- IOS开发之实现App消息推送(最新)
- AES256JNCryptor加密后的密文长度
- 如何在MySQL的SQL语句中避免数据唯一性冲突
- mysql中update一张表多列时的次序问题
- java 参数传递 session等作用域中值得改变
- mysql中的utf8字符集与标准UTF-8的区别
- SSL TLS 学习之二:SSL与TLS的区别和介绍
- 如何使用SQL向mysql中插入一个特定UNICODE码值的字符
- ubuntu 启动android模拟器
- Unicode基础知识
- XDocument操作xml文件基本操作