在触发器中使用max的mysql

在触发器中使用max的mysql,mysql,triggers,max,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 SQL

我需要一个更新触发器,它在尝试更新任何行>(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
但当然,随着身份证号码的增长,这并不实际,因此我尝试:

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:组函数的使用无效

在LinuxMint17.3上使用最新的MySQL和workbench


TIA

如果要从表中获取任何值,需要发出适当的select语句来获取该值

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

然后为其指定最大值:

SET max_testung = (SELECT max(IDBCRS_Testung) FROM BCRS_Test);
然后使用变量进行比较:

IF New.IDBCRS_Testung > (max_testung-100)

非常感谢你!这正是我想要的!很高兴能够提供帮助:)
IF New.IDBCRS_Testung > (max_testung-100)