day36-MySQL基本SQL语句(下)MySQL基本SQL语句(下)
⼀、扩展常见的数据类型
1、回顾数据表的创建语法
基本语法:
mysql> create table 数据表名称(
字段名称1 字段类型字段约束,
字段名称2 字段类型字段约束,
...
primary key(主键字段 => 不能为空、必须唯⼀)
) engine=innodb default charset=utf8;
经验之谈:⼀般情况下,我们在设计数据表时,必须拥有⼀个id主键字段,⾮空、⾃动编号、主键约束。
在创建数据表时,必须明确指定字段的名称以及字段的类型,那到底MySQL中的SQL语句⽀持哪些字段类型呢?答:参考下图
2、数值类型
☆整数类型(整数、精准)
应⽤场景:⼈的年龄、考试成绩等等相关的信息都可以使⽤整数类型进⾏存储,那整数类型有这么多形式,我应该选择哪⼀个呢?
答:整数类型的选择主要取决于数值的范围。
⽐如存储中国⼈的⼈⼝信息,可以⽤INT类型也可以⽤BIGINT类型,但是在数据库设计原则中,不是越⼤越好,⽽是正好满⾜条件即可。
案例:设计⼀个数据表如tb_student学⽣表(id、username、age、mobile)
mysql> use 数据库名称;
mysql> create table tb_student(
id mediumint unsigned not null auto_increment,
username varchar(20),
age tinyint unsigned,
mobile char(11),
primary key(id)
) engine=innodb default charset=utf8;
☆⼩数类型(浮点类型、定点类型)
①浮点类型(近似值)
FLOAT和DOUBLE
FLOAT和DOUBLE类型代表近似数字数据值。MySQL对于单精度值使⽤四个字节,对于双精度值使⽤⼋个字节。 FLOAT单精度浮点数精确到约7位⼩数,DOUBLE双精度浮点数精确到⼤约15位⼩数 。FLOAT类型会随着数值的增⼤精度会减⼩。
举例说明
varchar2最大长度FLOAT(M,D),其中,M表⽰存储的有效位数,D代表⼩数点后⾯的位数;即整数位数+⼩数部分不能超过M值。
colum1 FLOAT(7,4)
上⾯例⼦中,如果你插⼊为999.00009到cloum1列,那么mysql在存储时会四舍五⼊变为999.0001插⼊。
DOUBLE(7,4) :DOUBLE类型的使⽤与FLOAT类型完全⼀致,唯⼀的区别就是占⽤字节不同且浮点数的精度有所不同。
②定点类型(精确值)
DECIMAL和NUMERIC
DECIMAL和NUMERIC 类型的存储精确的数值数据。使⽤这些类型时,重要的是要保留精确的精度,例如使⽤货币数据。在MySQL中, NUMERIC被作为DECIMAL来应⽤,所以下⾯的举例DECIMAL同样适⽤于 NUMERIC 。
举例说明
salary DECIMAL(5,2)
在上⾯的例⼦中,薪⽔字段的类型为decimal,表⽰精确的数字。其中,5代表精度,2代表刻度。
精度表⽰数值存储的有效位数,刻度表⽰⼩数点后⾯可存储的位数。
DECIMAL(5,2)能够存储五位数和两位⼩数的任何值,因此可以存储在salary 列中的值的范围-999.99是 999.99
特殊注意:
DECIMAL(M)和DECIMAL(M,0)是相等的,存储长度取决于M的值,默认情况下M值为10.刻度为0表⽰没有⼩数。
案例:定义⼀个职员表tb_staff,定义字段(id、username、salary、addtime)
mysql> use db_itheima;
mysql> create table tb_staff(
id smallint unsigned not null auto_increment,
username varchar(20),
salary decimal(11,2),
addtime date,
primary key(id)
) engine=innodb default charset=utf8;
3、字符串类型
☆ CHAR类型
CHAR类型的字符串为定长.长度范围是0到255之间的任何值.占⽤定长的存储空间,不⾜的部分⽤空格填充;读取时删掉后⾯的空格。password char(32)
mobile char(11)
存储空间
CHAR(M)类型的存储空间和字符集有关系,⼀个中⽂在utf8字符集中占⽤3个bytes、gbk占⽤2个bytes、数字和字符统⼀⽤⼀个字符表⽰。
存储机制
在不够M长度时,MySQL在存储数据时,需要填充特殊的空格.
举例说明
字段名称 CHAR(M),M表⽰字符数
应⽤场景:加密后的密码 => char(32),⼿机号码mobile(11),⾝份证号码等等
案例:创建⼀个tb_admin数据表,定义字段(id、username、password)
mysql> use db_itheima;
mysql> create table tb_admin(
id tinyint unsigned not null auto_increment,
username varchar(10),
password char(32),
primary key(id)
) engine=innodb default charset=utf8;
☆ VARCHAR类型
VARCHAR是变长存储,仅使⽤必要的存储空间.
name varchar(10)
存储空间
VARCHAR(M)类型的存储空间和字符集有关系,⼀个中⽂在utf8字符集中占⽤3个bytes、gbk统⼀占⽤2个bytes、数字和字符⼀个字符表⽰。
存储机制
VARCHAR(M)字段存储实际是从第⼆个字节开始存储,然后⽤1到2个字节表⽰实际长度,剩下的才是可以存储数据的范围,因此最⼤可⽤存储范围是65535-3=65532字节;
第⼀个字节标识是否为空.(长度⼩于255字节,使⽤⼀个字节来表⽰长度;⼤于255字节使⽤两个字节来表⽰长度)。
应⽤场景:主要适合存储长度不固定的字符串信息,如⽤户名称、产品标题、新闻标题、新闻描述(不超过255个字符)
案例:创建⼀个tb_news数据表,定义字段(id、title、description、addtime)
mysql> use db_itheima;
mysql> create table tb_news(
id int not null auto_increment,
title varchar(80),
description varchar(255),
addtime date,
primary key(id)
) engine=innodb default charset=utf8;
☆ TEXT类型
TEXT代表⽂本类型的数据,当我们使⽤VARCHAR类型存储数据时(早期最⼤只能存储255个字符,MySQL5版本中,其gbk可以存储3万多个字符,utf8格式可以存储2万多个字符),如超过了VARCHAR的最⼤存储范围,则可以考虑使⽤TEXT⽂本类型。
经验之谈:255个字符以内(包括),定长就使⽤CHAR类型,变长就使⽤VARCHAR类型,如果超过255个字符,则使⽤TEXT⽂本类型。
应⽤场景:⽂本内容、产品的详细介绍等等
案例:创建⼀个tb_goods产品表,定义字段(id、name、price、content)
mysql> use db_itheima;
mysql> create table tb_goods(
id int not null auto_increment,
name varchar(80),
price decimal(11,2),
content text,
primary key(id)
) engine=innodb default charset=utf8;
☆其他类型
BLOB:保存⼆进制的⼤型数据(字节串),没有字符集,eg:图⽚、⾳频视频等。
实际运维⼯作中,很少将⽂件直接保存在数据库端,⼀般⽂件的存储都是基于路径进⾏操作的。
ENUM枚举类型:多选⼀,从给定的多个选项中选择⼀个,如gender enum(‘男’,‘⼥’,‘保密’)
SET集合类型:多选多,从给定的多个选项中选个多个,如hobby set(‘吃饭’,‘睡觉’,‘打⾖⾖’)
4、⽇期时间类型
经验之谈:时间类型的选择⽐较简单,主要看你需要的时间格式,是年⽉⽇、⼩时分钟秒等等。
###㈠ DATE类型(年-⽉-⽇)
The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.
###㈡ DATETIME(年⽉⽇⼩时分钟秒)
The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and dis
plays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.
DATETIME范围相对于TIMESTAMP范围更⼴,'1000-01-01 00:00:00' to '9999-12-31 23:59:59'
###㈢ TIMESTAMP(年⽉⽇⼩时分钟秒)
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
TIMESTAMP选项如果不插⼊时间,则MySQL会⾃动调⽤系统时间写⼊数据
注意:
Invalid DATE, DATETIME, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00' or '0000-00-00 00:00:00').
⽆效的⽇期,⽇期时间等会被替换成‘0000-00-00’或‘0000-00-00 00:00:00’
###㈣ TIME(⼩时:分钟:秒)
MySQL retrieves and displays TIME values in 'HH:MM:SS' format (or 'HHH:MM:SS' format for large hours values).TIME values may range from '-838:59:59' to '838:59:59'.
**说明:**⼩时部分可以是这么⼤,因为可以使⽤TIME类型不仅代表⼀个时间(必须⼩于24⼩时),⽽且可以表⽰运⾏时间或两个事件之间的时间间隔(可能⼤于24⼩时,甚⾄负数)。
注意:
TIME这⼀列如果存储缩写,需要注意mysql的解释⽅式。⽆效的时间值会被转换成’00:00:00’ 。
'11:12' means '11:12:00', not '00:11:12'.
'12' and 12 are interpreted as '00:00:12'.
###㈤ YEAR
YEAR(4) and YEAR(2) differ in display format, but have the same range of values.
For 4-digit format, MySQL displays YEAR values in YYYY format, with a range of 1901 to 2155, or 0000.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论