每一个常量、变量和参数都有数据类型,它用来指定一定的存储格式、约束和有效范围。MySQL提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型。不同的MySQL版本支持的数据类型可能会稍有不同,用户可以通过査询相应版本的帮助文件来获得具体信息。
MySQL支持所有标准SQL中的数值类型,其中包括严格数值类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC ),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE,PRECISION),并在此基础上做了扩展。扩展后増加了 TINYINT、MEDIUMINT和BIGINT这3种长度不同的整型,并增加了 BIT类型,用来存放位数据。其中INT是INTEGER的同名词,DEC是DECIMAL的同名词。
在整数类型中,按照取值范围和存储方式不同,分为 tinyint、smallint、mediumintx int和bigint 这5个类型。
1.int(5)和int(11) 有什么区别?这道题是常常被问到的问题,区别其实很简单,下面我就给出答案。
zerofill就是用“0”填充的意思,也就是在数字位数不够的空间,用字符“0”填满。存储的大小数值并不会受到影响。
所有的整数类型都有一个可选属性UNSIGNED (无符号),如果需要在字段里面保存非负,数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取0,上限取原值的2倍,例如,tinyint有符号范围是-128 - +127,而无符号范围是。0 - 255。如果一个列指定为 zerofiU,则MySQL自动为该列添加UNSIGNED属性。
另外,整廳型还有属性:AUTO_INCREMENT 在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整咐型。AUTO_INCREMENT值一般从1开始,每行増加1。对于任何想要使用AUTOJNCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键。
对于小数的表示,MySQL分为两种方式:浮点数和定点致。浮点数包括 float (单精度) 和 double (双精度) ,而定点数则只有decimal 一种表示。定点数在MySQL内部以字符申形式?存放,比浮点数更精确,适合用来表示货币等精度高的数据。
浮点数和定点数都可以用类型名称后加"("D)”的方式来进行表示,“(亿D)”表示该值一共显示A/位数字(整数位+小数位),其中D位位于小数点后面,A/和D又称为精度和标度。?例如,定义为0081(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在float(7,4)列内插入999.00009,近似结果是999.0001 o值得注意的是,浮点数后面跟的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal?在不指定精度时,默认的整数位为10,默认的小数位为0。
浮点数如果不写精度和标度,则会按照实际精度值显示,?如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报销;定点数如果不写精度和标度,则按照默认值decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错。
整形的三大属性是 zerofill 、unsigned 、AUTO_INCREMENT。
MySQL中提供了多种对字秘臨的存储类型,不同的版本可能有所差异。以5.0版本为例,MySQL 包括了 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET?等多种字符串类型。
Char 和 Varchar,是经常拿出来比较异同点的两个类型,char的特点是在列没有使用完这些空间的时候,也会填充满,但是在检索的效率会优于Varchar,varchar节省空间,效率会偏低一点。
BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串,而不包含非二进制字符串。
枚举和集合类型已经很少使用了,这里就不多做介绍了。
字符串函数是最常用的一种函数,如果读者编写过程序,不妨回过头去看看自己使用过的?函数,可能会惊讶地发现字符串处理的相关函数占已使用过的函数很大一部分。
SELECT
NAME '英雄',
CASE NAME
WHEN '德莱文' THEN
'斧子'
WHEN '德玛西亚-盖伦' THEN
'大宝剑'
WHEN '暗夜猎手-VN' THEN
'弩'
ELSE
'无'
END '装备'
FROM
user_info;
when 表达式中可以使用 and 连接条件
SELECT
NAME '英雄',
age '年龄',
CASE
WHEN age < 18 THEN
'少年'
WHEN age < 30 THEN
'青年'
WHEN age >= 30
AND age < 50 THEN
'中年'
ELSE
'老年'
END '状态'
FROM
user_info;