2016-10-10 49 views
1

我想要一个更新触发器,当尝试更新任何行>(max(IDBCRS_Testung)-100)时发生错误。只要我声明一个号码,触发器本身就能正常工作,例如,mysql在触发器中使用max

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:无效使用组功能

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

TIA

回答

1

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

所以,在触发的身体(后开始)声明一个变量(确保你使用正确的数据类型):

declare max_testung int; 

然后分配最大值给它:

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

然后使用变量做比较:

IF New.IDBCRS_Testung > (max_testung-100) 
+0

非常感谢!这正如我想要的那样工作! – rickquan

+0

很高兴能够帮助:) – Shadow