我想优化具有 VARCHAR
列的表,这些列只计算很少的——大多数时候少于几十个,有时是几百个——不同的值。所以我希望将列转换为 ENUM
,关键是我无法预测值本身,因此我希望在必要时即时构建它们。
不幸的是,当插入一个不存在的值时,MySQL 似乎不会抛出错误,而是会存储 NULL
。
例如:
CREATE TABLE `enumed` (
`col` ENUM( 'a', 'b' )
);
INSERT INTO `enumed` ( `col`) VALUES ('b');
INSERT INTO `enumed` ( `col`) VALUES ('z');
将存储一行 'b'
和一行 NULL
没有错误。很明显,我无法承受另一个查询来获取值的空值,但更希望出现错误,在这种情况下,我会像下面这样扩展 ENUM
定义并重复查询。
ALTER TABLE `enumed` CHANGE `col` `col` ENUM( 'a', 'b', 'z' );
INSERT INTO `enumed` ( `col`) VALUES ('b');
有什么方法可以实现这一点,或者这只是一种处理需要表的外部集合的痛苦方法吗?
最佳答案
如果启用严格的 SQL 模式,尝试存储无效的 ENUM 值将报告错误。您可以检查此错误,扩展 ENUM,然后重试 INSERT。
关于mysql - MySQL 中的自动增长 ENUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520449/