目录
一、前言
二、备份数据库
三、备份数据库中的表
四、恢复数据库
1. 方式一
2. 方式二
五、创建表
六、Mysql常用数据类型
1. 整型
2. bit(位类型)
3. 小数类型
4. 字符串类型
5. 日期类型
七、修改表
1. 添加列
2. 修改列
3. 删除列
4. 修改列名
5. 修改表的字符集
6. 修改表名
八、数据库的CRUD
1. 插入(insert语句)
2. 修改表中数据(update语句)
3. 删除表中数据(delect语句)
4. select语句
4.1 查询去重(distinct)
4.2 起别名(as)
4.3 过滤语句(where)
4.4 排序(order by)
九、函数
1. 统计函数
1.1 合计函数(count)
1.2 合计函数(sum)
1.3 合计函数(avg)
1.4 合计函数(max/min)
2. 数据分组(group by)
3. 字符串函数
4. 数字函数
5. 日期函数
6. 加密和系统函数
十、总结
一、前言
我们在学习
Mysql
相关内容之前,我们应该拥有相应的工作环境。下面讲解使用的是Mysql8.0
,Mysql可视化工具使用的是SQlyog
。如果小伙伴们还没有工作环境
,可以先去下载相应的软件。
这里我推荐B站视频
👉MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!👈有关的Mysql8.0
的内容在P7
。
不是打广告啊!!!!
二、备份数据库
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
- 此命令要在
DOS命令行
执行。>
后面的文件名.sql前面要加上备份到哪个磁盘。💡补充知识点:
Mysql数据库的安装目录下的bin目录中有一个mysqldump.exe
程序
三、备份数据库中的表
mysqldump -u 用户名 -p 密码 数据库 表1 表2 > 文件名.sql
>
后面的文件名.sql前面要加上备份到哪个磁盘。- 和备份数据库的命令差不多,但必须注意
不能写"-B"
,若写上,则会被系统认为你的表名也是数据库名。
四、恢复数据库
1. 方式一
方式一:
Source 文件名.sql
文件名.sql
前面同样也需要写清除备份文件的磁盘地址。- 该命令需要在
DOS命令行
下进入Mysql数据库之后进行。
2. 方式二
- 打开备份的
.sql文件
,复制里面的内容。 - 将复制的内容粘贴到
SQLyog
中的查询框,执行即可恢复(以SQLyog为例
)。
五、创建表
CREATE TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
...
) character set 字符集 collate 校对规则 engine 引擎
👆上面为完整的创建表的sql指令。括号后边的也
可以省略
。
- 若省略括号后边的指令,则它们就会根据当前对应数据库的有关值进行设定。
🚫注意:
为了区分关键字
和用户定义的字段
必须使用反引号
(Tab键上边),而不是单引号
。
六、Mysql常用数据类型
1. 整型
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
(带符号的/无符号的) | (带符号的/无符号的) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
- 如果没有写
unsigned
,则此类型就是有符号
的- 如果写
unsigned
,则此类型就是无符号
的
2. bit(位类型)
BIT(M)
- 以
二进制
方式存储。例如:存入的数字是3,则查询到的数字是’11’。位字段类型
。M表示每个值的位数
,范围为从1到64。如果M被省略
, 默认为1
例如:bit(8)。则说明可以存储0~255大小的数字。
3. 小数类型
类型 | 字节 |
---|---|
FLOAT | 单精度,4个字节 |
DOUBLE | 双精度,8个字节 |
DECIMAL(M,D) | 大小不确定 |
同样的不加
unsigned
默认为有符号类型,反之亦然。
💡关于DECIMAL
的说明:
M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10。
4. 字符串类型
类型 | 大小 |
---|---|
CHAR(size) | 固定长度字符串,最大255字符 |
VARCHAR(size) | 可变长度字符串,最大65532字节 |
注意:size是字符数
💡字符和字节的说明:
- 不同的
字符集
,字符对应的字节
不同。(utf8字符集,3个字节表示一个字符;gbk字符集,2个字节表示一个字符)utf8字符集
最大是21844个字符。其中有得留有1~3个字节用于记录大小。gbk字符集
最大是32766个字符。其中有得留有1~3个字节用于记录大小。
📌知识点补充
-
字节转字符计算方法❓
utf8:(字节数-3)/ 3
gbk: (字节数-3) / 2 -
固定长度与可变长度❓
固定长度
:说的是他需要的空间就是根据size分配的。若size是4,则就占用4个字符的大小,不管实际的字符是否为4。
可变长度
:不管给定的size是多大(保证字符长度够用的情况下),他会根据实际字符的大小来分配空间。(需要注意的是VARCHAR
本身还需要占用1~3个字节来记录存放内容长度
)。 -
char和varchar的如何选用❓
长度确定使用char
。长度不定使用varchar
。查询速度
:char > varchar
5. 日期类型
类型 | 格式 |
---|---|
DATE | 年月日(YYYY-MM-DD) |
TIME | 时分秒(HH-mm-ss) |
DATETIME | 年月日,时分秒(YYYY-MM-DD HH-mm-ss) |
TIMESTAMP | 时间戳 |
NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
添加此字段,则表示当TIMESTAMP类型的数据为空或者更新的时候,都已当前的时间对其进行填充。
七、修改表
1. 添加列
ALTER TABLE 表名
ADD 列名 数据类型;
-- 如果要在特定的列之后添加,需要添加 'AFTER 列名'
-- 示例
ALTER TABLE 表名字
ADD 列名 数据类型 AFTER 列名;
2. 修改列
ALTER TABLE 表名
MODIFy 列名 数据类型;
3. 删除列
ALTER TABLE 表名
DROP 列名;
4. 修改列名
ALTEr TABLE 表名
CHANGE 原列名 新列名 数据类型;
5. 修改表的字符集
ALTER TABLE 表名 CHARACTER SET 字符集;
6. 修改表名
RENAME TABLE 原表名 TO 新表名;
八、数据库的CRUD
1. 插入(insert语句)
INSERT INTO 表名(列名1,列名,...)
VALUES(值1,值2,...);
-- 其中值和表名对应
💡注意:
- 插入的数据应该与字段(列)的
数据类型相同
。
特例:当字段类型是INT类型,添加的类型是字符串类型的时候,倘若是'30'
Mysql会将字符串类型的30进行转换。但如果添加的是'abc'
的时候,就会报错。- 数据的长度应在字段(列)的
规定范围之内
。(在说字符串的时候提到过)- 在
VALUES
中列出的数据位置必须与被加入的列的排列位置相对应。字符
和日期类型
数据应包含在单引号中。- 列可以插入
空值
(前提:该字段允许为空)。此处的空指的是NULL
。`INSERT INTO 表名(列名1,...) VALUES( ),( ),( ),...
此形式可以添加多条记录。👇
-- 示例;
INSERT INTO goods(id,`name`,price)
VALUES(30,'one',3000),(40,'two',3000),(30,'three',3000);
如果是给表中的所有字段添加数据,可以不写前面的字段名称。👇
-- 上面示例中的列名可以全部去掉
INSERT INTO goods
VALUES(30,'four',3000);
在字段(列)有默认值的前提下,当不给该字段值时,表中就会添加默认值;无默认值的时候,用NULL填充;如果没有默认值并且该字段不允许出现空(NULL)时,不添加就会报错。👇
-- 允许值为空
INSERT INTO goods(id,`name`)
VALUES(30,'five');
-- 结果:
-- id name price
-- 30 five NULL
-- 不允许值为空(在字段类型后面添加 NOT NULL)
INSERT INTO goods_01(id,`name`)
VALUES(30,'one');
-- 结果:报错
2. 修改表中数据(update语句)
UPDATE 表名
SET 列名 = 值,列名 = 值,...
WHERE 筛选条件
如果不加
WHERE
语句的话,就会将所有行中该字段对应的值都改为新值。❌慎重
3. 删除表中数据(delect语句)
DELETE FROM 表名
WHERE 筛选条件;
💡注意:
- 如果不加
WHERE
,就会删除表中所有的数据。- 使用
DELECT
删除的是记录,不会删除表本身。(使用DROP TABLE 表名
就可以删除整个表)- 使用
DELECT
语句删除不能删除整个一列的数据。但可以使用UPDATE
语句,将整列修改为空(’ ')。
4. select语句
4.1 查询去重(distinct)
SELECT DISTINCT 列名1,列名2,...
FROM 表名
SELECT
后面添加DISTINCT
关键字,可以去除查询结果中的重复行。(要所有列的值都相同才会去除)
4.2 起别名(as)
-- 方式一:使用AS关键字
SELECT DISTINCT 列名 AS 别名
FROM 表名
-- 方式二:使用空格
SELECT DISTINCT 列名 别名
FROM 表名
4.3 过滤语句(where)
SELECT 列名1, 列名2,...
FROM 表名
WHERE 过滤条件
📌WHERE中常用的过滤条件
分类 | 运算符 | 作用 |
---|---|---|
比较运算符 | > < <= >= = <> != | 大于 、小于、大于(小于)等于、不等于 |
BETWEEN … AND… | 显示在某一区间内的值(闭区间) | |
IN(值1,值1,…) | 显示在IN列表中的值。(和数学中的集合差不多) | |
LIKE | 模糊查询 | |
IS NULL | 判断是否为空 | |
逻辑运算符 | AND | 多个条件同时成立 |
OR | 多个条件任一成立 | |
NOT | 不成立 |
WHERE
后面的过滤条件中不能出现别名
。
4.4 排序(order by)
-- 升序:ASC(默认)
-- 降序:DESC
SELECT 列名1, 列名2,...
FROM 表名
WHERE 过滤条件
ORDER BY 条件 DESC/ASC;
💡注意:
ORDER BY
必须放在声明语句的最后(在无LIMIT
的情况下)- 当不写升序(ASC)或者降序(DESC)的时候,默认为
升序
。ORDER BY
语句指定的排序的列可以用别名
。
九、函数
1. 统计函数
1.1 合计函数(count)
-- 统计行数
-- 情况一
SELECT COUNT(列名)
FROM 表名
-- 情况二
SELECT COUNT(*)
FROM 表名
COUNT(列名)
和COUNT(*)的区别
:
COUNT(*)
:返回满足条件的记录的行数。COUNT(列名)
:返回满足条件的记录的行数。但是会排除为NULL的情况。
1.2 合计函数(sum)
-- 求和(数只求和)
SELECT SUM(列名1),SUM(列名2),...
FROM 表名
SUM
对数值起作用,用在其他类型上面无意义。- 对多列求和,
,
不能少。
1.3 合计函数(avg)
-- 求平均值
SELECT avg(列名1),avg(列名2),...
FROM 表名
1.4 合计函数(max/min)
-- 求最大值
SELECT MAX(列名),...
FROM 表名
-- 求最小值
SELECT MIn(列名),..
FROM 表名
2. 数据分组(group by)
GROUP BY
就是将列名相同的分为一组,进而对数据进行处理。
-- 分组
SELECT 列名,...
FROM 表名
GROUP BY 列名,...;
-- 对分组之后的数据过滤
SELECT 列名,...
FROM 表名
GROUP BY 列名,...
HAVING 过滤条件;
分组之后的数据不能用
WHERE
语句,只能用HAVING
语句进行过滤。
3. 字符串函数
函数 | 说明 |
---|---|
CHARSET(str) | 返回字符串字符集 |
CONCAT(string2,…) | 连接字符串 |
INSTR(string,substring) | 返回substring在string中出现的位置,没有返回0 |
UCASE(string2) | 转换成大写 |
LCASE(string2) | 转换成小写 |
LEFT(string2,length) | 从string2中的左边起取length个字符 |
LENGTH(string) | 返回string的长度(按照字节) |
REPLACE(str,search_str,replace_str) | 在str中用replace_str替换search_str |
STRCMP(string1,string2) | 逐字符比较两字符串的大小 |
SUBSTRING(str,position,length) | 从str的position开始(从1开始计算),取length个字符 |
LTRIM(string2) RTEIM(string2) TRIM(string2) | 去string2的(前端/后端/两端)的空格 |
4. 数字函数
函数 | 说明 |
---|---|
ABS(num) | 取num的绝对值 |
BIN(decimal_number) | 十进制转二进制 |
CEILING(number2) | 向上取整,得到比num2大的最小整数 |
CONV(number2,from_base,to_base) | 进制转换 |
FLOOR(number2) | 向下取整,得到比number2小的最大整数 |
FORMAT(number,decimal_places) | 保留decimal_places位的小数(四舍五入) |
HEX(DecimalNumber) | 转十六进制 |
LEAST(number,number2,…) | 球最小值 |
MOD(numberator,denominator) | 求余 |
RAND(seed) | 生成随机数(范围:0<= v <=1.0);如果加上参数,会产生一个不变的随机数 |
📌上述部分函数使用示例:
-- CONV()
SELECT CONV(13,16,10) -- 解释:将16进制的数字13转换为十进制。
FROM DUAL; -- 结果:19
-- FORMAT()
SELECT FORMAT(12.4556,2) -- 解释:将12.4556保留两位小数
FROM DUAL; -- 结果:12.46
5. 日期函数
函数 | 说明 |
---|---|
CURRENT_DATE() | 当前时间 |
CURRENT_TIME() | 当前时间 |
CURRENT_TIMESTAMP() | 当前时间戳 |
DATE(datetime) | 返回datetime的日期部分 |
DATE_ADD(date2,INTERVAL d_value d-type) | 在date2中加上日期或时间 |
DATE_SUB(date2,INTERVAL d_value d-type) | 在date2上减去一个时间 |
DATEDIFF(date1,date2) | 两个日期差(结果是天。并且是date1-date2,所以有可能为负数) |
TIMEDIFF(deta1,date2) | 两个时间差(多少时分秒) |
NOW() | 当前时间 |
YEAR|MONTH|DATE(datetime) | 转换为年月日(截取日期中的年月日) |
UNIX_TIMESTAMP() | 返回1970-1-1到现在的秒数 |
FROM_UNIXTIME() | 将整数转换为日期(datetime) |
部分日期函数示例:
-- FROM_UNIXTIME
SELECT FROM_UNIXTIME(1647770742,'%Y-%m-%d %H:%i:%s')
FROM DUAL;
-- DATE_ADD(date2,INTERVAL d_value d-type)
SELECT DATE_ADD(NOW(),INTERVAL 10 HOUR) -- 解释:d_value是数值,d-type是单位(单位可以是年月日,时分秒)
FROM DUAL;
- DATE()、DATE_ADD()、DATE_SUB()、DATEDIFF(),这四个日期函数的日期类型可以是date,datetime,timestamp。
6. 加密和系统函数
函数 | 说明 |
---|---|
USER() | 查询用户 |
DATABASE() | 数据库名称 |
MD5(str) | 为字符串算出一个MD5 32字节的字符串,(用户密码)加密 |
PASSWORD(str) | 从原文密码srt计算并返回密码字符串,通常用于对mysql数据库的用户密码加密 |
十、总结
由于内容较多,我们将
Mysql-SQL语句的使用
分为了两节。下一张我们接着继续讲解相关内容🎇。
最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏