多对多关系:如何从3表中删除记录?

ukdjmx9f  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(149)

例如,我有以下表格:

person          person_address            address
==========      ==================        ===========
pid   (PK)      pid           (FK)        aid    (PK)
...             aid           (FK)        ...

我已经准备好了 pidON DELETE CASCADE 以及 aidON DELETE NO ACTION . 目标是从中删除相应的记录 address 如果 person 被删除。
我试过扳机:

CREATE TRIGGER pa_delete 
AFTER DELETE ON person_address
FOR EACH ROW 
DELETE FROM address
WHERE person_address.address_id = address.address_id

但当我删除 person 记录, address 记录还在。我做错什么了?
编辑
涉及的表格:

CREATE TABLE IF NOT EXISTS `chkdcrm`.`person` (
  `person_id` INT(11) NOT NULL AUTO_INCREMENT,
  `first_name` VARCHAR(45) NOT NULL,
  `last_name` VARCHAR(45) NOT NULL,
  `tel` VARCHAR(20) NULL,
  `fax` VARCHAR(20) NULL,
  `mobile` VARCHAR(20) NOT NULL UNIQUE,
  `email` VARCHAR(150) NOT NULL UNIQUE,
  PRIMARY KEY (`person_id`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `chkdcrm`.`address` (
  `address_id` INT(11) NOT NULL AUTO_INCREMENT,
  `type` ENUM('Invoice', 'Shipping', 'Site', 'Mailing') NOT NULL,
  `street` VARCHAR(100) NOT NULL,
  `city` VARCHAR(100) NOT NULL,
  `state` VARCHAR(30) NOT NULL,
  `zip` VARCHAR(10) NOT NULL,
  `country` VARCHAR(40) NOT NULL,
  PRIMARY KEY (`address_id`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `chkdcrm`.`person_address` (
  `address_id` INT(11) NOT NULL,
  `person_id` INT(11) NOT NULL,
  PRIMARY KEY (`address_id`, `person_id`),
  CONSTRAINT `fk_pa_address`
    FOREIGN KEY (`address_id`)
    REFERENCES `chkdcrm`.`address` (`address_id`)
    ON DELETE NO ACTION,
  CONSTRAINT `fk_pa_person`
    FOREIGN KEY (`person_id`)
    REFERENCES `chkdcrm`.`person` (`person_id`)
    ON DELETE CASCADE)
ENGINE = InnoDB;

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题