我想优化具有VARCHAR
仅计数的列的表 - 大多数时间少于十个,有时是数百个 - 不同的值。所以我希望将列转换为ENUM
s,关键是我无法预测值本身,所以我希望在必要时即时构建它们。
不幸的是,似乎 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');
有什么方法可以实现这一点,还是只是一种痛苦的方式来处理需要一张桌子的外国收藏?