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中即可连接 -
数据模型
-
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 条件列表;
-
条件
(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)权限控制
-
常用权限
-
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
-
授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
-
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
三、函数
1.字符串函数
- 常用
MySQL截取字符串从1开始
2.数值函数
- 常见
3.日期函数
- 常见
4.流程函数
-常见
''不算空
四、约束
-
概述
-
外键约束
-
添加外键
-
CREATE TABLE 表名( 字段名 数据类型, ... [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名) );
ALTER TABLE 表名 ADD_CONTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);
-
-
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-
设置删除/更新行为
ALTER TABLE ADD_CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主键名(主键字段名) ON UPDATE CASCADE ON DELETE CASCADE;
-
五、多表查询
1.多表关系
2.多表查询概述
- 概述
3.内连接
- 查询语法
- 隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件...;
- 显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;
注意:如果为表起了别名,就不能通过原表名来限制字段了
- 隐式内连接
4.外连接
- 查询语法
-
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
相当于查询表1(左表)的所有数据 包含表1和表2交集部分的数据 -
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
相当于查询表2(右表)的所有数据 包含表1和表2交集部分的数据
-
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);
-
标量子查询
-
列子查询
-
行子查询
-
表子查询
8.多表查询案例
六、事务
1.事务简介
2.事务操作
方式1(取消自动提交,手动提交)
-
查看/设置事务提交方式
SELECT @@autocommit;
SET @@autocommit = 0;
-
提交事务
COMMIT;
-
回滚事务
ROLLBACK;
方式2(开启事务)
-
开启事务
START TRANSACTION 或 BEGIN;
-
提交事务
COMMIT;
-
回滚事务
ROLLBACK;
3.事务的四大特性
4.并发事务问题
-
脏读
-
不可重复读
-
幻读
5.事务隔离级别
-
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
-
设置事务的隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITED | READ COMMITED | REPEATABLE READ | SERIALIZABLE]