我有一個MYSQL資料庫(在PHPMyAdmin中),其中有兩個表格users
和posts
。兩個表都有一個username
列。我想修改posts
表中的username
列,使其從users
表中提取使用者名稱數據,即posts
表中的資料會自動從users
表中更新,並在對users
表進行任何更新時引用它。
我最初認為可以使用外鍵來實現這個功能,但如果我理解正確,外鍵只與父表中的主鍵相關聯,是嗎?
我收到一個錯誤訊息,說以下語法不正確,儘管它沒有給出任何提示/解決方案:
ALTER TABLE posts MODIFY COLUMN username VARCHAR(55) NOT NULL REFERENCES users(username) ON UPDATE CASCADE
如何修改現有列,使其引用/使用資料庫中不同表中的列的資料?
兩個表中的username
列具有相同的類型、大小和屬性,即VARCHAR(55) NOT NULL
,並且使用的是innoDB儲存引擎。
外鍵是一種資料完整性檢查,僅此而已。它確保子表中的欄位包含父表中引用欄位中出現的值。就是這樣*。
你不能使用外鍵將一張表的資料合併到另一張表中。然而,
JOIN
語句剛好可以滿足你的需求,並且與外鍵一起使用可以確保每個貼文都有一個有效的使用者名稱來識別正確的使用者資料。以這個例子為例:
用戶資料
帖子
我們可以使用以下查詢將
userdata
表格與posts
表格進行JOIN
:你也可以進一步建立一個基於這個查詢的
VIEW
來傳回資料:使用
SELECT
語句查詢檢視:示範:https://www.db-fiddle.com/f/tbBXvthBtwH7CKu1yjzPjQ/0
* 外鍵也允許更新和刪除父表時級聯到子表,但這超出了本文的範圍。