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

标签 mysql enums

我有一张 table

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 的默认值 怎么做?

最佳答案

使用触发函数,像这样:

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

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

关于mysql - 如果我们在 MYSQL 中插入无效枚举值,如何设置默认枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5441184/

相关文章:

php - MYSQL - 具有多个 IN 子句的 PDO

php - 为什么 Magento 在生成 ID 后无法保存客户?

Java:Java5枚举自定义序列化

c - 将几个标志和小枚举作为函数参数传递 : hand-made int bitmasks or small struct?

Java8 Lambda 表达式迭代枚举值并初始化最终成员

c++ - 这是低效的吗?

mysql - 获取两个数据单元之间差异的平均值

php - 以下场景的流畅查询

enums - 如何在Godot中将全局枚举值转换为字符串?

mysql - 获取最新(日期)组行