我有三個主鍵和引用其他三個表 MySQL的多主鍵
下面的表更換爲表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
但顯然一個REPLACE語句沒有where子句。
我也看看這些類似的問題:
MySQL REPLACE INTO on multiple keys?
mysql REPLACE query with multiple primary keys
但不幸的是MySQL是不是我的強項,我真的可以使用一些幫助。
我希望我解釋清楚的東西,感謝
謝謝,我想這個問題是,有沒有可能'設置training_record = 100,其中員工= 22和training_matrix = 5'就像使用'replace'在'insert'中一樣? – andrew 2014-09-22 18:43:41
@andrew「不,用REPLACE是不可能的,因爲'training_record'是PRIMARY KEY約束的一部分,如果表的PRIMARY KEY只是兩列'(employee,training_matrix)',那麼你可以使用REPLACE'或'INSERT ... ON DUPLICATE KEY'語句將(22,5,2189)更改爲(22,5,100)(但這意味着對於給定的(僱員, training_matrix),例如(22,5)只會在表格中出現一次。 – spencer7593 2014-09-22 19:08:16
感謝您的時間,我想我現在正開始圍繞它進行包圍+1 – andrew 2014-09-22 19:11:34