MySQL 5第二次学科练习

2013-05-07_134149

 

这是第二次ㄚ琪自我练习的结果,测试50题,答对41题得82分,错9题扣9分,总计得分73分,呼,这次终于可以勉强过关了,我们可能还需要加强学习跟练习才行,不过工作达人的MySQL不够强,那还真是汗颜啊。

第一题错的还是以前错的,在MySQL BIT_LENGTH,ㄚ琪已经很努力的学了一次,还是错,明明知道是byte但是就是会忘记要转成bit。

第二题也是错以前的,在在SQL叙述中使用COLLATE,明明就只有ORDER BY、GROUP BY、AS、聚合函式、DISTINCT、WHERE跟HAVING有关系,怎么INSERT跟UPDATE就是没关系,却是记不起来,但是现在反倒是会想,为什么会没有关系啊?

[adsense][/adsense]

第三题

2013-05-07_141002

 

这是MySQL 5实力养成暨评量里的4-59.‘当建立ENUM资料栏位时,最多可指定多少个列举值?’

答案:(D)65535

这种题目真的是麻烦了,很多就是要背了,应该没什么好法子可以了解了。

手册可以参考MySQL 5.7 Reference Manual :: 11 Data Types :: 11.4 String Types :: 11.4.4 The ENUM Type

或简体手册

MySQL 5.1参考手册 :: 11. 列类型::11.4. String类型::11.4.4. ENUM类型

ㄚ琪转成繁体列于下:

ENUM是一个字符物件,其值来自表创建时在列规定中显示枚举的一列值。

在某些情况 ​​下,ENUM值也可以为空字串( ” )NULL

·         如果你将一个非法值插入ENUM (也就是说,允许的值列之外的字串),将插入空字串以作为特殊错误值。该字串与“普通”空字串不同,该字串有数值0后面有详细讨论。

·         如果将ENUM列声明为允许NULLNULL值则为该列的一个有效值,并且预设值为NULL如果ENUM列被声明为NOT NULL,其预设值为允许的值列的第1个元素。

每个枚举值有一个索引:

·         来自列规定的允许的值列中的值1开始编号

·         空字串错误值的索引值是0这说明你可以使用下面的SELECT语句来找出分配了非法ENUM值的行:

·                 mysql> SELECT * FROM tbl_name WHERE enum_col =0;

·          NULL值的索引是NULL

例如,定义为ENUM的列(‘one’ ‘two’‘three’)可以有下面所示任何值。还显示了每个值的索引:

索引
NULL NULL
0
‘one’ 1
‘two’ 2
‘three’ 3

枚举最多可以有65,535个元素

当创建表时,ENUM成员值的尾部空格将自动被删除。

当检索时,保存在ENUM列的值使用列定义中所使用的大小写来显示。请注意可以为ENUM列分配字符集和校对规则。对于二进制或大小写敏感的校对规则,当为列分配值时应考虑大小写。

如果在数值上下文中检索一个ENUM值,将返回列值的索引。例如,你可以这样从ENUM列搜索数值:

mysql> SELECT enum_col +0 FROM tbl_name ;

如果将一个数字保存到ENUM列,数字被视为索引,并且保存的值是该索引对应的枚举成员。(但是,这不适合LOAD DATA,它将所有输入视为字符串)不建议使用类似数字的枚举值来定义一个ENUM列,因为这很容易引起混淆。例如,下面的列含有字符串值‘0’ ‘1’‘2’的枚举成员,但数值索引值为23

numbers ENUM('0','1','2')

根据枚举成员在列定义中列出的顺序对ENUM值进行排序。(换句话说,ENUM值根据索引编号进行排序)例如,对于ENUM(‘a’ ‘b’)‘a’排在‘b’前面,但对于ENUM(‘b’ ‘a’)‘b’排在‘a’前面。空字串排在非空字串前面,并且NULL值排在所有其它枚举值前面。要想防止意想不到的结果,按字母顺序规定ENUM列。还可以使用GROUP BY CAST(col AS CHAR)GROUP BY CONCAT(col)来确保按照词汇对列进行排序而不是用索引数字。

如果你想要确定一个ENUM列的所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE enum_col,并解析输出中第2列的ENUM定义。

Comments are closed.