MySQL数据库入门(四)数据类型简介

在MySQL中数据类型有以下五种:

数字

类型大小有符号无符号 unsigned约束用途
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 字节float(255,30)(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
DOUBLE8 字节double(255,30)(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2double(65,30)依赖于M和D的值依赖于M和D的值小数值

整数:
常用的有2种,一是int型,int型最多可以表示10位数字(无符号的4开头,有符号的2开头;二是tinyint unsigned,用来表示年龄(值范围是0-255)。

小数:
注意float(m,n)表示法中的m表示数字总共有m位,n表示小数有n位,那么整数部分只能有m-n位。
float默认保留5位小数、double默认保留16位小数、decimal默认是10位数字不含小数(它的最大范围是65位数字,其中小数可以保留30位)。

时间

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时系统会将其更正为"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型大小范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD年月日
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时分秒
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS年月日时分秒
TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

时间类型可以增加限定属性:

not null 非空

default current_timestamp 默认时间为当前时间

on update current_timestamp 更新数据时自动更新当前时间

date:用来记录各种日期,如出生日期、入职日期等关注日期而不关注时间的等信息。

time:用来记录时间安排(课程表、日程表)的信息、时长的等信息。

datetime:用户登录时间等

字符串

类型大小用途
CHAR0-255字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65535字节二进制形式的长文本数据
TEXT0-65535字节长文本数据
MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215字节中等长度文本数据
LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295字节极大文本数据

以上类型中char和varchar类型用得最多。

char类型为定长字符型,长度固定为声明的长度,范围是0-255字符数(注意不是字节数!使用utf8编码中文会占3个字节,也就是说255个中文字符实际上会占用765字节)。存储时数据长度不够声明的长度时末尾会被填充空格,取值时会舍弃末尾的空格部分,数据超过声明长度的部分会被舍弃。适合使用char类型的如身份证号、手机号、qq号、用户名、密码、银行卡号等。

varchar类型为不定长字符型,长度不固定但最长不能超过声明的长度,范围是0-65535字符数。存储时数据长度不够声明的长度时不会填充空格,数据最后会附加2个字节的长度信息,数据超过声明长度的部分会被舍弃。适合使用varchar类型的如评论、朋友圈、微博等。

char类型优点是检索速度快,缺点是浪费存储空间;varchar类型优点是节省存储空间,缺点是检索速度慢。
由于现在存储空间不再是瓶颈,所以在强调检索速度的场景优先使用char,只有在不确定字符串长度又不强调检索速度的场景才使用varchar。

enum单选

案例:

在下面的sql语句中创建了test表,它的gender字段约束了数据只能是’male’或’female’。

create table test(id int,name char(18),gender enum('male','female'));

如果该字段输其它内容会报错并导致整条数据不能存入数据库。如下面这条语句就会报错且数据不会保存到数据库。

insert into test values(1,'mike','不详');

只有输入正确的选项数据才能存入数据库。

insert into test values(1,'mike','male');

set多选

案例:

在下面的sql语句中创建了test表,它的hobby字段约束了数据只能从列表中选择’。

create table test(id int,name char(18),hobby set('抽烟','喝酒','烫头','洗脚'));

如果该字段输其它内容会报错并导致整条数据不能存入数据库。如下面这条语句就会报错且数据不会保存到数据库。

insert into test values (1,'mike','烫头,喝酒,抽烟,按摩’);

只有输入正确的选项数据才能存入数据库。

insert into test values (1,'mike','烫头,喝酒,抽烟');

注意上述多选中整个选项作为一个字符串且选项之间用英文逗号隔开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值