Mysql 在重复密钥复合密钥上插入到

Mysql 在重复密钥复合密钥上插入到,mysql,sql,Mysql,Sql,我想让我的m:n表与另一个系统的另一个mysql数据库表保持同步 假设一名员工可以在n个部门工作,一个部门可以有n名员工: Table Department(id(pk), name) Table Employee(id(pk), name) Table employee_department(employee_id(fk), department_id(fk)) 对于所有其他表,我使用了“insert-into…on-duplicate key”,这在Mysql使用新值更新找到的项时非常

我想让我的
m:n
表与另一个系统的另一个mysql数据库表保持同步

假设一名员工可以在n个部门工作,一个部门可以有n名员工:

Table Department(id(pk), name)

Table Employee(id(pk), name)

Table employee_department(employee_id(fk), department_id(fk))
对于所有其他表,我使用了
“insert-into…on-duplicate key”
,这在Mysql使用新值更新找到的项时非常有效。如果我在employee_department表中使用此语句,则会插入重复的值(当然,因为这些值仅为fks)。我考虑将fks更改为pks,这样我就有了一个复合密钥。但mysql不会再次插入,也不会从另一个系统中删除已删除的引用


我需要更改什么才能使整个表保持同步?

您不必删除当前外键,只需添加主键或唯一复合键:

ALTER TABLE `employee_department`
ADD PRIMARY KEY (`employee_id`, `department_id`);

但是,请记住,您仍然必须手动删除在原始系统中删除的关系,这些关系的相关记录保持不变

2可靠的方法是执行完整的数据库擦除/转储或使用

ALTER TABLE `employee_department`
ADD UNIQUE INDEX (`employee_id`, `department_id`);