Например, у меня есть следующие таблицы:
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;