MySQL数据类型
MySQL具有丰富的数据类型,在建表和存储过程中都需要指定数据类型
常用的数据类型有:
数值类型
整数类型
MySQL主要提供的整数类型有:tinyint、smallint、mediumint、int、bigint。
create table emp
(
id int(11),
name varchar(25),
deptId int(11),
salary float
)
id字段的数据类型为int(11),注意后面的数字11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。
例如:year int(4),该声明指明,在year字段中的数据一般只显示4位数字的宽度。
显示的宽度和数据类型的取值范围是无关的。显示宽度只是指明MySQL最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入,而且能够显示出来。
例如:向year字段插入一个数值19999,当使用select查询该列的时候,MySQL显示的将是完整的带有5位数字的19999,而不是4位数字的值。
浮点数类型和定点数类型
MySQL中使用浮点数和定点数来表示小数。浮点类型有两种:单精度float和双精度double。定点类型只有一种:decimal。浮点类型和定点类型都可以用(M,N)来表示,其中M表示精度,表示总共的位数;N表示标度,是表示小数的位数。
字符类型
类型 | 描述 |
---|---|
CHAR(M) | 存储固定长度字符串 |
VARCHAR(M) | 存储可变长度字符串 |
ENUM- | 枚举类型- |
SET | 集合类型(集合中最多有64个成员) |
BLOB | 存储二进制大对象 |
TEXT | 存储文本大对象 |
CHAR和VARCHAR类型
CHAR(M)为固定长度字符串,在定义时指定字符串列长。在保存时在右侧填充空格以达到指定的长度。M表示列长度,M的范围是0~255个字符。
VARCHAR(M)是长度可变的字符串,M表示最大列长度。M的范围是0~65535。
BIT类型
BIT(M),位字段类型。M表示每个值的位数,范围为1~64。如果M被省略,默认为1.如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充。例如:为BIT(6)分配一个值b’101,其效果与分配b‘000101相同。
BIT数据类型用来保存位字段值,例如:以二进制的形式保存数据13,13的二进制形式为1101,在这里需要位数至少为4为BIT类型,即可定义列类型为BIT(4)
如何选择数据类型
为了优化存储,提高数据库性能,在任何情况下均应使用最精确的类型
如果不需要小数部分,使用整数类型,否则使用float,double
-如果经常用于计算,精度要求高的用decimal
-如果日期存储范围大时使用datatime
-通常采用varchar类型,如果要提供处理速度,则采用char类型
MySQL运算符
算术运算符
+ | 加法算运法 |
---|---|
- | 减法运算 |
* | 乘法运算 |
/- | 除法算法如果除数为0,返回null- |
% | 求余运算 |
比较运算符
= | 等于 |
---|---|
<=> | 安全的等于(和=一样用来做比较,但可以区分NULL) |
<>(!=) | 不等于(不能和NULL做比较) |
<=- | 小于等于(不能和NULL做比较) |
>= | 大于等于(不能和NULL做比较) |
> | 大于(不能和NULL做比较) |
<- | 小于(不能和NULL做比较) |
IS NULL | 判断一个值是否为NULL |
IS NOT NULL | 判断一个值是否不为NULL |
LEAST | 有2个或多个参数时,返回最小值- |
GREATEST | 有2个或多个参数时,返回最大值 |
BETWEEN AND | 判断一个值是否在两个值之间 |
IN | 判断一个值是IN列中的任意一个值- |
NOT IN | 判断一个值不是IN列中的任意一个值 |
LIKE | 通配符匹配(%、_) |
REGEXP- | 正则表达式匹配(^、$、.、[….]、*) |
逻辑运算符
运算符 | 作用 |
---|---|
NOT或者! | 逻辑非 |
AND或者&& | 逻辑与 |
OR或者 | 逻辑或 |
XOR | 逻辑异或 |
特殊字符
字符 | 作用 |
---|---|
单引号‘ | 字符串用标识,如单独使用需用转义字符\’ |
双引号“ | 如单独使用,需要转义字符\” |
反斜杠|转义字符 | |
\r | 回车符 |
\n | 换行符 |
\tab | 制表符 |
\b | 退格符 |
日期和时间类型
类型 | 描述 |
---|---|
DATETIME | 格式为YYYY-MM-DD HH:MM:SS |
DATE | 格式为YYYY-MM-DD |
TIMESTAMP | 格式为YYYY-MM-DD HH:MM:SS |
TIME | HH:MM:SS |
YEAR | YYYY |
Year
Year类型表示年,可以使用各种格式指定year的值
以4位字符串或者4位数字格式表示year,取值范围’1901’~‘2155’,输入格式为‘YYYY’或者YYYY,例如:输入’2010’或2010
以2位字符串格式表示的year,范围’00‘’99‘。’00‘’69‘和’70‘~’99‘范围的值分别被转换成2000-2069和1970-1999范围的year的值。
以2位数字表示的year,范围199。169和7099范围的值分别被转换为20012069和1970~1999范围的year值。
TIME
TIME类型用在只需要时间信息的值,在插入数据时要注意,因为可以采用非严格语法,支持
HH:MM:SS 10:05:05 10:05:05
HH:MM 23:23 23:23:00
D HH:MM 2 10:10 58:10:00 242+10:10 D代表天
D HH 3 02 74:00:00 243+10 小时部分小于10,前面补0
SS 10 00:00:10
HHMMSS 101112 11:11:12 如果分钟部分大于59,插入的会失败
DATE
**DATE类型用在仅需要日期值时,没有时间部分,在插入遵循 YYYY-MM-DD、 YY-MM-DD、 YYYYMMDD、 YYMMDD都可以,并且允许非严格语法,比如插入98.11.31 98/11/31 98@11@31,任何标点符合都可以做日期、时间的分割符
**
使用current_date或者now(),插入当前系统日期。
DATATIME
**DATATIME类型用在需要同时包括日期和时间信息的值,格式为‘YYYY-MM-DD HH:MM:SS’、‘YYYYMMDDHHMMSS’、 ‘YY-MM-DD HH:MM:SS’、‘YYMMDDHHMMSS’、 YYYYMMDDHHMMSS、 YYMMDDHHMMSS
**
TIMESTAMP
**TIMESTAMP的显示格式与DATETIME相同,但TIMESTAMP的取值范围小于DATETIME的取值范围,为‘1970-01-01 00:00:01’ UTC~‘2038-01-19 03:14:07’ UTC,其中UTC为世界标准时间,在插入数据时,要保证在合法的取值范围内。
**
总结
MySQL数据类型:数值型、字符型、日期时间型
MySQL运算符:算术运算符、比较运算符、逻辑运算符、位运算符