我有一个表有三个主键,并引用其他三个表
这是表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
我的猜测是因为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不是我的强项,我真的可以使用一些帮助。
我希望我能清楚地解释一下,谢谢
答案 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)之间建立一个连接表 或至少分配一种关系