假设,我有下表:
CREATE TABLE `test` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Value` ENUM('VAL1','VAL2') NOT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE=InnoDB;
和以下触发器:
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `test` FOR EACH ROW BEGIN
SET NEW.`Value` := 'VAL1';
END $$
DELIMITER ;
现在我可以插入一些行,但是如果我使用无效的枚举类型,我会收到一个错误:
INSERT INTO test VALUES (NULL, 'VAL2'); // Statement ok, "Value" is set to 'VAL1'
INSERT INTO test VALUES (NULL, 'VAL5'); // Exception 'SQL Fehler (1265): Data truncated for column 'Value' at row 1'
似乎在 INSERT
-触发器触发之前检查了有效的 ENUM 值。
这是为什么?如何建立触发器将无效的 ENUM 更改为有效的 ENUM?
我看到了很多例子,这些行为显然不会发生。会不会是配置错误?我们使用 MariaDB 10.5.9。
答案 0 :(得分:0)
Akina(见第一条评论)是对的,即使在触发器中也不可能更改未知的 ENUM
值。
我的解决方案是在 ENUM
列表中包含所有可能的值。所以触发器可以完成它的工作并将“禁止”值更改为允许的值。唯一需要注意的是,现在有一些 ENUM
值没有在数据中使用。