MySQL 数据库完全指南:DDL、DML、DCL 与用户权限管理

大家好,数据库是后端开发的核心组件,几乎所有的应用都需要与数据库打交道。今天我们将系统性地学习 MySQL 的基础操作,涵盖数据库与表的创建数据的增删改查用户管理 以及权限控制 ,同时理解 DDL、DML、DCL 三大类 SQL 命令的区别与应用。


一、SQL 语言分类

SQL(Structured Query Language)按功能分为三大类:

分类 全称 说明 常用命令
DDL Data Definition Language 数据定义语言,定义数据库结构 CREATEALTERDROPTRUNCATE
DML Data Manipulation Language 数据操作语言,操作数据内容 INSERTUPDATEDELETESELECT
DCL Data Control Language 数据控制语言,管理权限 GRANTREVOKE

二、DDL:数据定义语言

DDL 用于定义数据库的结构,包括数据库、表、索引等对象的创建、修改和删除。

2.1 数据库操作

复制代码
-- 查看所有数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE mydb;
CREATE DATABASE IF NOT EXISTS mydb;
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 选择数据库
USE mydb;

-- 查看当前使用的数据库
SELECT DATABASE();

-- 删除数据库
DROP DATABASE mydb;
DROP DATABASE IF EXISTS mydb;

2.2 数据类型

创建表之前,需要了解常用的数据类型:

分类 数据类型 说明
数值 INT 整数
BIGINT 大整数
DECIMAL(M,D) 精确小数
FLOAT / DOUBLE 浮点数
字符串 VARCHAR(N) 可变长度字符串(最长 65535 字符)
CHAR(N) 固定长度字符串
TEXT 长文本
日期 DATE 日期(YYYY-MM-DD)
DATETIME 日期时间(YYYY-MM-DD HH:MM:SS)
TIMESTAMP 时间戳
布尔 BOOLEAN / TINYINT(1) 布尔值

2.3 创建表

复制代码
-- 基本建表语法
CREATE TABLE 表名 (
    列名 数据类型 [约束],
    列名 数据类型 [约束],
    ...
);

-- 示例:创建用户表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    age INT DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 查看表结构
DESC users;
-- 或
SHOW COLUMNS FROM users;

-- 查看建表语句
SHOW CREATE TABLE users;

-- 查看所有表
SHOW TABLES;

2.4 约束(Constraints)

约束 说明
PRIMARY KEY 主键,唯一标识一行
FOREIGN KEY 外键,关联其他表
NOT NULL 不能为空
UNIQUE 唯一,不能重复
DEFAULT 默认值
AUTO_INCREMENT 自动递增(用于整数主键)

2.5 修改表结构

复制代码
-- 添加列
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- 修改列类型
ALTER TABLE users MODIFY COLUMN phone VARCHAR(15);

-- 修改列名和类型
ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(20);

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

-- 重命名表
ALTER TABLE users RENAME TO user_accounts;

2.6 删除表

复制代码
-- 删除表
DROP TABLE users;

-- 删除表(如果存在)
DROP TABLE IF EXISTS users;

三、DML:数据操作语言

DML 用于对表中的数据进行增、删、改、查操作。

3.1 插入数据:INSERT

复制代码
-- 插入单行(指定列)
INSERT INTO users (username, email, password, age) 
VALUES ('张三', 'zhangsan@example.com', '123456', 25);

-- 插入单行(所有列)
INSERT INTO users VALUES (NULL, '李四', 'lisi@example.com', '654321', 30, NOW(), NOW());

-- 插入多行
INSERT INTO users (username, email, password, age) VALUES 
('王五', 'wangwu@example.com', '111111', 28),
('赵六', 'zhaoliu@example.com', '222222', 22),
('孙七', 'sunqi@example.com', '333333', 35);

-- 插入查询结果
INSERT INTO users_backup (username, email, age)
SELECT username, email, age FROM users WHERE age > 25;

3.2 查询数据:SELECT

复制代码
-- 查询所有列
SELECT * FROM users;

-- 查询指定列
SELECT id, username, email FROM users;

-- 条件查询(WHERE)
SELECT * FROM users WHERE age > 25;
SELECT * FROM users WHERE username = '张三';
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
SELECT * FROM users WHERE email LIKE '%@example.com';

3.3 更新数据:UPDATE

复制代码
-- 更新单行
UPDATE users SET age = 26 WHERE username = '张三';

-- 更新多列
UPDATE users SET age = 30, email = 'new@example.com' WHERE id = 1;

-- 条件更新
UPDATE users SET age = age + 1 WHERE age < 30;

-- 更新所有行(谨慎使用)
UPDATE users SET updated_at = NOW();

3.4 删除数据:DELETE

复制代码
-- 删除指定行
DELETE FROM users WHERE id = 1;

-- 删除满足条件的行
DELETE FROM users WHERE age > 60;

-- 删除所有行(谨慎使用)
DELETE FROM users;

四、DCL:数据控制语言

DCL 用于管理数据库用户的权限。

4.1 用户管理

复制代码
-- 查看所有用户
SELECT User, Host FROM mysql.user;

-- 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'username'@'%' IDENTIFIED BY 'password';  -- 允许任何主机连接

-- 修改密码
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new_password');

-- 删除用户
DROP USER 'username'@'localhost';

4.2 权限管理

复制代码
-- 授予权限
-- 语法:GRANT 权限 ON 数据库.表 TO '用户'@'主机'
GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'localhost';
GRANT SELECT, INSERT, UPDATE ON mydb.users TO 'username'@'localhost';
GRANT SELECT ON *.* TO 'readonly'@'%';  -- 全局只读

-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

-- 查看用户权限
SHOW GRANTS FOR 'username'@'localhost';

-- 撤销权限
REVOKE INSERT, UPDATE ON mydb.users FROM 'username'@'localhost';
REVOKE ALL PRIVILEGES ON mydb.* FROM 'username'@'localhost';

-- 刷新权限(使修改生效)
FLUSH PRIVILEGES;

4.3 权限级别

权限级别 说明 示例
全局 所有数据库 *.*
数据库 指定数据库 mydb.*
指定表 mydb.users
指定列 mydb.users.username

4.4 常用权限列表

权限 说明
ALL PRIVILEGES 所有权限
SELECT 查询数据
INSERT 插入数据
UPDATE 更新数据
DELETE 删除数据
CREATE 创建数据库/表
DROP 删除数据库/表
ALTER 修改表结构
INDEX 创建/删除索引

五、常用命令速查表

分类 命令 说明
数据库 SHOW DATABASES 查看所有数据库
CREATE DATABASE db 创建数据库
USE db 选择数据库
DROP DATABASE db 删除数据库
表操作 SHOW TABLES 查看所有表
CREATE TABLE t (...) 创建表
DESC t 查看表结构
ALTER TABLE t ADD/ MODIFY 修改表结构
DROP TABLE t 删除表
数据操作 INSERT INTO t VALUES(...) 插入数据
SELECT * FROM t 查询数据
UPDATE t SET ... WHERE ... 更新数据
DELETE FROM t WHERE ... 删除数据
用户权限 CREATE USER 'u'@'h' IDENTIFIED BY 'p' 创建用户
GRANT ... ON db.* TO 'u'@'h' 授予权限
REVOKE ... ON db.* FROM 'u'@'h' 撤销权限
SHOW GRANTS FOR 'u'@'h' 查看权限
DROP USER 'u'@'h' 删除用户

六、总结

分类 核心命令
DDL CREATEALTERDROPTRUNCATE
DML INSERTSELECTUPDATEDELETE
DCL CREATE USERGRANTREVOKE
表约束 PRIMARY KEYFOREIGN KEYNOT NULLUNIQUEDEFAULT
常用查询 WHEREORDER BYGROUP BYLIMITJOINLIKE

数据库操作是后端开发的必备技能。DDL 负责数据库结构的设计,DML 负责数据的日常操作,DCL 负责用户权限的安全管理。掌握这三类 SQL 命令,就能独立完成从数据库设计到数据维护的全流程。

如果觉得这篇内容对你有帮助,欢迎收藏备用。

相关推荐
tachibana21 小时前
大语言模型基础
数据库·人工智能·语言模型·自然语言处理·大模型·llm
小王C语言1 小时前
MySQL 事务:事务自动提交、查看/修改事务隔离级别、读未提交(RU)、读提交(RC)、可重复读(RR)、串行化
数据库·mysql
yu俞娥宝1 小时前
AI Agent可观测性:破解多步推理黑盒
数据库
TDengine (老段)1 小时前
TDengine 应用案例 — IoT 设备监控
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
三8441 小时前
WordPress SQL 注入漏洞分析:从 author__not_in 参数到 REST API 全链路
linux·前端·数据库
ryan_9961 小时前
生产环境向量检索数据库选型:Elasticsearch、Qdrant、Milvus 与 Chroma
数据库·elasticsearch·milvus·向量数据库·chroma·qdrant
2501_937860941 小时前
从JDBC到数据访问:Java数据库编程完全指南
java·开发语言·数据库
smallcelebration1 小时前
147 postgreSQL使用pgAdmin 4图形界面操作记录
数据库·postgresql
风123456789~1 小时前
【Oracle专栏】自治事务AT实验、知识点整理
数据库·oracle