我有一个以排序顺序显示的标签表.为了确保没有两行可以具有相同的排名,它们的值是唯一的:

create table label (

id_label serial not null,

rank integer not null,

title text not null,

constraint pri primary key (id_label),

constraint unq unique (rank)

)

无论是PostgreSQL还是MySQL,它们都表现出相同的行为.查询可能看起来像从标签顺序中选择标题.假设表包含:

id_label rank title

1 10 Cow

2 20 Apple

3 45 Horse

4 60 Beer

现在假设我要重新排序两个标签,例如苹果排在牛前.最简单的方法是交换他们的等级值:

update label

set rank = case when rank = 20 then 10 else 20 end

where id_label in (1,2)

不.也不:

update label

set rank = case when rank = 20 then rank - 10 else rank + 10 end

where id_label in (1,2)

甚至没有

update label

set rank = 30 - rank

where id_label in (1,2)

每次,唯一约束在第一行更新时触发,并中止操作.如果我可以推迟支票直到结束声明,我会没事的.这发生在PostgreSQL和MySQL两者之间.

ACID安全的解决方法是:

>开始交易

>选择表中的第一,第二记录和最高(最高)等级的排名(可能需要联合)

>更新第一条记录到rank = max 1

更新第二条记录排名第一

>更新第一个记录排名第二

>提交

这是难以言喻的丑陋.更糟的是删除约束,更新,然后重新创建约束.授予操作角色的权限是要求麻烦.所以我的问题是:有一个我忽略了一个简单的技术来解决这个问题,还是我的SOL?

mysql 多行唯一_mysql – 具有唯一约束的原子多行更新相关推荐

  1. mysql联合唯一_MYSQl 联合唯一约束 根据两个字段 唯一

    CREATE TABLE tb_month_report_chapter_main( `id` INTEGER(11) NOT NULL AUTO_INCREMENT, `record_month` ...

  2. mysql on delete关键字_MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键,外键可以有重复的,可以是空值 主索引(由关键字PRIMARY定义的索引),用于表 ...

  3. mysql cluster 外键_Mysql外键约束

    Mysql集群创建外键,分为四种约束:no action,restrict,cascade,set null.如果表A的主关键字是表B中的字段,则该字段称为B的外键,表A称为主表,表B称为从表.外键是 ...

  4. mysql group by 行数_mysql获取group by的总记录行数另类方法

    mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: ...

  5. mysql命令导出方法_MySQL数据库导出方法大全(命令行+navicat)

    由于前段时间刚做完数据库课设,想导出数据库文件,在朋友的机器上跑一跑.由于我使用的是界面化的mysql,理所当然地认为可以在界面上找到导出数据库的操作选项,结果自己一个人摸索了半天,以失败告终.上网一 ...

  6. mysql游标遍历修改_mysql使用游标遍历数据进行批量针对性更新数据,急求mysql大神解答...

    我现在有个数据表ud18,里面有图片上的ID,parentid,objname,现在要针对objname的这些号码进行针对性更新,写存储过程进行父子关系转换,做成树形,就是根据objname将父的id ...

  7. mysql 未能启用约束_未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。...

    来源:http://www.cnblogs.com/JuneZhang/archive/2013/01/10/2853981.html 今天运行项目,提示"未能启用约束.一行或多行中包含违反 ...

  8. mysql 行级锁 索引_mysql 行级锁 索引唯一值

    做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统.假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为 Select rest ...

  9. 关于未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值的解决方法...

    今天在编写C#程序时,VS提示了"未能启用约束.一行或多行中包含违反非空.唯一或外键约束的值."异常,没有慌乱,因为前几天遇到过这个异常,现在只有悔恨,为什么当时没有写一下博客记录 ...

最新文章

  1. 0x开头的颜色值和#开头的颜色值的区别以及转化
  2. 服务器jar包配置文件,spring boot加载第三方jar包的配置文件的方法
  3. mysql5.6.37 主从同步_MySQL5.6 Replication主从复制(读写分离) 配置完整版
  4. 网络编程懒人入门(三):快速理解TCP协议一篇就够
  5. adb bugreport保存位置_adb 常用命令---日常提升效率
  6. 移动APP接口遇到的一些小问题
  7. mysql基本操作--数据库SQL操作
  8. Numpy学习笔记(三)
  9. 深入理解计算机操作系统(六)
  10. synchronize原理以及和CAS的浅层比较
  11. android sqlite配置,60. (android开发)SQLite作为APP应用的配置打包
  12. gps 数据解析-NMEA 0183协议
  13. windows xp 虚拟机卡顿问题查找
  14. 前端开发css样式基础篇
  15. 微软,招 Java 了!
  16. Android网络收音机--使用Vitamio解码(一)
  17. 宝塔面板linux账号密码忘记,宝塔面板忘记账号或密码的解决办法
  18. 弘辽科技:优秀的淘宝详情页应包含哪些内容?
  19. php用户注册自动生成邀请码,PHP如何实现根据用户id生成一个唯一邀请码
  20. MySQL5.5版本安装详细讲解

热门文章

  1. Hadoop单机和伪分布式环境搭建
  2. Navicat的快捷键
  3. 3d数学基础:图形和游戏开发(第2版)_人教版五年级数学上册教学计划进度表
  4. mysql 分区 导出_mysql普通表变成分区表导入导出
  5. 非标自动化企业前十名_企业动态 | 瑞弗机电:全链条拓展“非标定制” 量身定制自动化生产线...
  6. OpenShift Security (4) - 管理集群中的安全漏洞
  7. Jupyter.net:使用Jupyter进行交互式计算的Windows应用程序
  8. Visual Studio 2019 16.6 Preview 2 发布
  9. .NET Core 3.0中的Cookie身份验证
  10. Visual Studio 2019 for Mac 8.3 正式发布