Соотношение «многие ко многим»: как удалить записи из 3 таблиц? - PullRequest
0 голосов
/ 23 мая 2018

Например, у меня есть следующие таблицы:

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

Я установил pid на ON DELETE CASCADE и aid на ON 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...