簡體   English   中英

INNODB級聯刪除和更新

[英]INNODB cascade on delete and update

我試圖在mysql db中創建一些表來處理客戶,將它們分配給組,並為這些組中的客戶提供唯一的促銷代碼/優惠券。

有3個parent(?)表-客戶,組,促銷,然后我有表-customerGroups,將每個customer_id分配給許多group_id,也有-customerPromotions,將每個customer_id分配給許多promotion_id

我知道我需要在刪除和更新上使用級聯,以便在刪除客戶,促銷或分組時也從子表中刪除數據。 我整理了一些php來輕松創建表格http://pastebin.com/gxhW1PGL

我一直在嘗試閱讀級聯外鍵引用,但我認為通過嘗試做一些事情然后了解它們為什么起作用,我會學得更好。 任何人都可以請我提供有關如何對這些表進行操作以使其正常工作的意見。

在開始查詢或進行任何其他操作之前,我希望正確設置數據庫和表,因此任何建議都將是不錯的選擇。

您似乎只需要一點指導。 所以我會盡量簡短。

$sql = "CREATE TABLE customerGroups (
   customer_id int(11) NOT NULL,
   group_id int(11) NOT NULL,
   PRIMARY KEY (customer_id, group_id),
   CONSTRAINT customers_customergroups_fk
     FOREIGN KEY (customer_id)
     REFERENCES customers (customer_id) 
     ON DELETE CASCADE,
   CONSTRAINT groups_customergroups_fk
     FOREIGN KEY (group_id)
     REFERENCES groups (group_id) 
     ON DELETE CASCADE
)ENGINE = INNODB;";

僅在難以確定身份的情況下才需要 ID號。 與人打交道時,很難確定身份。 有很多人叫“約翰·史密斯”。

但是您正在處理已經確定的兩件事。 (並用ID號標識所有內容。)

級聯刪除是有意義的。 級聯更新ID號的情況相對很少。 他們被認為永遠不會改變。 (Oracle DBA堅持認為主鍵必須始終是ID號,並且它們絕不能更改的主要原因是因為Oracle 無法級聯更新。)如果以后由於某些原因需要更改某些ID號,則可以更改該表以包含ON UPDATE CASCADE。

$sql = "CREATE TABLE groups
(
group_id int(11) NOT NULL AUTO_INCREMENT,
group_title varchar(50) NOT NULL UNIQUE,
group_desc varchar(140),
PRIMARY KEY (group_id)
)ENGINE = INNODB;";

請注意對group_title的附加唯一約束。 您不想在數據庫中允許以下任何內容(如下)。

group_id  group_title
--
1         First group
2         First group
3         First group
...
9384      First group

您將希望在所有表格中進行這些更改。 (也許除了您的客戶表。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM