MySQL必知必会,我的MySql复习宝典

声明:本篇博客是学习B站韩顺平老师mysql课程的笔记目录数据库基础知识使用命令行窗口连接MySQL数据库数据库三层结构 - 破除MySQL神秘SQL语句SQL语句分类数据库相关操作查看、删除数据库备份恢复数据库创建和删除表MySQL常用数据类型(列类型)定义无符号的bit的使用小数的使用字符串的基本使用日期类型的基本使用创建练习表修改表数据库C(create)R(read)U(update)D(delete)Insert 语句update语句Delete 语句Select 语句使用表达式对查询的列进行计
摘要由CSDN通过智能技术生成

💥声明:本篇博客是学习B站韩顺平老师mysql课程的笔记💥

目录

💛数据库基础知识

使用命令行窗口连接MySQL数据库

登录mysql dos指令: mysql -h 主机名 -P 端口 -u 用户名 -p密码

这里有几个注意的点: 本地主机名就是localhost或者1270.1;端口号默认是3306,且端口的-P为大写,默认用户名为root;-p密码不要有空格,-p后面没有写密码,回车就会要求输入密码。

当然了在登录前你要先启动mysql数据库:
dos命令:net start mysql服务名 / net stop mysql服务名

在命令行窗口登录MySQL(要以管理员身份打开窗口哦):
在这里插入图片描述
登录成功:
在这里插入图片描述

数据库三层结构 - 破除MySQL神秘

  1. 所谓安装MySQL数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)
  2. 一个数据库中可以创建多个表,以保存数据。
  3. 数据库管理系统,数据库和表的关系如图所示:
    在这里插入图片描述

❤️SQL语句

SQL语句分类

DDL:数据定义语句 [create 表,库。。。]
DML:数据操作语句[增加insert, 修改update,删除delete]
DQL:数据查询语句[select]
DCL:数据控制语句

数据库相关操作

使用指令创建数据库

CREATE DATABASE db01;

删除数据库指令

DROP DATABASE db01

创建一个使用 utf8 字符集的 db02 数据库

CREATE DATABASE db02 CHARACTER SET utf8

创建一个使用 utf8 字符集, 并带校对规则的 db03 数据库

CREATE DATABASE db03 CHARACTER SET utf8 COLLATE utf8_bin

校对规则 utf8_bin 区分大小 默认 utf8_general_ci 不区分大小写

查看、删除数据库

查看当前数据库服务器中的所有数据库

SHOW DATABASES

查看前面创建的 db01 数据库的定义信息

SHOW CREATE DATABASE `db01`

在创建数据库,表的时候, 为了规避关键字, 可以使用反引号解决(键盘左上角)

删除前面创建的 db01 数据库

DROP DATABASE db01

备份恢复数据库

在这里插入图片描述
下面练习备份数据库 db03
在这里插入图片描述
可以看到它备份到指定路径了在这里插入图片描述
然后我们可以删掉db03
在这里插入图片描述

命令行恢复数据库db03
在这里插入图片描述

在这里插入图片描述
可以看到db03恢复了
在这里插入图片描述

创建和删除表

在这里插入图片描述
删除的话就比较简单了

DROP TABLE table_name;

MySQL常用数据类型(列类型)

在这里插入图片描述
使用规范:在能够满足需求的情况下,尽量选择占用空间小的。

定义无符号的

在这里插入图片描述

bit的使用

在这里插入图片描述

小数的使用

在这里插入图片描述
DECIMAL用法再讲:
在这里插入图片描述

字符串的基本使用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

日期类型的基本使用

在这里插入图片描述

创建练习表

在这里插入图片描述

#创建表的课堂练习
-- 字段属性
-- Id 整形
-- name 字符型
-- sex 字符型
-- brithday 日期型(date)
-- entry_date 日期型 (date)
-- job 字符型
-- Salary 小数型
-- resume 文本型
-- 自己一定要练习一把
CREATE TABLE `emp` (
id INT,
`name` VARCHAR(32),
sex CHAR(1),
brithday DATE,
entry_date DATETIME,
job VARCHAR(32),
salary DOUBLE,
`resume` TEXT) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
-- 添加一条
INSERT INTO `emp`
VALUES(100, '小妖怪', '男', '2000-11-11',
'2010-11-10 11:11:11', '巡山的', 3000, '大王叫我来巡山');
SELECT * FROM `emp`;

修改表

在这里插入图片描述
补充:修改数据库字符集:alter database 数据库名 character set 字符集;
在这里插入图片描述

#修改表的操作练习
-- 员工表 emp 的上增加一个 image 列, varchar 类型(要求在 resume 后面)。
ALTER TABLE emp
ADD image VARCHAR(32) NOT NULL DEFAULT ''
AFTER RESUME
DESC employee -- 显示表结构, 可以查看表的所有列
-- 修改 job 列, 使其长度为 60。
ALTER TABLE emp
MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
-- 删除 sex 列。
ALTER TABLE emp
DROP sex
-- 表名改为 employee。
RENAME TABLE emp TO employee
-- 修改表的字符集为 utf8
ALTER TABLE employee CHARACTER SET utf8
-- 列名 name 修改为 user_name
ALTER TABLE employee
CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ''

数据库C(create)R(read)U(update)D(delete)

在这里插入图片描述

Insert 语句

在这里插入图片描述
Insert语句注意细节

#说明 insert 语句的细节
-- 1.插入的数据应与字段的数据类型相同。
-- 比如 把 'abc' 添加到 int 类型会错误
INSERT INTO `goods` (id, goods_name, price)
VALUES('韩顺平', '小米手机', 2000);
-- 2. 数据的长度应在列的规定范围内, 例如: 不能将一个长度为 80 的字符串加入到长度为 40 的列中。韩顺平循序渐进学 Java 零基础978INSERT INTO `goods` (id, goods_name, price)
VALUES(40, 'vovo 手机 vovo 手机 vovo 手机 vovo 手机 vovo 手机', 3000);
-- 3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO `goods` (id, goods_name, price) -- 不对
VALUES('vovo 手机',40, 2000);
-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO `goods` (id, goods_name, price)
VALUES(40, vovo 手机, 3000); -- 错误的 vovo 手机 应该 'vovo 手机'
-- 5. 列可以插入空值[前提是该字段允许为空], insert into table value(null)
INSERT INTO `goods` (id, goods_name, price)
VALUES(40, 'vovo 手机', NULL);
-- 6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
INSERT INTO `goods` (id, goods_name, price)
VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);
-- 7. 如果是给表中的所有字段添加数据, 可以不写前面的字段名称
INSERT INTO `goods`
VALUES(70, 'IBM 手机', 5000);
-- 8. 默认值的使用, 当不给某个字段值时, 如果有默认值就会添加默认值, 否则报错
-- 如果某个列 没有指定 not null ,那么当添加数据时, 没有给定值, 则会默认给 null
-- 如果我们希望指定某个列的默认值, 可以在创建表时指定
INSERT INTO `goods` (id, goods_name)
VALUES(80, '格力手机');
SELECT * FROM goods;
INSERT INTO `goods2` (id, goods_name)
VALUES(10, '顺平手机');
SELECT * FROM goods2;

update语句

在这里插入图片描述
演示 update 语句

1. 将所有员工薪水修改为 5000 元。 [如果没有带 where 条件, 会修改所有的记录, 因此要小心]
UPDATE employee SET salary = 5000
2. 将姓名为 小妖怪 的员工薪水修改为 3000 元。
UPDATE employee
SET salary = 3000
WHERE user_name = '小妖怪'
3. 将 老妖怪 的薪水在原有基础上增加 1000INSERT INTO employee
VALUES(200, '老妖怪', '1990-11-11', '2000-11-11 10:10:10', '捶背的', 5000, '给大王捶背', 'd:\\a.jpg');
UPDATE employee
SET salary = salary + 1000
WHERE user_name = '老妖怪'
-- 可以修改多个列的值
UPDATE employee
SET salary = salary + 1000 , job = '出主意的'
WHERE user_name = '老妖怪'

使用细节:
在这里插入图片描述
补充:有时候使用update语句会报错,You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
解决方法是SET SQL_SAFE_UPDATES = 0;

Delete 语句

在这里插入图片描述
delete语句演示:

-- 删除表中名称为’老妖怪’的记录。
DELETE FROM employee
WHERE user_name = '老妖怪';
-- 删除表中所有记录, 老师提醒, 一定要小心
DELETE FROM employee;
-- Delete 语句不能删除某一列的值(可使用 update 设为 null 或者 '')
UPDATE employee SET job = '' WHERE user_name = '老妖怪';
SELECT * FROM employee
-- 要删除这个表
DROP TABLE employee;

使用细节:
在这里插入图片描述

Select 语句

在这里插入图片描述
在这里插入图片描述

创建测试表学生表 :

CREATE TABLE student(
id INT NOT NULL DEFAULT 1,
NAME VARCHAR(20) NOT NULL DEFAULT '',
chinese FLOAT NOT NULL DEFAULT 0.0,
english FLOAT NOT NULL DEFAULT 0.0,
math FLOAT NOT NULL DEFAULT 0.0
);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'韩顺平',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);
SELECT * FROM student;

针对上表练习:
在这里插入图片描述

-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student;
-- 过滤表中重复数据 distinct 。
SELECT DISTINCT english FROM student;
-- 要查询的记录, 每个字段都相同, 才会去重
SELECT DISTINCT `name`, english FROM student;
使用表达式对查询的列进行计算:

在这里插入图片描述
在select语句中可使用as语句
在这里插入图片描述
练习:
在这里插入图片描述

-- 统计每个学生的总分
SELECT `name`, (chinese+english+math) FROM student;
-- 在所有学生总分加 10 分的情况
SELECT `name`, (chinese + english + math + 10) FROM student;
-- 使用别名表示学生分数。
SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score
FROM student;

在where子句中经常使用的运算符
在这里插入图片描述

使用 where 子句, 进行过滤查询

在这里插入图片描述
在这里插入图片描述

-- 查询姓名为赵云的学生成绩
SELECT * FROM student
WHERE `name` = '赵云'
-- 查询英语成绩大于 90 分的同学
SELECT * FROM student
WHERE english > 90
-- 查询总分大于 200 分的所有同学
SELECT * FROM student
WHERE (chinese + english + math) > 200
-- 查询 math 大于 60 并且(and) id 大于 4 的学生成绩
SELECT * FROM student
WHERE math >60 AND id > 4
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM student
WHERE english > chinese
-- 查询总分大于 200 分 并且 数学成绩小于语文成绩,的姓赵的学生.
-- 赵% 表示 名字以韩开头的就可以
SELECT * FROM student
WHERE (chinese + english + math) > 200 AND
math < chinese AND `name` LIKE '赵%'
-- 查询英语分数在 80-90 之间的同学。
SELECT * FROM student
WHERE english >= 80 AND english <= 90;
SELECT * FROM student
WHERE english BETWEEN 80 AND 90; -- between .. and .. 是 闭区间
-- 查询数学分数为 89,90,91 的同学。
SELECT * FROM student
WHERE math = 89 OR math = 90 OR math = 91;
SELECT * FROM student
WHERE math IN (89, 90, 91);
-- 查询所有姓李的学生成绩。
SELECT * FROM student
WHERE `name` LIKE '韩%'
使用order by 子句排序查询结果

在这里插入图片描述
在这里插入图片描述

-- 对数学成绩排序后输出【升序】 。
SELECT * FROM student
ORDER BY math;
-- 对总分按从高到低的顺序输出 [降序] -- 使用别名排序
SELECT `name` , (chinese + english + math) AS total_score FROM student
ORDER BY total_score DESC;
-- 对姓韩的学生成绩[总分]排序输出(升序) where + order by
SELECT `name`, (chinese + english + math) AS total_score FROM student
WHERE `name` LIKE '韩%'
ORDER BY total_score
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有裂痕的石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值