[英]MySQL - On delete cascade issue
我有3個表:A,B和C.關系是:
表A是主表:
CREATE TABLE IF NOT EXISTS `A` (
`_id` INT NOT NULL AUTO_INCREMENT ,
..........
`_id_B` INT NOT NULL ,
PRIMARY KEY (`_id`) ,
INDEX `fk_Atable_Btable` (`_id_B` ASC) ,
CONSTRAINT `fk_A_B`
FOREIGN KEY (`_id_B` )
REFERENCES `B` (`_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `B` (
`_id` INT NOT NULL AUTO_INCREMENT ,
........
PRIMARY KEY (`_id`) )
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `C` (
`_id` INT NOT NULL ,
`_id_A` INT NOT NULL ,
PRIMARY KEY (`_id`) ,
INDEX `fk_Ctable_Atable` (`_id_A` ASC) ,
CONSTRAINT `fk_C_A`
FOREIGN KEY (`_id_A` )
REFERENCES `A` (`_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
我想刪除表A上的條目,我會刪除ON CASCADE來自B和C的條目。
如何設置我的sql腳本呢?
嗨其類似如下
。 我有兩張桌子:文章評論
評論有一個article.id的外鍵,當然,刪除一篇文章時,我也希望刪除它的所有注釋。 我試過這樣做:
create table article (
id int not null auto_increment,
title varchar(80) not null,
subtitle varchar(80) not null,
content text not null,
author varchar(40) not null,
time datetime not null,
PRIMARY KEY (id)
);
create table commentary (
id int not null auto_increment,
article_id int not null,
title varchar(30),
content tinytext not null,
author varchar(40) not null,
email varchar(50),
ip varchar(16) not null,
time datetime not null,
PRIMARY KEY (id),
FOREIGN KEY (article_id)
REFERENCES article(id)
ON DELETE CASCADE
);
如果我沒有記錯的話,這是根據文檔提供的(MySQL網站上的一張海報,簡短說明
您需要引入B中指向A的外鍵關系(即B需要包含具有A的id的列)才能使其正常工作。 然后將該關系的“ON DELETE”子句設置為“ON DELETE CASCADE”,類似地設置C上的fk_C_A約束。
你說表A
和B
是1:1
關系,但兩者都有自動遞增鍵。 相反,你有一個A._id_B
字段,我想用它來定位表B
相應的(1:1)行。
標准方法是刪除A._id_B
而在另一個表( B
)中,使主鍵不自動遞增,並使其成為A
的主鍵的FOREIGN KEY
:
CREATE TABLE IF NOT EXISTS A
( _id INT NOT NULL AUTO_INCREMENT ,
..........
PRIMARY KEY (_id)
)
ENGINE = InnoDB ;
CREATE TABLE IF NOT EXISTS B
( _id INT NOT NULL ,
........
PRIMARY KEY (_id) , --- B._id is a primary key
CONSTRAINT fk_B_A
FOREIGN KEY (_id) --- and a foreign key
REFERENCES A (_id)
ON DELETE CASCADE
ON UPDATE CASCADE
)
ENGINE = InnoDB ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.