MySQL数据库-基础篇
一、MySQL概述
-
cmd中输入
services.msc可进入到系统服务中 -
启动服务
net start mysql80 -
停止服务
net stop mysql80 -
客户端连接
mysql [-h 127.0.0.1] [-p 3306] -u root -p password
[]中内容可省略,默认连接本机3306端口,前提是配置了环境变量,cmd中即可连接 -
数据模型
![image]()
-
MySQL为关系型数据库
非关系型数据库一般指NoSQL。 NoSQL,泛指非关系型的数据库。
二、SQL
1.SQL通用语法

2.SQL分类

3.DDL(定义)
(1)数据库操作
- 查询
- 查询所有数据库
SHOW DATABASES; - 查询当前数据库
SELECT DATABASE();
- 查询所有数据库
- 创建
CREAT DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; - 删除
DROP DATABASE [IF EXISTS] 数据库名; - 使用
USE 数据库名;
(2)表操作
-
查询
- 查询当前数据库的所有表
SHOW TABLES; - 查询表结构
DESC 表名;显示表 - 查询指定表的建表语句
SHOW CREATE TABLE 表名;显示表的详细信息
- 查询当前数据库的所有表
-
创建
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
)[COMMENT 表注释];
-
修改
- 添加字段
ALTER TRABLE 表名 ADD 字段名 类型(长度) [comment 注释] [约束]; - 修改字段
- 修改数据类型
ALTER TABLE 表名 MODFIY 字段名 新数据类型(长度); - 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
- 修改数据类型
- 删除字段
ALTER TABLE 表名 DROP 字段名; - 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
- 添加字段
-
删除
- 删除表
DROP TABLE [IF EXIST] 表名; - 删除指定表,并重新创建该表
TRUNCATE TABLE 表名;
- 删除表
(3)数据类型



4.DML(增删改)
-
添加数据
- 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2,...) VALUES (值1, 值2, ...); - 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...); - 批量添加数据
INSERT INTO 表名 (字段名1, 字段名2,...) VALUES (值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
- 给指定字段添加数据
-
修改数据
UPDATE 表名 SET 字段名1 = 值1, 字段值2 = 值2, ... [WHERE 条件]; -
删除数据
DELETE FROM 表名 [WHERE 条件];
delete不能删除某个字段的值,可以使用update
5.DQL(查询)
(1)语法(编写顺序)

执行顺序

(2)基本查询
-
查询多个字段
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名; -
设置别名
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名;
as可以省略 -
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
(3)条件查询
-
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表; -
条件
![image]()
(4)聚合函数

- 语法
SELECT 聚合函数(字段列表) FROM 表名;
null值不参与聚合函数计算
(5)分组查询
- 语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
where和having的区别
执行时机不同:where是分组之前过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
判断条件不同,where不能对聚合函数进行判断,而having可以
(6)排序查询
- 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
ASC 升序(可以省略,默认值) DESC 降序
(7)分页查询
- 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
6.DCL(控制)
管理数据库用户、控制数据库的访问权限
(1)管理用户
-
查询用户
USE mysql;
SELECT * FROM user; -
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
主机名可以使用%通配 -
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'; -
删除用户
DROP USER '用户名'@'主机名';
(2)权限控制
-
常用权限
![image]()
-
查询权限
SHOW GRANTS FOR '用户名'@'主机名'; -
授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; -
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
三、函数
1.字符串函数
- 常用
![image]()
MySQL截取字符串从1开始
2.数值函数
- 常见
![image]()
3.日期函数
- 常见
![image]()
4.流程函数
-常见

''不算空
四、约束
-
概述
![image]()
-
外键约束
![image]()
-
添加外键
-
CREATE TABLE 表名( 字段名 数据类型, ... [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名) ); ALTER TABLE 表名 ADD_CONTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);
-
-
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; -
设置删除/更新行为
![image]()
ALTER TABLE ADD_CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主键名(主键字段名) ON UPDATE CASCADE ON DELETE CASCADE;
-
五、多表查询
1.多表关系




2.多表查询概述
- 概述
![image]()
![image]()
3.内连接
- 查询语法
- 隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件...; - 显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;
![image]()
注意:如果为表起了别名,就不能通过原表名来限制字段了
- 隐式内连接
4.外连接
- 查询语法
-
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
相当于查询表1(左表)的所有数据 包含表1和表2交集部分的数据 -
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
相当于查询表2(右表)的所有数据 包含表1和表2交集部分的数据
![image]()
-
5.自连接
- 语法
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
自连接查询可以是内连接查询,也可以是外连接查询
6. 联合查询
- 语法
SELECT 字段列表 FROM 表A ...
UNION [All]
SELECT 字段列表 FROM 表B ...;

7.子查询
SELECT * FROM t1 WHERE cloumu1 = (SELECT column1 FROM t2);

-
标量子查询
![image]()
-
列子查询
![image]()
-
行子查询
![image]()
-
表子查询
![image]()
8.多表查询案例

六、事务
1.事务简介

2.事务操作
方式1(取消自动提交,手动提交)
-
查看/设置事务提交方式
SELECT @@autocommit;
SET @@autocommit = 0; -
提交事务
COMMIT; -
回滚事务
ROLLBACK;
方式2(开启事务)
-
开启事务
START TRANSACTION 或 BEGIN; -
提交事务
COMMIT; -
回滚事务
ROLLBACK;
3.事务的四大特性

4.并发事务问题

-
脏读
![image]()
-
不可重复读
![image]()
-
幻读
![image]()
5.事务隔离级别

-
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION; -
设置事务的隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITED | READ COMMITED | REPEATABLE READ | SERIALIZABLE]




















