MySql替换为多个主键

时间:2014-09-22 18:24:53

标签: mysql

我有一个表有三个主键,并引用其他三个表 enter image description here

这是表scheema:

CREATE TABLE IF NOT EXISTS training_matrix_reference(
  employee INT NOT NULL,
  training_matrix INT NOT NULL,
  training_record INT UNSIGNED NOT NULL,
  PRIMARY KEY (employee, training_matrix,training_record),
  FOREIGN KEY (employee) REFERENCES employees(id),
  FOREIGN KEY (training_matrix) REFERENCES training_matrix_courses(id),
  FOREIGN KEY (training_record) REFERENCES training_records(m_id)
)

我正在尝试制作一个REPLACE语句来更新training_record列或training_matrix列,或者两列创建一个新行(如果不存在) ,但我还需要检查该员工是否属于同一家公司。

这是我到目前为止所尝试的内容:

REPLACE INTO `training_matrix_reference` 
  ( employee, training_matrix, training_record ) (
    SELECT id, '5', '100'
    FROM employees
    WHERE id =22
    AND company =64
    )

所以我的理论是,这应该已经替换了表格中的第一行,将training_record更新为100,但实际上它实际上创建了一个新行:

                                         22      |           5 |           100

enter image description here

我的猜测是因为training_record是主键?

但我不确定删除主键/引用是否正确,因为此表在其他查询中用作多对多表。

实际上我正在尝试做的是:

REPLACE INTO `training_matrix_reference` 
  ( employee, training_matrix, training_record ) 
  VALUES
  (22,33,18) 
  WHERE 
  employee = 22
  and training_matrix = 5  
  and training_record = 2189

但显然替换语句没有where子句。

我确实查看了这些类似的问题:

MySQL REPLACE INTO on multiple keys?

mysql REPLACE query with multiple primary keys

但遗憾的是MySql不是我的强项,我真的可以使用一些帮助。

我希望我能清楚地解释一下,谢谢

2 个答案:

答案 0 :(得分:1)

training_matrix_reference表的PRIMARY KEY是三列的组合。该表没有多个主键,它有一个单个 PRIMARY KEY。

您拥有的REPLACE语法等同于执行:

DELETE FROM training_matrix_reference 
  WHERE employee        = 22
    AND training_matrix = 5
    AND training_record = 100
; 
INSERT INTO training_matrix_reference (employee, training_matrix, training_record)
VALUES (22, 5, 100);
;

DELETE操作仅删除整个主键匹配的行。根据您提供的信息,我们希望将一行添加到表中。

你有问题吗?

答案 1 :(得分:0)

你应该在(employee,training_matrix_reference)之间建立一个连接表 或至少分配一种关系