MySQL
MySQL启动
net start mysql80
net stop mysql80
MySQL客户端连接
MySQL自带的客户端命令行
mysql [-h 172.0.0.1] [-P 3306] -u root -p
SQL
- DDL: 数据定义语言, 用来定义数据库对象(数据库/表/字段)
- DML: 数据操作语言, 用来对数据库表中的数据进行增删改
- DQL: 数据查询语言, 用来查询数据库中表的记录
- DCL: 数据控制语言, 用来创建数据库用户/控制数据库的控制权限
数据定义语言(DDL)
数据库操作
- 查询
查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
- 创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
- 删除
DROP DATABASE [IF EXISTS] 数据库名;
- 使用
USE 数据库名;
表操作
- 查询
查询当前数据库所有表
SHOW TABLE;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
- 创建
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];
- 修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
删除字段
ALTER TABLE 表名 DEOP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
删除表
DROP TABLE [IF EXISTS] 表名;
删除指定表, 并重新创建该表
TRUNCATE TABLE 表名;
数据操作语言(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,....);
- 修改数据
UPDATA 表名 SET 字段1=值1, 字段2=值2,....[WHERE 条件];
- 删除数据
DELETE FROM 表名 [WGERE 条件];
数据查询语言(DQL)
- 基本查询
- 条件查询(WHERE)
- 聚合函数(count, max, min, avg, sum)
- 分组查询(GROUP BY)
- 排序查询(ORDER BY)
- 分页查询(LIMIT)
DQL语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
基本查询
查询多个字段
SELECT 字段1, 字段2, 字段3.... FROM 表名;
SELECT * FROM 表名;
设置别名
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] .... FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
比较运算符 | 功能 |
---|---|
BETWEEN....AND... | 在某个范围之内(含最小、最大值) |
IN(...) | 在in之后的列表中的值, 多选一 |
LIKE 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
IS NULL | 是NULL |
聚合函数
SELECT count(条件) FROM 表名;
SELECT avg(条件) FROM 表名;
SELECT min(条件) FROM 表名;
SELECT max(条件) FROM 表名;
SELECT sum(条件) FROM 表名;
分组查询
SELECT 字段列表 FROM 表名[WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
排序方式
ASC:升序(默认值)
DESC:降序
分页查询
SELECT 字段列表 FROM LIMIT 起始索引, 查询记录数;
注意:
起始索引=(页码-1)*页展示记录数
代码练习
-- 1. 查询年龄为20, 21, 22, 23岁的女性员工信息.
select * from user where age between 20 and 23 and gender='女';
-- 2. 查询性别男, 并且年龄在20-40岁(含)以内的姓名为三个字的员工.
select name from user where gender='男' and age between 20 and 40 and name like '___';
-- 3. 统计员工表中, 年龄小于60岁的, 男性员工和女性员工的人数
select count(age) from user where age<60;
-- 4. 查询所有年龄小于等于35岁员工的姓名和年龄, 并对查询结果按年龄升序排序, 如果年龄相同按入职时间降序排序.
select * from user where age<=35 order by name asc , entry_time desc ;
-- 5. 查询性别为男, 且年龄在20-40岁(含)以内的前5个员工信息, 对查询的结果按年龄升序排序, 年龄相同按入职时间升序排序.
select * from user where age between 20 and 40 and gender='男' order by name asc, entry_time desc limit 0, 5;
QDL执行顺序
- FROM
- WHERE
- GROUP BY
- SELECT
- ORDER BY
- LIMIT