![](/img/trans.png)
[英]What should I do for deleting data from different mysql table with foreign key in this situation?
[英]What will this Foreign Key on my MySQL Database table do for me?
我正在使用PHP和MySQL構建項目管理項目。 我決定添加一個“論壇類型”的“討論”部分。 我計划將其設為與您的典型論壇相同,但將由項目ID代替不同的論壇主題/部分,因此我的項目管理軟件中的每個項目都將擁有自己的論壇部分。
因此,我真正需要的只是一個主題帖子,然后是帖子回復。 每個主題都會有一個主題/標題,然后是一個正文/描述,任何后續的帖子/回復都將是“帖子”
所以我正在建立主題和帖子 MySQL數據庫表
我的架構如下。 現在,我已經使用這些數據庫很多年了,但是對於像FOREIGN KEYS這樣的更高級功能,我沒有太多經驗
所以我有這個外鍵SQL ...
ALTER TABLE posts
ADD FOREIGN KEY(parent_topic_id)
REFERENCES topics(topic_id)
ON DELETE CASCADE
ON UPDATE CASCADE;
1) 如前所述,這里沒有太多經驗,所以我的問題是此外鍵究竟會做什么並防止發生這種情況? 我完全不使用它有什么區別?
ON DELETE CASCADE
意味着我可以從topics
表中刪除一條記錄,並且會自動刪除我的posts
表中具有匹配的topic_id
所有記錄? 如果是這樣,那真的很好,值得添加。
我不確定在這種情況下ON UPDATE CASCADE
會做什么?
2)如果我的數據庫表是通過這樣的PHP代碼創建的...
$DiscussionPostsTableSql = "CREATE TABLE posts (
ALL my COLUMN DEFINITIONS HERE....)";
$db->query($DiscussionTopicReplyTableSql);
那么我應該能夠以相同方式創建此外鍵嗎? 像這樣...
$foreignKeySql = "ALTER TABLE posts ADD FOREIGN KEY(parent_topic_id) REFERENCES topics(topic_id) ON DELETE CASCADE ON UPDATE CASCADE;)";
$db->query($foreignKeySql);
還是需要以其他方式添加?
主題表
CREATE TABLE topics (
topic_id char(36) NOT NULL AUTO_INCREMENT,
project_id char(36) NOT NULL,
topic_subject VARCHAR(255) NOT NULL,
topic_content TEXT default NULL,
date_created DATETIME NOT NULL,
date_last_post DATETIME NOT NULL,
created_by_user_id char(36) NOT NULL,
last_post_user_id char(36) NOT NULL,
posts_count char(36) default NULL,
PRIMARY KEY (topic_id)
) TYPE=INNODB;
帖子表
CREATE TABLE posts (
post_id char(36) NOT NULL AUTO_INCREMENT,
parent_topic_id char(36) NOT NULL,
post_content TEXT NOT NULL,
date_created DATETIME NOT NULL,
created_by_user_id char(36) NOT NULL,
PRIMARY KEY (post_id)
) TYPE=INNODB;
外鍵
// Add Foreign Key between Topic and Posts tables
ALTER TABLE posts
ADD FOREIGN KEY(parent_topic_id)
REFERENCES topics(topic_id)
ON DELETE CASCADE
ON UPDATE CASCADE;
這個外鍵會阻止系統創建posts
有parent_topic_id
不指向任何topic_id
在topics
表,無論是由錯誤或惡意。
ON DELETE CASCADE
意味着每當您刪除topic
,所有相關posts
都會隨之刪除。
ON UPDATE CASCADE
意味着,如果您更新topic
的ID,它將更新所有引用posts
的ID。
至於創建鍵-如您所述,您應該在創建表本身的相同位置/方式中創建鍵。
注意:各種存儲引擎對外鍵支持有各種限制。 您正在使用的InnoDB是一個非常安全的選擇,但是您應該查看文檔以獲取全部詳細信息。
外鍵關系是規范化方法的一部分。
在這里,如果您不使用單獨的表格來發布帖子,那么主題重復就好像一個主題將有多個帖子一樣。
在這里,您具有用於帖子和主題的單獨表格,以及通過外鍵關系與帖子的連接主題。
這樣,您可以管理兩個表。 刪除主題將刪除與該主題相關的所有帖子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.