私はテーブルを持っていますregionkey
:
areaid -- primary key, int
region -- char(4)
locale -- char(4)
データベースの残りの部分全体は、areaid への外部キーです。このテーブルには、一意の制約を持つ (地域、ロケール) のインデックスがあります。
問題は、2 つのレコードがあることです。
101 MICH DETR
102 ILLI CHIC
そして、それらの間で (地域、ロケール) フィールドを交換する必要があるため、次のようになります。
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;
これどうやってするの?スワップを行うアトミックな方法はありますか? 提案?