您应该能够在 import_id 列上创建唯一键,并且仍然将该列指定为可为空。只有主键列必须指定为 NOT NULL。
也就是说,在新表上,您可以在可为空的 import_id 列上指定唯一键,然后在使用ON DUPLICATE KEY从旧表插入新表时处理任何重复键错误
这是我正在驾驶的基本工作示例:
create table your_table
(id int unsigned primary key auto_increment,
someColumn varchar(50) not null,
import_id int null,
UNIQUE KEY `importIdUidx1` (import_id)
);
insert into your_table (someColumn,import_id) values ('someValue1',1) on duplicate key update someColumn = 'someValue1';
insert into your_table (someColumn) values ('someValue2');
insert into your_table (someColumn) values ('someValue3');;
insert into your_table (someColumn,import_id) values ('someValue4',1) on duplicate key update someColumn = 'someValue4';
其中第一个和最后一个插入代表来自旧表的插入,第二个和第三个代表来自其他地方的插入。
希望这会有所帮助,祝你好运!