簡體   English   中英

MySQL - 關於刪除級聯問題

[英]MySQL - On delete cascade issue

我有3個表:A,B和C.關系是:

  • A-> B 1:1
  • A-> C 1:n

表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約束。

你說表AB1: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.

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