假设我有一个名为 的表people
,其中id
是主键:
+-----------+---------+---------+
| id | fname | lname |
| (integer) | (text) | (text) |
+===========+=========+=========+
| 1 | Daniel | Edwards |
| 2 | Fred | Holt |
| 3 | Henry | Smith |
+-----------+---------+---------+
我正在尝试编写一个足够健壮的行重复查询,以考虑对表的架构更改。每当我向表中添加一列时,我都不想返回并修改重复查询。
我知道我可以做到这一点,这将重复记录 id 2 并为重复的记录提供一个新的 id:
INSERT INTO people (fname, lname) SELECT fname, lname FROM people WHERE id = 2;
但是,如果我添加一age
列,我需要修改查询以考虑年龄列。
显然我不能执行以下操作,因为它还会复制主键,从而导致duplicate key value violates unique constraint
-- 而且,我不希望它们共享相同的 id:
INSERT INTO people SELECT * FROM people WHERE id = 2
话虽如此,解决这一挑战的合理方法是什么?我宁愿远离存储过程,但我不是 100% 反对它们,我想......