我几天后正在学习mysql和cakephp。我建立了一个小/简单的电影租赁数据库,有3个表“电影,客户和租赁”。
CREATE TABLE IF NOT EXISTS `videothek9`.`movies` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(45) NULL,
`status` ENUM('available','not available') NULL DEFAULT 'available',
PRIMARY KEY (`id`))
CREATE TABLE IF NOT EXISTS `videothek9`.`rentals` (
`id` INT NOT NULL AUTO_INCREMENT,
`rental_date` DATE NOT NULL,
`return_date` DATE NOT NULL,
`movie_id` INT NOT NULL,
`customer_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_movies_id_idx` (`movie_id` ASC),
INDEX `fk_customers_id_idx` (`customer_id` ASC),
CONSTRAINT `fk_movies_id`
FOREIGN KEY (`movie_id`)
REFERENCES `videothek9`.`movies` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_customers_id`
FOREIGN KEY (`customer_id`)
REFERENCES `videothek9`.`customers` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
现在我需要一个触发器,每当具有特定电影ID的新租借时,它就会更新电影中的“状态”字段。
DELIMITER $$
CREATE TRIGGER `rentals_AINS` AFTER INSERT ON `rentals` FOR EACH ROW
UPDATE movies
SET status = 'not available'
WHERE id = NEW.id
我的最后一次尝试不会工作......请帮助我。
答案 0 :(得分:-1)
根据您的rentals
表结构,movie_id
引用movies (id)
。
CONSTRAINT `fk_movies_id`
FOREIGN KEY (`movie_id`)
REFERENCES `videothek9`.`movies` (`id`)
因此,在您的触发器中,UPDATE
语句应如下所示,因为租借表中的id
可能/可能与电影表中的ID
不匹配,因为它不是引用列< / p>
UPDATE movies
SET status = 'not available'
WHERE id = NEW.movie_id