我有一个包含3列的表,id(主键)和两个唯一的Key列column_1_id和column_2_id。
column_1_id(引用用户的ID)可以在数据库中多次存在,但每次必须有不同的column_2_id。
下图有效。
+----+-------------+-------------+
| ID | column_1_ID | column_2_ID |
+----+-------------+-------------+
| 1 | 1 | 2 |
| 2 | 1 | 4 |
+----+-------------+-------------+
下图无效。
+----+-------------+-------------+
| ID | column_1_ID | column_2_ID |
+----+-------------+-------------+
| 1 | 1 | 2 |
| 2 | 1 | 2 |
+----+-------------+-------------+
我需要使用2或4更新column_2_ID的行。如果用户(由column_1_ID引用)的行为column_2_ID = 2,行为column_2_ID = 4.应删除column_2_ID = 4的行,并且column_2_ID = 2的行已更新为column_2_ID = 3。
但是,如果用户的行为column_ID_2 = 2,则row_ID_2 = 4的行和column_ID_2 = 3的行。应删除column_ID_2 = 2且column_ID_2 = 4的行。
最终目标是不存在column_2_ID等于2或4的行。
因此,例如,目前下面的图表可以并且确实存在。
+----+-------------+-------------+
| ID | column_1_ID | column_2_ID |
+----+-------------+-------------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 1 | 4 |
+----+-------------+-------------+
+----+-------------+-------------+
| ID | column_1_ID | column_2_ID |
+----+-------------+-------------+
| 1 | 1 | 2 |
| 2 | 1 | 4 |
+----+-------------+-------------+
上述两个例子都应该产生如下:
+----+-------------+-------------+
| ID | column_1_ID | column_2_ID |
+----+-------------+-------------+
| 1 | 1 | 3 |
+----+-------------+-------------+
无法创建新表,必须维护ID主键。
以下是我尝试过的一些示例,其中包括:
UPDATE table
SET column_2_id=3
WHERE column_2_id IN (2,4)
然而它返回:
重复录入' 2-3'为了key' integrity_idx'。
我尝试了各种解决方案,但没有人提出我需要的解决方案。必须维护主键(id) - 创建新表是不可能的。