我有一张桌子
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
怎么做?
答案 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.更多关于 这个稍后。