前言:
半夜梦到自己没有写今天的博客,结果惊醒起来看一看。
得,真的没写。QWQ
可谓垂死病中惊坐起了。
看看发博的时间6:16,而不是什么整点的,就知道我4点就起来了,不是定时发布!!!!!
博主这么辛苦,行行好,点赞 + 关注行不行啊
目录
1.MySQL数据类型
1.1 数值型
1.1.1 整型
1.1.1.1 定义
1.1.1.2(无)符号整型数
1.1.1.3 int(11)与int(10)的含义
1.1.2 浮点型
1.1.3 各数值类型的存储范围
1.2 字符串型
1.2.1 定义
1.2.2 CHAR与VARCHAR
1.3 日期时间型
1.4 TIMESTAMP-特殊类型
2 MySQL表创建与操作
2.1 CRASHCOURSE数据库表介绍
2.2 SELECT语句
2.3 数据查询
2.3.1 查询列
2.3.2 避免重复数据
2.4 查询结果排序
2.5 LIMIT的用法
1.MySQL数据类型
MySQL字段表类型
MySQL数据库的表是一个二维表,由一个或多个数据列构成;
每个列都有相应的数据类型,数据类型定义列可以存储的数据种类。例如,如果列中存储的为数字(或许是订单中的物品数),则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、金额等,则应该用恰当的数据类型规定出来;
数据类型(datatype):每个列所容许的数据的类型。每个列都有相应的数据类型,它限制(或容许)该列中存储的数据;
MySQL支持多种数据类型,大致可分为三类:
- 数值类
- 字符串类
- 日期/时间类
1.1 数值型
数值型包括:
- 整型
- 浮点型
1.1.1 整型
1.1.1.1 定义
TINYINT:1字节,非常小的整数,带符号:-128~127,不带符合:0~255;
INT:4字节,标准整型,带符号:-2147483648~2147483647,不带符号:0~4294967295;
其他类型:SMALLINT(2字节)、MEDIUMINT(3字节)、BIGINT(8字节);
1.1.1.2(无)符号整型数
带符号的整型,符号位为0表示正数,符号位为1表示负数,以TINYINT为例:
在创建表的时候,可以通过signed和unsigned来指定某列的数据类型是否带符号;如果没指定数据类型是否带符号,默认是带符号;
1.1.1.3 int(11)与int(10)的含义
括号里的数字表示int类型的显示宽度,并非数据的长度;
比如当某字段为int(11) unsigned zerofill,当存入的数据为1时,会显示成00000000001;
同样地,如果某字段为int(10) unsigned zerofill,当存入的数据为1时,会显示成0000000001。
1.1.2 浮点型
FLOAT:4字节,单精度浮点数;
DOUBLE:8字节,双精度浮点数;
DECIMAL(M,D):M表示整数加小数的总位数,D表示小数位数,比如DECIMAL(4,2);
其中,FLOAT与DOUBLE存储的是近似值,DECIMAL存储的是准确值。
1.1.3 各数值类型的存储范围
1.2 字符串型
1.2.1 定义
字符串可以用来表示任何一种值,所以它是最基本的类型之一;
我们可以用字符串类型来存储图像或声音之类的二进制数据,也可以存储用gzip压缩的数据。
1.2.2 CHAR与VARCHAR
CHAR和VARCHAR是最常用的两种字符串类型,区别是:
CHAR是固定长度的,每个值占用相同的字符数,不够的位数MySQL会在它的右边用空格字符补足。
VARCHAR是一种可变长度的类型,每个值占用其刚好的字符数再加上一个用来记录其长度的字节即L+1个字节。
值 | CHAR(4) | 需要存储 | VARCHAR(4) | 需要存储 |
'' | ' ' | 4字节 | '' | 1个字节 |
'ab' | 'ab ' | 4字节 | 'ab' | 3个字节 |
'abcd' | 'abcd' | 4字节 | 'abcd' | 5个字节 |
如果数据都有相同的长度(比如手机号码),选用VARCHAR会多占用空间,因为有一位用来存储其长度。如果数据长度不一,选用VARCHAR能节省存储空间;
而CHAR不论字符长短都需要占用相同的空间,即使是空值也不例外。
1.3 日期时间型
MySQL总是把日期和日期里的年份放在最前面,按年月日的顺序显示
DATE、TIME、DATETIME类型分别存放日期值、时间值、日期和时间值的组合。格式分别是
- “CCYY-MM-DD”
- “hh:mm:ss”
- “CCYY-MM-DD hh:mm:ss”
1.4 TIMESTAMP-特殊类型
如果某列的数据类型为TIMESTAMP且该列为NOT NULL,当插入数据时不指定该列的值,那么这个列就会自动取值为当前的日期和时间;
在创建和修改数据行时,如果没有明确对TIMESTAMP数据列进行赋值,则它就会自动取值为当前的日期和时间。如果表中有多个TIMESTAMP列,只有第一个会自动取值。
2 MySQL表创建与操作
2.1 CRASHCOURSE数据库表介绍
- customers 客户表,存储客户信息;
- vendors 供应商表,存储供应商基本信息;
- orders 订单表,存储客户订单信息,如订单编号、订单日期、 客户ID;
- orderitems 订单明细表,存储订单明细,如订单编号、明细编号、 产品编号、数量、价格;
- products 产品表,存储产品基本信息,如产品编号、供应商、 价格等;
- productnotes 产品说明表;
2.2 SELECT语句
MySQL使用select语句查询数据;
select语句的作用是从一个或多个表中查询信息;
使用select语句,必须给出至少两条信息:
- 选择什么?
- 从什么地方选择?
注意:SQL语言中,不区分大小写,每一条SQL语句,使用英语分号“;”表示结尾。
2.3 数据查询
2.3.1 查询列
格式:select 列名 from 表名;
说明1:如果在from后面直接使用表名的话,需要先指定使用的是哪个数据库;
说明2:支持列查询:select 列名1,列名2,列名3,… from 表名;
说明3:可用“*”表示查询所有列
2.3.2 避免重复数据
如果查询到的两行内容一样,默认情况下,MySQL是会显示这些重复的行,如果需要相同的行只显示一次,可以使用distinct关键字
格式:select distinct 列名 from 表名;
2.4 查询结果排序
为了明确地排序用select语句查询出的数据,可使用order by语句;
order by语句取一个或多个列的名字,根据这些列进行排序;
格式:
select 列名 from 表名 order by 列名;
select 列名 from 表名 order by 列名1,列名2;
例如:
select * from products order by vend_id,prod_name,prod_price;
//先按vend_id排序,vend_id相同的数据,再根据prod_name去排序,然后再根据prod_price排序。
order by语句默认的是按照升序排列(从A到Z),关键字是ASC;
可以给order by语句指定降序(从Z到A)顺序排列,使用关键字DESC;
说明:DESC关键字只应用到直接位于其前面的列名。
2.5 LIMIT的用法
如果一个表的行非常多,可以使用limit关键字,指定需要返回多少行
格式1:select 列名 from 表名 limit n;
例如:limit 3是指前三行
说明:n是限定的行数
格式2:select 列名 from 表名 limit n,m; //只显示从行号为n的行开始的后面m行
说明:MySQL中的行号是从0开始计算的,limit 2,3是第3行开始往后数3行,也就是第3,4,5行
拓:ORDER BY与LIMIT的组合
使用order by和limit的组合,能够找出一个列中最高或者最低的值;
例1:找出最贵物品的价格
说明:order by子句位于from子句之后,如果使用limit,那么它必须位于order by之后。