暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一文吃透 MySQL SQL 五大分类与实战技巧

程序员极光 2025-06-06
40

👨‍💻 无论你是初学 MySQL 还是准备深入企业开发,掌握 SQL 的五大分类及其典型用法,是数据库操作的第一步。

本文将通过 五大类型 + 丰富实战案例 + 可视化表格图,帮助你全面掌握 SQL 的核心用法。


📖 SQL 五大分类简介

类别
英文缩写
中文含义
主要用途
DDL
Data Definition Language
数据定义语言
创建和修改数据库结构
DML
Data Manipulation Language
数据操作语言
增删改数据记录
DQL
Data Query Language
数据查询语言
查询数据
DCL
Data Control Language
数据控制语言
授权和权限管理
TCL
Transaction Control Language
事务控制语言
保证操作的一致性

🧱 一、DDL:定义数据库结构

🛠 常用命令:

CREATE, ALTER, DROP, TRUNCATE

📌 实战案例

✅ 创建用户表

CREATE TABLE users (
  user_id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

✅ 添加字段 + 设置默认值

ALTER TABLE users ADD is_active TINYINT(1) DEFAULT 1;

✅ 创建带外键的订单表

CREATE TABLE orders (
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  user_id INT,
  order_amount DECIMAL(10,2),
  FOREIGN KEY (user_id) REFERENCES users(user_id)
);


✍️ 二、DML:操作表中数据

🛠 常用命令:

INSERT, UPDATE, DELETE

📌 实战案例

✅ 插入多条数据

INSERT INTO users (username, email) 
VALUES ('alice''alice@example.com'), 
       ('bob''bob@example.com');

✅ 更新订单金额

UPDATE orders 
SET order_amount = order_amount * 1.1 

✅ 删除用户相关订单

DELETE FROM orders 
WHERE user_id IN (SELECT user_id FROM users WHERE username = 'bob');


🔍 三、DQL:查询数据

🛠 常用命令:

SELECT

📌 实战案例

✅ 查询所有用户信息

SELECT * FROM users;

✅ 聚合查询:每个用户消费总额

SELECT u.username, SUM(o.order_amount) AS total_spent
FROM users u
JOIN orders o ON u.user_id = o.user_id
GROUP BY u.user_id;

✅ 分页查询 + 排序

SELECT * FROM orders 
LIMIT 10 OFFSET 0;


🛡 四、DCL:权限控制

🛠 常用命令:

GRANT, REVOKE

📌 实战案例

✅ 创建只读用户

CREATE USER 'readonly'@'%' IDENTIFIED BY '123456';
GRANT SELECT ON mydb.* TO 'readonly'@'%';
权限修改完成后,执行 FLUSH PRIVILEGES; 让其立即生效。

✅ 撤销权限

REVOKE INSERT ON mydb.* FROM 'readonly'@'%';
权限修改完成后,执行 FLUSH PRIVILEGES; 让其立即生效。


🔁 五、TCL:事务控制(关键)

🛠 常用命令:

START TRANSACTION, COMMIT, ROLLBACK

📌 实战案例

✅ 用户转账操作

📐 第一步:表结构设计
CREATE TABLE accounts (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    balance DECIMAL(10,2) NOT NULL DEFAULT 0.00
);


🔧 第二步:初始化测试数据
INSERT INTO accounts (user_id, username, balance)
VALUES 
(1, 'alice', 5000.00),
(2, 'bob', 3000.00);


🔄 第三步:标准转账事务 SQL(含注释)
-- 1. 开启事务
START TRANSACTION;

-- 2. 检查 A 的余额是否足够
SELECT balance FROM accounts WHERE user_id = 1;

-- 3. 从 A 账户扣除金额
UPDATE accounts 
SET balance = balance - 1000 
WHERE user_id = 1;

-- 4. 向 B 账户增加金额
UPDATE accounts 
SET balance = balance + 1000 
WHERE user_id = 2;

-- 5. 提交事务
COMMIT;

--用户转账事务中需要加锁,这是保证数据一致性、避免并发问题的关键步骤。

📚 参考文献 & 官方文档链接:

  1. MySQL 官方文档(最新版)🔗 https://dev.mysql.com/doc/
  2. MySQL 语法官方手册(8.0 英文版)🔗 https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html
  3. SQL 数据操作语言(DML)官方文档🔗 https://dev.mysql.com/doc/refman/8.0/en/data-manipulation-statements.html
  4. SQL 数据定义语言(DDL)官方文档🔗 https://dev.mysql.com/doc/refman/8.0/en/data-definition-statements.html
  5. SQL 权限控制(DCL)官方文档🔗 https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html
  6. 事务控制(TCL)与锁机制🔗 https://dev.mysql.com/doc/refman/8.0/en/commit.html 🔗 https://dev.mysql.com/doc/refman/8.0/en/rollback.html
  7. MySQL 中文网(国内镜像)🔗 https://www.mysqlzh.com/
  8. 高性能 MySQL(第 3 版)图书📖 作者:Baron Schwartz 等 📘 出版社:O'Reilly Media(可在京东/当当购入)
  9. 极客时间:《MySQL 实战 45 讲》(推荐阅读) 🔗 


文章转载自程序员极光,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论