MySQL-常见的数据类型和运算符
⽬录
⽂章⽬录
第⼀部分:MySQL 数据类型
概述
在MySQL数据库中,每⼀条数据都有数据类型,MySQL⽀持的数据类型主要分成3类:数值类型、字符串(字符)类型、⽇期和时间类型。数据类型描述使⽤以下约定:
⽰例:FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
M 表⽰整数类型的最⼤显⽰宽度,对于浮点型和定点型M是存储的总位数,对于字符串类型M表⽰最⼤长度。允许的最⼤M值取决于数据类型。
D 适⽤于浮点和定点类型,并指⽰⼩数点后⾯的位数。最⼤可能值为30,但不应⼤于 M-2。[ ] 表⽰类型定义的可选部分。
⼀、约束条件
约束条件就是给字段加约束,使该字段存储的值更加符合我们的预期。常⽤的约束如下:
UNSIGNED :⽆符号,值从0开始,⽆负数。
ZEROFILL:零填充,当数据的显⽰长度不够的时候可以使⽤前补0填充⾄指定长度,字段会⾃动添加UNSIGNED。NOT NULL:⾮空约束,表⽰该字段的值不能为空。
DEFAULT:表⽰如果插⼊数据时没有给该字段赋值,那么就使⽤默认值。
PRIMARY KEY:主键约束,表⽰唯⼀标识,不能为空,且⼀个表只能有⼀个主键。⼀般都是⽤来约束id。AUTO_INCREMENT:⾃增,只能⽤于数值列,⽽且配合索引使⽤,默认起始值从1开始,每次增长1。UNIQUE KEY:唯⼀值,表⽰该字段下的值不能重复,null除外。⽐如⾝份证号⼀般都会⽤这个进⾏约束。FOREIGN KEY:外键约束,⽬的是为了保证数据的完成性和唯⼀性,以及实现⼀对⼀或⼀对多关系。
⼆、数值类型
数字类型总体可分为整型、浮点型和定点型三类。
mysql创建表数据类型1.整型
数据类型
取值范围单位
说明
TINYINT 有符号值:-2~2-1⽆符号值:0~2-11byte 最⼩的整数
BIT 0/1(false/ture)
1bit ⼆进制的⼀位
778
BOOL
有符号值:-2
~2-1⽆符号值:0~2-11byte
实际上是TINYINT 插⼊false/true会存储为0/1
SMALLINT 有符号值:-2~2-1⽆符号值:0~2-12byte ⼩型整数
MEDIUMINT 有符号值:-2~2-1⽆符号值:0~2-13byte 中型整数
INT 有符号值:-2~2-1⽆符号值:0~2-14byte 标准整数
BIGINT 有符号值:-2~2-1⽆符号值:0~2-1
8byte ⼤型整数
数据类型取值范围单位
说明创建格式:
1. TINYINT[(M)] [UNSIGNED] [ZEROFILL];
2. BOOL[(M)] [UNSIGNED] [ZEROFILL];
3. SMALLINT[(M)] [UNSIGNED] [ZEROFILL];
4. MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL];
5. INT[(M)] [UNSIGNED] [ZEROFILL];
6. BIGINT[(M)] [UNSIGNED] [ZEROFILL]。
下⾯⽰例分析⼀下
[外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传(img-Ul67YU6L-1628318150490)(images/数值类型分析.png)]
2.浮点型
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
单精度浮点数。允许值是-3.402823466E+38 到-1.175494351E-38, 0以及1.175494351E-38 到3.402823466E+38,M是总位数,D是⼩数点后⾯的位数。
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
双精度浮点数。允许值是 -1.7976931348623157E+308到-2.2250738585072014E-308,0以及2.2250
738585072014E-308到 1.7976931348623157E+308。M是总位数,D是⼩数点后⾯的位数。
3.定点型
DECIMAL[(M,D)] [UNSINED] [ZEROFILL]
存储精确的数值。它的范围的可变的,⼩数点和(负数) -符号不计⼊ M,M的范围是1到65。D范围为0到30,且D不得⼤于M。它可⾃定义长度,⽐如定义⼀个叫amount的列存储6为数值,⼩数点后2位:
--范围-9999.99~9999.99amount DECIMAL (6,2)
**当D不写默认为0,M写默认为10,如DECIMAL(M)等价于DECIMAL(M,0),如DECIMAL等价于DECIMAL(10,0)。**它经常配合ZEROFILL表⽰货币。DECIMAL也存在存储时精度丢失的问题。
超出范围和溢出处理
当MySQL将值存储在超出列数据类型允许范围的数值列中时,结果取决于当时⽣效的SQL模式:
778151516232324313132636364
1. 严格的SQL模式:MySQL会根据SQL标准拒绝带有错误的超出范围的值,并且插⼊失败。
2. 未启⽤限制模式:MySQL会将值截断到列数据类型范围的相应端点,并存储结果值,并产⽣⼀个警告在我们的配置⽂件中可以看到SQL模式的配置,关于SQL模式详情请看(全英⽂,看不懂看不懂)。在创建数据表时,能选⼩的数据类型尽量选择⼩的数据类型,节省内存的同时还能提⾼查询效率。
三、字符串类型
字符串类型分为3类:普通的⽂本字符串类型(CHAR和VARCHAR)、可变类型(TEXT和BLOB)和特殊类型(SET和ENUM)。
1.普通⽂本字符串类型
[national] CHAR[(M)] [binary|ASCII|unicode](0~255byte)
M表⽰字符数和字节数,取值范围0~255,存储时始终⽤空格填充指定长度,M不写默认为1。其中national关键字指定使⽤的默认字符集,binary指定是否区分⼤⼩写(默认区分),ASCII和unicode指定使⽤字符集。[national] VARCHAR[(M)] [binary](0~65535byte)
可变长度的字符串,M表⽰字符最⼤长度和字节数,范围是0~65535,存储时实际占⽤**L+1(L<=M,L为实际长度)**个字节。
2.可变类型
类型最⼤长度(字节数)
说明TINYBLOB 2-1⼩BLOB字段TINYTEXT 2-1⼩TEXT字段BLOB 2-1常规的BLOB字段TEXT 2-1常规的TEXT字段MEDIUMBLOB 2-1中型的BLOB字段MEDIUTEXT 2-1中型的TEXT字段LONGBLOB 2-1长型的BLOB字段LONGTEXT
2-1
长型的TEXT字段
BLOB类型⽤于存储⼆进制⽂件,图⽚、⾳频、视频等。。
3.特殊类型SET 和ENUM
类型
最⼤值说明
ENUM(‘value1’,‘vaule2’,…)65535字符串对象,该对象可以是选取范围内的⼀个值或NULL SET(‘value
1’,‘value2’,…)
64
字符串对象,该对象可以是选取范围内的多个值或NULL
下⾯对于ENUM和SET类型演⽰⼀下使⽤⽅式:
88161624243232
ENUM
--1.创建数据库enum_db
create table enum_db(
id int(4)not null primary key auto_increment,
gender ENUM('男','⼥','x')
)auto_increment=1;
-
-2.插⼊在范围内的数据
insert into enum_db(gender)values('男');
insert into enum_db(gender)values('x');
insert into enum_db(gender)values('⼥');
--3.查询表的数据
mysql>select*from enum_db;
+----+--------+
| id | gender |
+----+--------+
|1|男|
|2| x |
|3|⼥|
+----+--------+
3rows in set(0.00 sec)
SET
--1.创建数据库enum_set
create table set_db(
id int(4)not null primary key auto_increment,
options SET('钱','车','房','头发')
)auto_increment=1;
--2.插⼊数据
insert into set_db(options)values('钱,车');
insert into set_db(options)values('钱,房');
insert into set_db(options)values('钱,车,房,头发');
--3.查询数据表
mysql>select*from set_db;
+----+--------------------+
| id | options |
+----+--------------------+
|1|钱,车|
|2|钱,房|
|3|钱,车,房,头发|
+----+--------------------+
3rows in set(0.00 sec)
看到这⾥,就再拿出来⼀点私货物。在创建表时,使⽤字符串类型时应遵循以下原则:
1. 速度优先,使⽤CHAR。
2. 节省空间,使⽤VARCHAR。
3. 将列中的内容限制在⼀定范围内选择⼀种,使⽤ENUM。
4. 将列中的内容限制在⼀定范围内选择多种,使⽤SET。
5. 要搜索的内容不区分⼤⼩写,使⽤TEXT。
6. 要搜索的内容区分⼤⼩写,使⽤BLOB。
四、⽇期时间类型
1. TIME :范围是 -838:59:59 到838:59:59,⽇期格式D HH:mm:SS。D表⽰天。
2. DATE :⽀持的范围是 1000-01-01到 9999-12-31,⽇期格式YYYY-MM-DD。
3. DATETIME :⽇期和时间组合,⽀持范围是 1000-01-01 00:00:00到 9999-12-31 23:59:59。⽇期格式YYYY-MM-DD HH:mm:SS。
4. TIMESTAMP :时间戳,范围是1970-01-01 00:00:00UTC到2037年某个时间。格式YYYY-MM-DD HH:mm:SS。
5. YEAR :范围是 1901~2155。格式YYYY。
下⾯就展⽰⼀些⽰例:
TIME
TIME的范围是 -838:59:59 到838:59:59,所以TIME不仅仅可以表⽰⼀天中的时,还可以表⽰两个时间间隔。
--⽰例
--1.键表
create table time_db(
id int(4)not null primary key auto_increment,
mytime TIME
)auto_increment=1;
--2.插⼊数据
--2.1正常时间插⼊
insert into time_db(mytime)values('21:08:06');
--2.2带天数的时间插⼊ -2*24-21 = -69h
insert into time_db(mytime)values('-2 21:08:06');
--2.3有⼀个冒号默认从⼩时开始算起
insert into time_db(mytime)values('22:08');
--2.4没有冒号没有天数从秒开始算
insert into time_db(mytime)values('30');
--2.5有天数,没有冒号,从⼩时开始算
insert into time_db(mytime)values('2 10');
--2.6直接使⽤数值代替也可
insert into time_db(mytime)values(210806);
--3.查看数据
mysql>select*from time_db;
+----+-----------+
| id | mytime |
+----+-----------+
|1|21:08:06|
|2|-69:08:06|-- (-2*24-21=-69)
|3|22:08:00|
|4|00:00:30|
|5|58:00:00|
|6|21:08:06|
+----+-----------+
6rows in set(0.00 sec)
DATE
格式YYYY-MM-DD
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论