mysql使用max in trigger

时间:2016-10-10 12:23:47

标签: mysql triggers max

我想要一个更新触发器,在尝试更新任何行时发出错误> (MAX(IDBCRS_Testung)-100)。只要我说出一个数字,触发器本身就可以正常工作,例如

CREATE DEFINER=`root`@`%` TRIGGER `TEST`.`BCRS_BEFORE_UPDATE` BEFORE UPDATE ON `BCRS_Test` FOR EACH ROW
BEGIN
IF New.IDBCRS_Testung > (IDBCRS_Testung)-100) 
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Update of record not allowed!';
END IF;
END

但是,当然,由于ID号越来越大,这是不切实际的,因此我尝试了:

CREATE DEFINER=`root`@`%` TRIGGER `TEST`.`BCRS_BEFORE_UPDATE` BEFORE UPDATE ON `BCRS_Test` FOR EACH ROW
BEGIN
IF New.IDBCRS_Testung > (Max(IDBCRS_Testung)-100) 
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Update of record not allowed!';
END IF;
END

但后来我收到以下错误:

错误1111:1111:无效使用群组功能

在Linux Mint 17.3上使用最新的MySQL和工作台

TIA

1 个答案:

答案 0 :(得分:1)

如果要从表中获取任何值,则需要发出正确的select语句来获取它。

因此,在触发器的主体(开始之后)声明一个变量(确保使用正确的数据类型):

declare max_testung int;

然后为其指定最大值:

SET max_testung = (SELECT max(IDBCRS_Testung) FROM BCRS_Test);

然后使用变量进行比较:

IF New.IDBCRS_Testung > (max_testung-100)