【问题标题】:Insert into on duplicate key Composite Key插入重复键上的复合键
【发布时间】:2012-08-21 13:14:04
【问题描述】:

我想让我的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不会再次插入,但不会从其他系统中删除已删除的引用。

我需要改变什么才能使完整的表保持同步?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

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

    或

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

    但是,请记住,您仍然必须手动删除在原始系统中删除且相关记录完好无损的关系。

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

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 2018-02-22
      • 2020-07-21
      • 2015-03-20
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多