MySQL学习记录:数据类型
mysql数据类型
- 数值数据类型 整数型tinyint、smallint、mediumint、int、bigint
浮点小数 float、double
定点小数 decimal
- 日期、时间类型:包括year、time、date、datetime、timestamp
- 字符串类型:包括cahr、varchar、binary、varbinary、blob、text、enum、set等
字符串类型又分为文本字符和二进制字符
整数类型:
.在创建表时,使用了这样的语句: <字段名> int(11)
这里的11是字段的显示宽度,不会影响数据存储。各种类型的取值范围就是2^n,如smallint是2^16。
浮点型和定点型:
浮点型和定点型都可以用(m,n)来表示,m是精度表示总共的位数 ,n是标度表示小数的位数。
decimal数据类型是以串存放的。默认精度(10,0)。
书上没有细说定点型和浮点型的区别,百度了一下也云里雾里(主要是定点型),在学习过程中慢慢理解吧。
日期与时间类型:
year:一个单字节类型用于表示年。
输入方式:1.用4位字符串或者4位数字,如 ’2020’和2020。
- 两位字符串,00~99,’00’-’69’表示本世纪,’70’-’99’表示上一世纪。(经实践数字也行,但是0和‘0’不一样)
time:取值范围在-838:59:59~838:59:59是因为time类型不仅用于表示一天的时间,还可以表示两个事件的时间间隔。
输入方式:1.‘D HH:MM:SS’格式的字符串等。
2. HHMMSS格式的字符串。
注意:1中的格式D会被*24加到HH中去。1122和‘11:22’代表的时间不同。
另外,纯数值的格式2,如果分秒超出59,是不合法的,不会被插入。
和前面删除无关联表时不同,那时报Error会将其他无错部分执行。
但是插入列数据时不行,一条语句如果有一部分是错的,则都不会执行。
date:
输入格式:
datetime:
timestamp:
显示格式和输入方式和datetime相同。
但是datestamp只接受世界标准时间,即 小时不能超过23,分秒不能超过59。
另外,他会记录存储时和查询时的时区,就是说你在东八区存入一个时间,在东九区查询时,会将存储时间转换为当前时区对应的时间。
创建字符串类型的关键字时,()内的数值不再是最大显示宽度,而是上限。
文本字符串类型:
char和varchar:char为固定长,varcahr为变长。
text:保留非二进制字符串,如文章、评论等。包括tinytext,mediumtext,longtext
enum:创建时,后面要跟枚举值。
set:也要有枚举值,但是set这列的值仅要求由枚举值组成,最多可以有64个成员,用逗号隔开,并且如果有重复值则会自动删去。
二进制字符串类型:
mysql中的二进制数据类型有:bit,binary,varbinary,tinyblob,blob,mediumblob,longblob。
bit:位字段类型,m范围为1-64,如果m被省略则默认为1。
binary和varbinary:类似于char和varchar,不同的是它们包含二进制字符串。
blob:二进制大对象
如何选择数据类型?
整数和浮点数:就看你是否需要小数部分了。double相比float存储精度较高。
浮点数和定点数:在长度一定的情况下,浮点数能表示更大的数据范围,但是浮点数易产生误差,因此如果要求高存储精度,选择用decimal。比如,货币。
日期与时间:看自己需求。
char和varchar:插入式固定长度,因此处理速度比varchar快,但是浪费存储空间。所以对存储不打,但在速度上有要求的可以使用char类型,繁殖可以使用varchar。
另外存储引擎对char和varchar也有影响。对于myisam来说char更好,innodb则选择varchar更好。
enum和set:enum只能曲单值,但是范围较大,允许有65535成员;set允许有多成员,但是范围是64个成员。
blob和text:两者均可存放大容量信息,blob主要存储图片、音频等信息,text只能存储文本文件。
常见运算符:
算术运算符:
运算符 |
作用 |
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
% |
求余 |
比较运算符:
运算符 |
作用 |
= |
等于 |
<=> |
安全的等于 |
<= |
小于等于 |
>= |
大于等于 |
> |
大于 |
is null |
判断一个值是否为空 |
is not null |
判断一个值是否‘不为空 |
least |
当有两个或多个参数是,返回最小值 |
greatest |
当有两个或多个参数时,返回最小值 |
between..and.. |
判断一个值是否落在两个值中间 |
isnull |
和is null一样 |
in |
判断一个值是否在in后边的列表里 |
not in |
判断一个值是否不在in后边的列表里 |
like |
通配符匹配 |
regexp |
正则表达式匹配 |
逻辑运算符:
运算符 |
作用 |
not 或者 ! |
非 |
and 或者 && |
与 |
or 或者 || |
或 |
xor |
异或 |
位运算符:
运算符 |
作用 |
| |
位或 |
& |
位与 |
^ |
位异或 |
<< |
位左移 |
>> |
位右移 |
~ |
位取反,反转所有比特 |
运算符的优先级:
mission accomplished