MySQL 在更新触发之前出现错误

标签 mysql sql database triggers

我已经在 MySQL 的触发器上工作了几个小时,但我不知道出了什么问题。

这是我的表结构:

CREATE TABLE IF NOT EXISTS `RentalVideo` (
  `OrderID` int(11) NOT NULL,
  `VideoBarcode` int(11) NOT NULL,
  `RentalReturned` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`OrderID`,`VideoBarcode`),
  KEY `RentalVideo_VideoBarcode_FK` (`VideoBarcode`)
)

以下是一些示例数据:

INSERT INTO `RentalVideo` (`OrderID`, `VideoBarcode`, `RentalReturned`) VALUES
(1, 223823, 0),
(1, 447956, 0),
(3, 705481, 0),
(4, 988908, 0),
(5, 143375, 0);

这是不起作用的触发器:

CREATE
    TRIGGER `RENT_FIVE_VIDEOS_MAX` BEFORE INSERT
    ON `bollywoo_video`.`RentalVideo`
FOR EACH ROW BEGIN
    -- variable declarations
    DECLARE vRentedVideos int;
    DECLARE vCustomer int;
    -- trigger code

    SELECT RentalOrder.CustID
    FROM RentalOrder
    WHERE RentalOrder.OrderID = NEW.OrderID
    INTO vCustomer;

    SELECT COUNT(*)
    FROM RentalOrder, RentalVideo
    WHERE RentalOrder.CustID = vCustomer
    AND RentalVideo.RentalReturned = 0
    AND RentalOrder.OrderId = RentalVideo.VideoID
    INTO vRentedVideos;

    IF vRentedVideos >= 5 THEN 
        CALL RAISE_APPLICATION_ERROR(-2000, 'Cannot checkout more than 5 videos');
    END IF;

END

最后但并非最不重要的一点是,这是我遇到的错误:

Error
SQL query:

CREATE TRIGGER `RENT_FIVE_VIDEOS_MAX` BEFORE INSERT ON  `bollywoo_video`.`RentalVideo` 
FOR EACH
ROW BEGIN -- variable declarations

DECLARE vRentedVideos INT;


MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 6 

该错误似乎发生在 DECLARE vRentedVideos int;

之前

最佳答案

删除分号并尝试这个

DELIMITER $$

CREATE
TRIGGER `RENT_FIVE_VIDEOS_MAX` BEFORE INSERT
ON `bollywoo_video`.`RentalVideo`
FOR EACH ROW BEGIN

 ...
END$$
DELIMITER ;

关于MySQL 在更新触发之前出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326788/

相关文章:

mysql - MySQL管理客户订单的最佳实践

sql - DIA中的下划线

c++ - 用于磁盘支持的关联数组的 SQLite?

mysql - 是否可以将数据库中所有表的主键引用为一个表的外键?

mysql - 对连接结果进行排序时,索引是否会提高性能

sql - 从Excel到sql表的非结构化分组数据

mysql - 使用 WHERE、GROUP BY 和 ORDER BY

mysql - 我可以在 MySQL 中使用 JSON_EXTRACT 进行不区分大小写的搜索吗?

php - 需要去除 ASCII 字符

mysql更改日期格式