如果我们在MYSQL中插入无效的枚举值,如何设置默认枚举值?

时间:2011-03-26 08:27:07

标签: mysql enums

我有一张桌子

CREATE TABLE `enum_test` ( 
`id` int(10) default NULL, 
`value` enum('YES','NO') NOT NULL default 'YES' 
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

然后执行以下查询

INSERT INTO enum_test(id) VALUES (2);  set 'YES' in `enum` field.
INSERT INTO enum_test(id,value) VALUES (2,1);  set 'YES' in `enum` field.

但是

 //why below query set blank value in enum field??  
  INSERT INTO enum_test(id, value) VALUES (2, 'YESS');

我希望如果用户插入enum字段中不存在的值,那么它应该设置默认值enum 怎么做?

2 个答案:

答案 0 :(得分:5)

使用触发器功能,如下所示:

mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON enum_test
-> FOR EACH ROW
-> BEGIN
->     IF (NEW.value != 'YES' AND NEW.value != 'NO')
->         SET NEW.value = '';
->     END IF;
-> END;//
mysql> delimiter ;

此处有关于触发器的更多信息:Mysql manual, trigger syntax

修改 如建议的那样,也可以定义存储过程并从触发器调用,我认为这对于数据库可维护性更好。 触发器是数据库定义的一部分,因此您可以使用CREATE TABLE语句将其添加到任何sql文件中。

答案 1 :(得分:2)

请参阅Tomas对触发器的回答,或者使用stored procedure

您基本上已插入 默认值。在严格模式下,将引发错误。否则:

http://dev.mysql.com/doc/refman/5.0/en/enum.html

  

如果您将无效值插入   ENUM(即不存在的字符串)   允许值列表),   替换为空字符串插入   特殊错误值。这个字符串可以   区别于“正常”空   字符串由这个字符串组成的事实   数值为0.更多关于   这个稍后。