我有一张桌子regionkey
:
areaid -- primary key, int
region -- char(4)
locale -- char(4)
数据库的其余整个部分都用外键键入areaid。在此表中,有一个具有唯一约束的(区域,区域设置)索引。
问题是我有两条记录:
101 MICH DETR
102 ILLI CHIC
我需要在它们之间交换(region,locale)字段,这样我才能得出:
101 ILLI CHIC
102 MICH DETR
天真的方法行不通,因为它违反了区域和语言环境的唯一索引:
update regionkey
set region='ILLI', locale='CHIC' where areaid = 101; -- FAILS
update regionkey
set region='MICH', locale='DETR' where areaid = 102;
我怎样才能做到这一点?是否有原子方式进行交换?有什么建议吗?
您不能在SQL Server中推迟对多个语句的约束检查(除非您禁用),所以您必须避免冲突或在一个语句中执行
update
regionkey
set
region= CASE areaid WHEN 101 THEN 'ILLI' ELSE 'MICH' END,
locale= CASE areaid WHEN 101 THEN 'CHIC' ELSE 'DETR' END
where
areaid IN (101, 102);
或者,更常规地(在交易中)
update regionkey
set region='AAAA', locale='BBBB' where areaid = 101;
update regionkey
set region='MICH', locale='DETR' where areaid = 102;
update regionkey
set region='ILLI', locale='CHIC' where areaid = 101;
编辑:为什么不交换键而不是值?除非Areaid具有某些含义,否则通常可以达到理智的结果
update
regionkey
set
areaid = 203 - areaid
where
areaid IN (101, 102);
问题内容: 我有一个带有优先级列的“任务”表,该表具有唯一的约束。 我试图交换两行的优先级值,但我一直违反约束。我在类似情况下的某个地方看到了该语句,但MySQL却没有。 这将导致错误: 是否可以在MySQL中完成此操作而不使用伪造的值和多个查询? 编辑: 这是表的结构: 问题答案: 是否可以在MySQL中完成此操作而不使用伪造的值和多个查询? 不 (我想不到的)。 问题是MySQL如何处理更新。
问题内容: 目标: 交换两个记录的主键,而不会遇到ORA-00001:违反了唯一约束。“可行”的解决方案(在下文中)只是一个破解。是否有一项功能/技术可以将约束执行推迟到提交事务之前? motivation -使用此数据的遗留应用程序存在设计缺陷,并且依赖于ID顺序和值-请求是按以下方式交换PK值: What doesn’t Work: Hack/Solution that ‘works’ Tab
我正在使用Hibernate 4.0最终版和ojdbc6来开发我的网络应用程序。一切都好,除了当我试图插入一个新的父母/孩子的关系。首先,这些是实体: 让我们看看这两个场景: 员工已存在,我尝试向其添加新地址-- 这是事务处理程序: 你可以想象,2.b的案子是我关心的。我已经调试了事务,这是我调用保存()方法(在DAO类中)时得到的: 会议结束了。saveOrUpdate(employee)方法成
我正在使用Spring和Hibernate,我得到了这个例外。以下是我试图获得的:我有User和UserSettings类,它们以OneToMany和ManyToOne注释为界,如下所示: 现在,我想为用户添加设置,我是这样做的: 问题来了:UserSettings中的用户持有旧设置和新设置的集合(设置,我刚刚创建并想要添加),但旧设置持有用户的集合,其中没有新设置。我想这就是为什么我会遇到异常,
我有一个MathematicsAnswer引用的实体数学。如果对数学执行post请求,我会得到一个例外,即MathsAnswer上的字段不能为空。但我确实在球场上跳了起来。拜托,我需要这个解决方案<代码>java.sql。SQLIntegrityConstraintViolationException:列'question_id'不能为空。 sql架构: 实体类: MathsAnswers.jav
问题内容: 我正在使用Hibernate 4.0 Final和ojdbc6开发我的Web应用程序。一切正常,除非我尝试插入新的父/子关系。首先,这些是实体: 让我们看看这两种情况: 一名员工已经存在,我尝试向其添加新地址->正常工作。 员工不存在,我尝试创建一个新员工。两种不同的情况: a)我只插入一名雇员(无地址)->可以正常工作。 b)我插入并添加了employee及其地址-> 失败 。我必须