一、MySQL 基本概念
1. 什么是 MySQL
MySQL是一种关系型数据库管理系
2. 数据库基本结构
二、数据库操作(DDL)
1. 创建数据库
CREATE DATABASE db_name;
2. 查看数据库
SHOW DATABASES;
3. 使用数据库
USE db_name;
4. 删除数据库
DROP DATABASE db_name;
三、表操作(DDL)
1. 创建表
CREATE TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
2. 查看表
SHOW TABLES;
DESC table_name;
3. 修改表
ALTER TABLE table_name ADD column_name INT;
ALTER TABLE table_name MODIFY column_name VARCHAR(100);
ALTER TABLE table_name DROP column_name;
4. 删除表
DROP TABLE table_name;
四、数据操作(DML)
1. 插入数据
INSERT INTO table_name VALUES (1, 'Tom', 20);
INSERT INTO table_name (name, age) VALUES ('Alice', 25);
2. 查询数据(重点)
SELECT * FROM table_name;
SELECT name, age FROM table_name;
条件查询
SELECT * FROM table_name WHERE age > 18;
排序
SELECT * FROM table_name ORDER BY age DESC;
限制条数
SELECT * FROM table_name LIMIT 10;
3. 更新数据
UPDATE table_name SET age = 30 WHERE id = 1;
4. 删除数据
DELETE FROM table_name WHERE id = 1;
五、数据类型
1. 数值类型
- INT(整数)
- BIGINT(大整数)
- FLOAT / DOUBLE(浮点数)
- DECIMAL(精确小数)
2. 字符串类型
- VARCHAR(可变长度)
- CHAR(固定长度)
- TEXT(长文本)
3. 日期类型
- DATE(YYYY-MM-DD)
- DATETIME(YYYY-MM-DD HH:MM:SS)
- TIMESTAMP
六、约束(Constraints)
常见约束
- PRIMARY KEY(主键)
- NOT NULL(非空)
- UNIQUE(唯一)
- DEFAULT(默认值)
- FOREIGN KEY(外键)
示例
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 18
);
七、索引(Index)
1. 什么是索引
- 提高查询效率的数据结构(类似目录)
2. 创建索引
CREATE INDEX idx_name ON table_name(column_name);
3. 分类
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
八、SQL 高级查询
1. 聚合函数
COUNT() SUM() AVG() MAX() MIN()
2. 分组
SELECT age, COUNT(*) FROM table_name GROUP BY age;
3. HAVING
SELECT age, COUNT(*)
FROM table_name
GROUP BY age
HAVING COUNT(*) > 1;
4. JOIN(连接查询)
内连接
SELECT *
FROM A
INNER JOIN B
ON A.id = B.id;
左连接
LEFT JOIN
右连接
RIGHT JOIN
九、事务(Transaction)
1. 什么是事务
一组操作,要么全部成功,要么全部失败
2. 事务特性(ACID)
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
3. 使用事务
START TRANSACTION;
UPDATE ...
COMMIT;
ROLLBACK;
十、存储引擎
常见引擎
- InnoDB(默认)
- MyISAM
InnoDB特点
- 支持事务
- 支持外键
- 行级锁
十一、锁机制
分类
- 行锁
- 表锁
示例
SELECT * FROM table_name FOR UPDATE;
十二、视图(View)
CREATE VIEW view_name AS
SELECT name, age FROM table_name;
十三、存储过程(Stored Procedure)
DELIMITER //
CREATE PROCEDURE proc_name()
BEGIN
SELECT * FROM table_name;
END //
DELIMITER ;
十四、触发器(Trigger)
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
SET NEW.created_at = NOW();
十五、权限管理
GRANT ALL PRIVILEGES ON db.* TO 'user'@'localhost';
REVOKE ALL PRIVILEGES ON db.* FROM 'user'@'localhost';
顺便吐槽一下自己的雷霆课表,我认为并不合理(小声)