一、MySQL 概述
1.1 核心概念
- 数据库 (DB):存储数据的结构化仓库
- 数据库管理系统 (DBMS):操作数据库的软件(如 MySQL、Oracle)
- SQL:操作关系型数据库的标准语言
1.2 安装与配置
- 下载地址:MySQL Installer
- 安装步骤:
- 选择 "Developer Default" 安装类型
- 设置 root 用户密码
- 配置 Windows 服务(默认名称:MySQL80)
- 环境变量配置:将
C:\Program Files\MySQL\MySQL Server 8.0\bin
添加到 Path
1.3 连接方式
- 命令行工具:
mysql -u root -p
- 图形化工具:推荐使用 DataGrip
二、SQL 基础语法
2.1 通用规则
- 语句以分号结尾
- 不区分大小写(建议关键字大写)
- 注释:
--
单行,/* */
多行
2.2 分类
类型 | 功能 | 关键字 |
---|
DDL | 定义数据库对象 | CREATE/DROP/ALTER |
DML | 操作数据 | INSERT/UPDATE/DELETE |
DQL | 查询数据 | SELECT |
DCL | 控制权限 | GRANT/REVOKE |
三、DDL 操作
3.1 数据库操作
-- 创建数据库(指定字符集)
CREATE DATABASE db_name DEFAULT CHARSET utf8mb4;
-- 删除数据库
DROP DATABASE IF EXISTS db_name;
-- 切换数据库
USE db_name;
3.2 表操作
3.2.1 数据类型
类型 | 示例 | 说明 |
---|
整数 | TINYINT(1) | 0-255(无符号) |
字符串 | VARCHAR(50) | 可变长度字符串 |
日期 | DATE | YYYY-MM-DD |
3.2.2 表结构操作
-- 创建表
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age TINYINT UNSIGNED
);
-- 修改表(添加字段)
ALTER TABLE user ADD COLUMN email VARCHAR(100);
-- 删除表
DROP TABLE IF EXISTS user;
四、DML 操作
4.1 数据插入
-- 插入单条记录
INSERT INTO user (name, age) VALUES ('张三', 20);
-- 批量插入
INSERT INTO user (name, age)
VALUES ('李四', 25), ('王五', 30);
4.2 数据更新
-- 更新单条记录
UPDATE user SET age = 26 WHERE id = 1;
-- 更新多条记录
UPDATE user SET age = age + 1 WHERE age < 30;
4.3 数据删除
-- 删除单条记录
DELETE FROM user WHERE id = 1;
-- 删除所有记录(保留表结构)
TRUNCATE TABLE user;
五、DQL 查询
5.1 基础查询
-- 查询所有字段
SELECT * FROM user;
-- 查询指定字段并去重
SELECT DISTINCT age FROM user;
-- 字段别名
SELECT name AS 姓名, age AS 年龄 FROM user;
5.2 条件查询
-- 范围查询
SELECT * FROM user WHERE age BETWEEN 20 AND 30;
-- 模糊查询
SELECT * FROM user WHERE name LIKE '张%';
-- 空值处理
SELECT * FROM user WHERE email IS NULL;
5.3 聚合函数
函数 | 功能 |
---|
COUNT() | 统计数量 |
AVG() | 平均值 |
MAX() | 最大值 |
SUM() | 求和 |
-- 统计总人数
SELECT COUNT(*) AS 总人数 FROM user;
-- 计算平均年龄
SELECT AVG(age) AS 平均年龄 FROM user;
5.4 分组与排序
-- 按性别分组统计人数
SELECT gender, COUNT(*) FROM user GROUP BY gender;
-- 按年龄降序排序
SELECT * FROM user ORDER BY age DESC;
5.5 分页查询
-- 每页10条,显示第2页
SELECT * FROM user LIMIT 10 OFFSET 10;
六、约束
6.1 类型
约束 | 关键字 | 说明 |
---|
主键 | PRIMARY KEY | 唯一标识,非空 |
外键 | FOREIGN KEY | 关联其他表主键 |
唯一 | UNIQUE | 字段值唯一 |
非空 | NOT NULL | 字段值不能为空 |
6.2 外键示例
-- 创建部门表
CREATE TABLE dept (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- 创建员工表(外键关联)
CREATE TABLE emp (
id INT PRIMARY KEY,
name VARCHAR(50),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES dept(id)
);
七、多表查询
7.1 连接类型
类型 | 说明 |
---|
内连接 | 只返回匹配的数据 |
左外连接 | 返回左表所有数据 |
右外连接 | 返回右表所有数据 |
全外连接 | 返回所有数据(MySQL 不支持) |
7.2 示例
-- 内连接查询员工及其部门
SELECT e.name, d.name
FROM emp e
JOIN dept d ON e.dept_id = d.id;
-- 左外连接查询所有员工
SELECT e.name, d.name
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.id;
八、事务
8.1 基本操作
-- 开启事务
START TRANSACTION;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
8.2 隔离级别
级别 | 脏读 | 不可重复读 | 幻读 |
---|
READ UNCOMMITTED | 是 | 是 | 是 |
READ COMMITTED | 否 | 是 | 是 |
REPEATABLE READ | 否 | 否 | 是 |
SERIALIZABLE | 否 | 否 | 否 |
九、函数
9.1 常用函数
类型 | 函数 | 示例 |
---|
字符串 | CONCAT(a,b) | CONCAT('Hello', 'MySQL') → 'HelloMySQL' |
日期 | CURDATE() | 获取当前日期 |
流程控制 | IF(condition, t, f) | IF (age>18, ' 成年 ', ' 未成年 ') |
十、权限管理
10.1 用户管理
-- 创建用户
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
-- 修改密码
ALTER USER 'user'@'localhost' IDENTIFIED BY 'new_password';
-- 删除用户
DROP USER 'user'@'localhost';
10.2 权限控制
-- 授予权限
GRANT SELECT, INSERT ON db.* TO 'user'@'localhost';
-- 撤销权限
REVOKE INSERT ON db.* FROM 'user'@'localhost';