mysql - MySQL 中的自动增长 ENUM

标签 mysql sql dynamic enums

我想优化具有 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/

相关文章:

dynamic - 无模型的角度 Material 表动态列

php - Ajax 用 php 内容更新表格

sql - 在第一个连字符之前填充零并删除空格并添加 BA 和 IN

sql - 避免嵌套查询

c# - 你如何在 C# 中进行动态脚本评估?

MySQL过滤

mysql - 使用集群(NDBCluster 或 Galera)时,nodejs 应用程序如何连接到故障转移 MySQL 服务器之一?

php - MySQL/潜在客户管理/营销事件 - 结构

php - PHP MySQL AJAX 中的多个搜索选项

javascript - 如何使用 jQuery 读取外部 html 文件并将其存储到字符串变量?显示错误