插入后mysql触发器应设置可用/不可用

时间:2014-06-04 20:26:34

标签: mysql triggers status

我几天后正在学习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

我的最后一次尝试不会工作......请帮助我。

1 个答案:

答案 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