SQL(结构化查询语言)是操作关系型数据库的核心标准语言,也是MySQL数据库学习的基础核心。所有MySQL数据库的库表创建、数据读写、权限管理等操作,均依托SQL语句实现。根据功能用途,SQL基础语句可划分为四大核心类别:DDL数据定义语言、DML数据操作语言、DQL数据查询语言、DCL数据控制语言。
本文将从零起步,逐一拆解四大语言的核心语法、实操场景、使用规范及注意事项,搭配可直接运行的示例语句,帮助新手快速掌握MySQL基础操作,搭建扎实的数据库技术基础。同时遵循MySQL通用规范:SQL关键字不区分大小写,行业内默认大写关键字、小写自定义名称,提升代码可读性。
一、DDL 数据定义语言(结构定义)
DDL(Data Definition Language,数据定义语言)核心作用是定义和修改数据库对象结构,操作对象为数据库、数据表、字段、索引等结构性资源,不直接操作表内数据。核心指令包含 CREATE(创建)、ALTER(修改)、DROP(删除),是搭建数据库架构的基础语句。
1.1 CREATE:创建数据库/数据表
用于新建数据库、数据表、索引等数据库对象,是初始化数据库结构的核心指令。
(1)创建数据库
语法:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
示例:创建名为test_db的数据库,指定UTF-8编码
-- 创建数据库,避免重复创建报错
CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 切换使用目标数据库
USE test_db;
(2)创建数据表
创建表时需定义字段名、数据类型、约束条件、注释等核心属性,约束可保证数据完整性。
语法:CREATE TABLE [IF NOT EXISTS] 表名(字段1 数据类型 [约束] [COMMENT 注释], 字段2 数据类型 [约束] [COMMENT 注释], ...) [表注释];
示例:创建学生信息表student
CREATE TABLE IF NOT EXISTS student (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生主键ID',
name VARCHAR(20) NOT NULL COMMENT '学生姓名',
age TINYINT DEFAULT 0 COMMENT '学生年龄',
gender CHAR(1) COMMENT '学生性别',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET utf8mb4 COMMENT '学生信息表';
1.2 ALTER:修改库/表结构
用于动态修改已存在的数据库、数据表结构,支持新增字段、删除字段、修改字段属性、修改表名、修改字符集等操作,是数据库迭代维护的常用指令。
(1)数据表字段操作
-- 新增字段:给学生表新增手机号字段
ALTER TABLE student ADD COLUMN phone VARCHAR(11) COMMENT '手机号';
-- 修改字段类型:将姓名字段长度修改为30
ALTER TABLE student MODIFY COLUMN name VARCHAR(30) NOT NULL COMMENT '学生姓名';
-- 重命名字段:将gender字段改为sex
ALTER TABLE student RENAME COLUMN gender TO sex;
-- 删除字段:删除手机号字段
ALTER TABLE student DROP COLUMN phone;
(2)修改表属性
-- 修改表名
ALTER TABLE student RENAME TO stu_info;
-- 修改数据表字符集
ALTER TABLE stu_info DEFAULT CHARSET utf8mb4;
1.3 DROP:删除库/表结构
用于彻底删除数据库、数据表等结构性对象,删除后结构及内部数据全部清空,不可恢复,生产环境需谨慎使用。
-- 删除数据表
DROP TABLE IF EXISTS stu_info;
-- 删除数据库
DROP DATABASE IF EXISTS test_db;
补充:IF EXISTS 关键字可避免因对象不存在导致的报错,是规范写法。
二、DML 数据操作语言(数据增删改)
DML(Data Manipulation Language,数据操作语言)核心作用是操作数据表中的具体数据,不修改表结构,仅对数据记录进行新增、修改、删除操作。核心指令包含 INSERT(新增)、UPDATE(修改)、DELETE(删除),是业务数据维护的核心语句。
2.1 INSERT:新增数据记录
用于向数据表中插入单条或多条数据,支持指定字段插入和全字段插入两种方式。
-- 单条插入(指定字段)
INSERT INTO student (name, age, sex) VALUES ('张三', 20, '男');
-- 多条批量插入(高效写法,适合批量导入数据)
INSERT INTO student (name, age, sex)
VALUES
('李四', 19, '女'),
('王五', 21, '男'),
('赵六', 20, '女');
2.2 UPDATE:修改数据记录
用于更新表中已有数据,必须搭配WHERE条件精准定位数据,否则会更新全表数据,引发数据事故。
-- 精准修改:修改ID为1的学生年龄
UPDATE student SET age = 22 WHERE id = 1;
-- 多字段修改:同时修改姓名和年龄
UPDATE student SET name = '张三三', age = 23 WHERE id = 1;
重要注意:生产环境执行UPDATE语句前,建议先用SELECT查询校验条件准确性,避免误改全表。
2.3 DELETE:删除数据记录
用于删除表中指定数据记录,同样依赖WHERE条件筛选数据,仅删除数据、保留表结构。
-- 精准删除:删除ID为4的学生数据
DELETE FROM student WHERE id = 4;
-- 清空表所有数据(保留表结构)
DELETE FROM student;
补充区分:DELETE清空数据可回滚、支持事务;TRUNCATE清空数据速度更快、不可回滚,属于DDL语句。
三、DQL 数据查询语言(数据查询)
DQL(Data Query Language,数据查询语言)是MySQL使用频率最高的语句,核心作用是按需查询数据表数据,仅读取数据、不修改任何库表结构和数据内容。核心指令为 SELECT,支持基础查询、条件查询、排序、分页、聚合查询等多种场景。
3.1 基础查询
-- 查询表中所有字段所有数据
SELECT * FROM student;
-- 查询指定字段数据
SELECT id, name, age FROM student;
-- 字段别名查询,优化展示效果
SELECT name AS 姓名, age AS 年龄, sex AS 性别 FROM student;
3.2 条件查询(WHERE)
通过条件筛选符合要求的数据,支持比较运算符、逻辑运算符、模糊查询等。
-- 查询年龄大于20岁的学生
SELECT * FROM student WHERE age > 20;
-- 查询性别为男且年龄等于20岁的学生
SELECT * FROM student WHERE sex = '男' AND age = 20;
-- 模糊查询:姓名包含“张”的学生
SELECT * FROM student WHERE name LIKE '%张%';
3.3 排序与分页
-- 按年龄降序排序(DESC降序,ASC升序,默认升序)
SELECT * FROM student ORDER BY age DESC;
-- 分页查询:每页2条数据,查询第1页(偏移量0,条数2)
SELECT * FROM student LIMIT 0, 2;
3.4 聚合查询与分组
配合聚合函数(COUNT、MAX、MIN、SUM、AVG)和GROUP BY实现统计查询。
-- 统计学生总人数
SELECT COUNT(*) AS 学生总人数 FROM student;
-- 按性别分组,统计每组人数
SELECT sex AS 性别, COUNT(*) AS 人数 FROM student GROUP BY sex;
四、DCL 数据控制语言(权限管理)
DCL(Data Control Language,数据控制语言)核心作用是管理数据库用户权限,用于分配、回收用户的数据库操作权限,保障数据库数据安全,是数据库运维、多用户协作的核心语句。核心指令包含 GRANT(授权)、REVOKE(撤权)。
4.1 GRANT:授予用户权限
用于创建用户并分配对应操作权限,支持全局权限、单库权限、单表权限配置。
语法:GRANT 权限列表 ON 数据库.数据表 TO '用户名'@'访问地址' IDENTIFIED BY '密码';
-- 创建新用户test,密码123456,仅允许本地访问,拥有test_db库所有权限
GRANT ALL PRIVILEGES ON test_db.* TO 'test'@'localhost' IDENTIFIED BY '123456';
-- 授予用户远程查询、插入权限
GRANT SELECT, INSERT ON test_db.* TO 'test'@'%' IDENTIFIED BY '123456';
-- 刷新权限(权限修改后必须执行,生效配置)
FLUSH PRIVILEGES;
4.2 REVOKE:回收用户权限
用于撤销用户已拥有的数据库权限,不删除用户账号,仅回收对应操作权限。
语法:REVOKE 权限列表 ON 数据库.数据表 FROM '用户名'@'访问地址';
-- 回收test用户的插入权限
REVOKE INSERT ON test_db.* FROM 'test'@'localhost';
-- 回收test用户所有权限
REVOKE ALL PRIVILEGES ON test_db.* FROM 'test'@'localhost';
-- 刷新权限生效
FLUSH PRIVILEGES;
五、四大SQL语言核心总结
为方便快速记忆与实操,对四类核心SQL语言做核心汇总,明确核心用途与使用场景:
-
DDL 结构操作:管库、表、字段结构,CREATE建结构、ALTER改结构、DROP删结构,多用于项目初始化、架构迭代
-
DML 数据操作:管表内具体数据,INSERT增数据、UPDATE改数据、DELETE删数据,多用于日常业务数据维护
-
DQL 数据查询:仅读取数据,SELECT万能查询,支持筛选、排序、分页、统计,是开发使用最多的语句
-
DCL 权限控制:管用户访问权限,GRANT授权、REVOKE撤权,保障数据库访问安全,多用于运维管理
六、新手实操核心注意事项
1. 所有修改、删除类语句(DROP、UPDATE、DELETE)务必谨慎,生产环境禁止无条件执行,避免数据丢失或损坏;
2. 优先使用 IF EXISTS/IF NOT EXISTS 关键字,规避重复创建、删除不存在对象的报错;
3. 权限修改后必须执行 FLUSH PRIVILEGES 刷新权限,否则配置不生效;
4. 编码统一使用utf8mb4,兼容所有中文、特殊字符及表情,避免乱码问题;
5. 代码规范统一:关键字大写、自定义名称小写、合理添加注释,提升代码可读性与可维护性。
七、高频面试考点与易错点解析
本节汇总MySQL基础SQL最常考面试题、核心辨析、高频易错点,贴合后端开发、测试、运维面试场景,同时解答新手学习中最易困惑的问题,巩固知识点、适配备考求职需求。
7.1 四大SQL语言核心面试辨析
这是基础面试必考题,面试官常考察分类认知与场景区分,核心考点如下:
-
考点1:语句分类区分:DDL操作数据库结构、DML操作业务数据、DQL只读查询数据、DCL操作用户权限,核心区分口诀:DDL管结构、DML管数据、DQL查数据、DCL管权限。
-
考点2:执行权限优先级:生产环境中,DCL权限管控优先级最高,普通业务开发账号仅授予DQL、DML权限,严禁开放DDL删除、全局权限,规避架构误改、数据泄露风险。
-
考点3:语句执行特性:DDL语句默认自动提交事务、不可回滚;DML语句默认支持事务、可手动回滚,这是两类语句最核心的底层区别。
7.2 DELETE与TRUNCATE 高频面试对比
二者均可以清空表数据,是面试超高频考点,详细区别如下:
-
语句归属不同:DELETE属于DML数据操作语言,TRUNCATE属于DDL数据定义语言。
-
事务支持不同:DELETE支持事务,可以回滚;TRUNCATE不支持事务,执行后数据彻底不可恢复。
-
自增主键重置不同:DELETE清空表数据后,自增主键会延续之前数值;TRUNCATE清空后,自增主键重置从1开始。
-
执行效率不同:TRUNCATE直接销毁重建表结构,速度极快;DELETE逐行删除数据,大数据量表执行效率极低。
-
使用场景:精准删数据用DELETE;测试环境清空全表、重置表数据用TRUNCATE,生产环境禁止使用TRUNCATE。
7.3 UPDATE/DELETE 高危操作面试重点
面试中常考察生产环境规范,是企业重点考察的安全实操考点:
-
核心禁忌:禁止执行无WHERE条件的UPDATE、DELETE语句,会直接更新/清空全表数据,造成生产事故。
-
标准操作流程:先使用SELECT语句校验筛选条件准确性,确认数据无误后,再执行UPDATE/DELETE修改删除数据。
-
企业防护手段:多数企业生产数据库会开启SQL审计、禁止无条件DML语句执行,同时限制普通账号的DROP、TRUNCATE权限。
7.4 DCL权限核心面试题
-
考点1:@'%' 和 @'localhost' 区别:@'localhost' 仅允许本机服务器访问数据库;@'%' 允许所有远程IP访问,远程连接场景必备配置。
-
考点2:FLUSH PRIVILEGES 作用:手动刷新权限缓存,GRANT、REVOKE修改权限后必须执行,否则新权限配置不生效。
-
考点3:ALL PRIVILEGES 权限风险:该权限为超级权限,包含所有库表操作权限,生产环境仅管理员账号可用,禁止分配给业务账号。
7.5 DQL查询高频易错点
-
分组查询规范:GROUP BY分组查询中,SELECT后的字段必须是分组字段或聚合函数字段,否则会报SQL语法错误。
-
LIMIT分页误区:LIMIT 偏移量,条数,偏移量从0开始,不是1,新手极易出现分页数据错位问题。
-
模糊查询通配符风险:%关键词% 全模糊查询无法走索引,大数据量场景下查询性能极差,面试常问优化方案。
7.6 总结:面试极简记忆口诀
结构增删改用DDL,业务数据靠DML; 查数只读是DQL,权限管控归DCL; 删改必带WHERE,截断不可回滚清; 远程百分本地端,权限刷新必执行。