+ -
当前位置:首页 → 问答吧 → enum 字段如何获取最大值

enum 字段如何获取最大值

时间:2011-08-06

来源:互联网

数据库版本 MySQL 5.1

测试表结构
SQL code
DROP TABLE IF EXISTS `t1`;
CREATE TABLE IF NOT EXISTS `t1(
  `id` INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` ENUM('a','b','c') NOT NULL
);


如何知道name字段的最大值呢??
或者
SQL code
INSERT INTO `t1` VALUES(1,5);

这样插入的时候会提示错误,可以让它不提示错误,而是直接返回插入了0条记录吗??

主要是想获取ENUM的所有值,用
SQL code
SHOW FULL COLUMNS FROM `t1` LIKE 'name';

然后后台,如PHP可以使用
SQL code
$arr = explode("','", strsub($db_result->Type, 5, -1);

这样是可以,但...如果ENUM里的可能值是...
SQL code
`name` ENUM('a','\',\'b\',\'','c')

这种比较变态的可能值的话,上面这条PHP命令就失效了(当然还可以用正则表达式的方法来分割字符串)
但我想...如果知道ENUM的最大值的话,是不是可以
先创建一个临时表
SQL code
CREATE TEMPORARY TABLE IF NOT EXISTS `t_tmp` SELECT `name` FROM `t1` WHERE 1<>1;
ALTER TABLE `t_tmp` ADD COLUMN `id` INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY;

然后
SQL code
INSERT INTO `t_tmp`(`name`) VALUES(1),(2)...;

最后
SQL code
SELECT * FROM `t_tmp` WHERE 1=1 ORDER BY `id`;


然后后台就可以直接保存这个数组了...
当然...这样的效率绝对比不上正则表达式来得快,但...因为我不知道ENUM里会转移的字符到底有多少,所以只好用这种笨方法了(但绝对准确)

但关键是如果用上面INSERT INTO TAB VALUES(1),(2)...;的方法,则当有某个值不是ENUM里可能值的话,就会因为错误而导致前面的插入都失效...而如果每次INSERT INTO 一条数据的话...又太影响效率了...
有什么办法可以获取到ENUM字段的最大可能值吗??

作者: ma2jiajia   发布时间: 2011-08-06

ENUM是表定义定死的 业务定死的数据为什么非要计算出来

作者: rucypli   发布时间: 2011-08-06