我想要一个更新触发器,在尝试更新任何行时发出错误> (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
答案 0 :(得分:1)
如果要从表中获取任何值,则需要发出正确的select语句来获取它。
因此,在触发器的主体(开始之后)声明一个变量(确保使用正确的数据类型):
declare max_testung int;
然后为其指定最大值:
SET max_testung = (SELECT max(IDBCRS_Testung) FROM BCRS_Test);
然后使用变量进行比较:
IF New.IDBCRS_Testung > (max_testung-100)