MySQL运维常用语法速查

MySQL运维常用语法速查

以下是 MySQL 常用语法总结,涵盖数据操作、表管理、查询优化等核心内容,便于快速查阅:


一、数据库操作

1
2
3
4
5
6
7
8
9
-- 创建数据库
CREATE DATABASE dbname;
CREATE DATABASE IF NOT EXISTS dbname CHARACTER SET utf8mb4;

-- 切换数据库
USE dbname;

-- 删除数据库
DROP DATABASE dbname;

二、表操作

1. 创建表

1
2
3
4
5
6
7
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT DEFAULT 18,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

2. 修改表

1
2
3
4
5
6
7
8
9
10
11
-- 添加列
ALTER TABLE users ADD COLUMN phone VARCHAR(15) AFTER email;

-- 修改列
ALTER TABLE users MODIFY COLUMN age TINYINT UNSIGNED;

-- 删除列
ALTER TABLE users DROP COLUMN phone;

-- 重命名表
RENAME TABLE users TO members;

3. 删除表

1
DROP TABLE IF EXISTS users;

三、数据操作 (CRUD)

1. 插入数据

1
2
3
4
5
6
7
-- 插入单行
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

-- 插入多行
INSERT INTO users (name, email) VALUES
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');

2. 查询数据

1
2
3
4
5
6
7
8
-- 基础查询
SELECT * FROM users WHERE age > 20 ORDER BY created_at DESC;

-- 去重查询
SELECT DISTINCT name FROM users;

-- 分页查询 (LIMIT offset, count)
SELECT * FROM users LIMIT 10 OFFSET 20; -- 第3页,每页10条

3. 更新数据

1
UPDATE users SET age = 25 WHERE id = 1;

4. 删除数据

1
DELETE FROM users WHERE id = 100;

四、高级查询

1. 聚合函数

1
2
3
4
5
SELECT 
COUNT(*) AS total_users,
AVG(age) AS avg_age,
MAX(created_at) AS latest
FROM users;

2. 分组查询

1
2
3
SELECT age, COUNT(*) AS count 
FROM users
GROUP BY age HAVING count > 5;

3. 连接查询

1
2
3
4
5
6
7
8
9
-- 内连接
SELECT u.name, o.order_id
FROM users u
JOIN orders o ON u.id = o.user_id;

-- 左连接
SELECT u.name, o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

4. 子查询

1
2
3
SELECT name 
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);

五、索引管理

1
2
3
4
5
6
7
8
-- 创建索引
CREATE INDEX idx_email ON users(email);

-- 唯一索引
CREATE UNIQUE INDEX uq_email ON users(email);

-- 删除索引
DROP INDEX idx_email ON users;

六、约束

1
2
3
4
5
6
7
-- 主键约束
ALTER TABLE users ADD PRIMARY KEY (id);

-- 外键约束
ALTER TABLE orders
ADD CONSTRAINT fk_user
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

七、事务控制

1
2
3
4
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 或 ROLLBACK;

八、常用函数

1
2
3
4
5
6
7
8
9
10
-- 字符串
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
SELECT SUBSTRING(email, 1, 5) FROM users;

-- 日期
SELECT NOW(), CURDATE();
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') FROM users;

-- 条件
SELECT name, IF(age >= 18, 'Adult', 'Minor') AS status FROM users;

九、用户与权限

1
2
3
4
5
6
7
8
9
10
11
-- 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 授权
GRANT SELECT, INSERT ON dbname.* TO 'username'@'localhost';

-- 撤销权限
REVOKE DELETE ON dbname.* FROM 'username'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

十、实用技巧

  1. 批量导入数据
1
2
3
LOAD DATA INFILE '/path/users.csv' 
INTO TABLE users
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
  1. 备份与恢复
1
2
3
4
5
# 命令行备份
mysqldump -u root -p dbname > backup.sql

# 恢复
mysql -u root -p dbname < backup.sql
  1. 查询优化
1
EXPLAIN SELECT * FROM users WHERE age > 20;  -- 分析执行计划
  1. 递归查询 (MySQL 8.0+)
1
2
3
4
5
6
7
WITH RECURSIVE cte AS (
SELECT id, name, manager_id FROM employees WHERE id = 1
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e JOIN cte ON e.manager_id = cte.id
)
SELECT * FROM cte;

提示

  1. 字符串建议用 utf8mb4 编码支持Emoji和生僻字。
  2. 重要操作前备份数据,尤其 DELETE/UPDATE 不加 WHERE 子句会导致全表操作!
  3. 生产环境避免使用 SELECT *,明确指定列名减少I/O开销。

建议结合官方文档实践:MySQL 8.0 Reference Manual

https://mp.weixin.qq.com/s/qs3Z7xoPYAG8q78P6FLpbw?scene=1