news 2026/5/15 22:33:18

MySQL 完整SQL指令大全(仅代码+备注)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 完整SQL指令大全(仅代码+备注)

默认示例表:student(学生表)、class(班级表),适配MySQL 5.7+ / 8.0+

一、数据库(库)操作指令

1. CREATE DATABASE:创建数据库

-- 基础创建(可能中文乱码) CREATE DATABASE school; ​ -- 推荐创建(判断不存在+指定字符集,避免乱码) CREATE DATABASE IF NOT EXISTS school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. DROP DATABASE:删除数据库

-- 直接删除(不存在则报错) DROP DATABASE school; ​ -- 安全删除(判断存在再删除) DROP DATABASE IF EXISTS school;

3. SHOW DATABASES / SHOW SCHEMAS:查看所有数据库

-- 查看所有数据库(最常用) SHOW DATABASES; ​ -- 等价写法 SHOW SCHEMAS;

4. USE:选择/切换数据库

-- 切换到school数据库,后续操作均在此库执行 USE school;

5. ALTER DATABASE:修改数据库属性

-- 修改数据库字符集(解决中文乱码) ALTER DATABASE school CHARACTER SET utf8mb4; ​ -- 同时修改字符集和排序规则 ALTER DATABASE school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

6. SHOW CREATE DATABASE:查看数据库创建语句

-- 查看school数据库完整创建语句 SHOW CREATE DATABASE school;

二、数据表(表)操作指令

1. CREATE TABLE:创建数据表

-- 创建student学生表(含字段、约束、说明) CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号(主键,自增)', name VARCHAR(20) NOT NULL COMMENT '姓名(非空)', age INT DEFAULT 18 COMMENT '年龄(默认18)', gender ENUM('男','女') COMMENT '性别(二选一)', class_id INT COMMENT '班级ID(关联class表)', score DECIMAL(5,2) COMMENT '成绩(保留2位小数)', FOREIGN KEY (class_id) REFERENCES class(id) -- 外键关联班级表 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';

2. DESC / DESCRIBE:查看数据表结构

-- 查看student表结构(常用) DESC student; ​ -- 等价写法 DESCRIBE student;

3. SHOW TABLES:查看当前数据库所有数据表

-- 查看当前数据库(school)所有表 SHOW TABLES;

4. SHOW CREATE TABLE:查看数据表创建语句

-- 查看student表完整创建语句 SHOW CREATE TABLE student;

5. ALTER TABLE:修改数据表(最全用法)

5.1 添加字段(ADD COLUMN)

-- 新增phone字段,在age后 ALTER TABLE student ADD COLUMN phone VARCHAR(11) AFTER age; -- 新增非空字段,放在第一列 ALTER TABLE student ADD COLUMN id_card VARCHAR(18) NOT NULL FIRST; -- 批量新增多个字段 ALTER TABLE student ADD COLUMN address VARCHAR(50), ADD COLUMN create_time DATETIME DEFAULT NOW();

5.2 修改字段类型/约束(MODIFY COLUMN)

-- 修改age字段类型+添加非空约束 ALTER TABLE student MODIFY COLUMN age TINYINT NOT NULL; -- 修改score字段默认值+取消非空约束 ALTER TABLE student MODIFY COLUMN score DECIMAL(5,2) DEFAULT 0 NULL;

5.3 修改字段名(CHANGE COLUMN)

-- 仅修改字段名(phone改为tel) ALTER TABLE student CHANGE COLUMN phone tel VARCHAR(11); -- 修改字段名+类型+约束(tel改phone,非空) ALTER TABLE student CHANGE COLUMN tel phone VARCHAR(13) NOT NULL;

5.4 删除字段(DROP COLUMN)

-- 单个删除tel字段 ALTER TABLE student DROP COLUMN tel; -- 批量删除多个字段 ALTER TABLE student DROP COLUMN address, DROP COLUMN create_time;

5.5 添加主键(ADD PRIMARY KEY)

-- 给id字段添加主键 ALTER TABLE student ADD PRIMARY KEY (id);

5.6 删除主键(DROP PRIMARY KEY)

-- 删除student表主键约束 ALTER TABLE student DROP PRIMARY KEY;

5.7 添加唯一约束(ADD UNIQUE)

-- 给phone字段添加唯一约束(避免重复) ALTER TABLE student ADD UNIQUE uk_phone(phone);

5.8 删除唯一约束(DROP INDEX)

-- 删除phone字段的唯一约束(索引名uk_phone) ALTER TABLE student DROP INDEX uk_phone;

5.9 重命名表(RENAME TO / RENAME TABLE)

-- 单表重命名(student改为stu) ALTER TABLE student RENAME TO stu; -- 批量重命名 RENAME TABLE stu TO student, class TO cls;

6. DROP TABLE:删除数据表

-- 直接删除(不存在则报错) DROP TABLE student; -- 安全删除(判断存在再删除) DROP TABLE IF EXISTS student; -- 批量删除多个表 DROP TABLE IF EXISTS student, class;

7. TRUNCATE TABLE:清空表数据

-- 清空数据,保留表结构,重置自增 TRUNCATE TABLE student; ​ -- 简写 TRUNCATE student;

8. 复制数据表(CREATE TABLE ... AS / LIKE)

-- 复制表结构+所有数据 CREATE TABLE stu_copy AS SELECT * FROM student; ​ -- 只复制表结构,不复制数据 CREATE TABLE stu_empty LIKE student; ​ -- 复制指定字段的结构+数据 CREATE TABLE stu_part AS SELECT name,age,score FROM student;

三、DML 数据操作指令(增删改查)

1. INSERT INTO:插入数据(增)

-- 按字段顺序插入(id自增填NULL) INSERT INTO student VALUES(NULL, '张三', 18, '男', 1, 90.5); ​ -- 指定字段插入(推荐,安全) INSERT INTO student(name, age, gender, score) VALUES('李四', 17, '女', 88.0); ​ -- 批量插入3行数据 INSERT INTO student(name, age) VALUES('王五', 18), ('赵六', 17), ('孙七', 18); ​ -- 从另一张表导入数据(18岁学生导入stu_copy) INSERT INTO stu_copy SELECT * FROM student WHERE age=18; ​ -- 导入指定字段(成绩≥80的姓名和成绩) INSERT INTO stu_copy(name, score) SELECT name, score FROM student WHERE score>=80;

2. SELECT:查询数据(查)

-- 1. 基础查询 SELECT * FROM student; -- 查询所有字段(不推荐) SELECT name, age, score FROM student; -- 查询指定字段(推荐) SELECT DISTINCT class_id FROM student; -- 去重查询班级ID ​ -- 2. WHERE条件筛选 SELECT * FROM student WHERE age>17 AND score>=80; -- 年龄>17且成绩≥80 SELECT * FROM student WHERE age BETWEEN 16 AND 18; -- 年龄16-18 SELECT * FROM student WHERE class_id IN(1,2,3); -- 班级ID为1/2/3 SELECT * FROM student WHERE name LIKE '张%'; -- 姓"张"的学生 SELECT * FROM student WHERE name LIKE '_三'; -- 第二个字是"三" SELECT * FROM student WHERE phone IS NULL; -- phone为空 SELECT * FROM student WHERE phone IS NOT NULL; -- phone不为空 ​ -- 3. ORDER BY排序 SELECT * FROM student ORDER BY score DESC; -- 成绩降序 SELECT * FROM student ORDER BY age ASC, score DESC; -- 年龄升序,成绩降序 ​ -- 4. LIMIT分页 SELECT * FROM student LIMIT 3; -- 查询前3条 SELECT * FROM student LIMIT 2,3; -- 跳过2条,取3条 SELECT * FROM student ORDER BY score DESC LIMIT 3; -- 成绩前3名 ​ -- 5. 聚合函数 SELECT COUNT(*) AS 总人数 FROM student; -- 统计总人数 SELECT COUNT(score) AS 有成绩人数 FROM student; -- 统计有成绩人数 SELECT SUM(score) 总成绩, AVG(score) 平均分 FROM student; -- 统计成绩相关 ​ -- 6. GROUP BY分组+HAVING过滤 SELECT class_id 班级ID, COUNT(*) 人数, AVG(score) 平均分 FROM student GROUP BY class_id; -- 按班级分组统计 SELECT class_id 班级ID, AVG(score) 平均分 FROM student GROUP BY class_id HAVING AVG(score) > 80; -- 平均分>80的班级 SELECT class_id 班级ID, COUNT(*) 及格人数 FROM student WHERE score >= 60 GROUP BY class_id; -- 先筛选再分组 ​ -- 7. 别名用法(简化语句) SELECT s.name 姓名, s.age 年龄 FROM student s; -- 表别名s SELECT name AS 姓名, age AS 年龄 FROM student; -- 字段别名

3. UPDATE:修改数据(改)

-- 修改单个字段(id=1的学生年龄改为19) UPDATE student SET age=19 WHERE id=1; ​ -- 修改多个字段(id=2的学生姓名和成绩) UPDATE student SET name='李思思', score=92.5 WHERE id=2; ​ -- 带条件批量修改(班级1的学生成绩+5) UPDATE student SET score=score+5 WHERE class_id=1; ​ -- 无WHERE条件(谨慎!修改所有数据) UPDATE student SET age=18;

4. DELETE:删除数据(删)

-- 带条件删除(id=3的学生) DELETE FROM student WHERE id=3; ​ -- 批量删除(成绩<60的学生) DELETE FROM student WHERE score < 60; ​ -- 无WHERE条件(谨慎!删除所有数据) DELETE FROM student;

四、多表查询(核心进阶)

-- 1. 内连接(查询有对应班级的学生信息) SELECT s.name 学生姓名, c.class_name 班级名称 FROM student s INNER JOIN class c ON s.class_id = c.id; ​ -- 2. 左连接(查询所有学生,无班级则显示NULL) SELECT s.name 学生姓名, c.class_name 班级名称 FROM student s LEFT JOIN class c ON s.class_id = c.id; ​ -- 3. 右连接(查询所有班级,无学生则显示NULL) SELECT s.name 学生姓名, c.class_name 班级名称 FROM student s RIGHT JOIN class c ON s.class_id = c.id; ​ -- 4. 子查询(查询成绩大于平均分的学生) SELECT * FROM student WHERE score > (SELECT AVG(score) FROM student); ​ -- 5. 子查询(查询班级1的所有学生) SELECT * FROM student WHERE class_id = (SELECT id FROM class WHERE class_name='高一1班');

五、其他常用指令

-- 1. 事务操作(保证原子性) START TRANSACTION; -- 开启事务 UPDATE student SET score=85 WHERE id=1; COMMIT; -- 提交事务(生效) -- ROLLBACK; -- 回滚事务(取消操作) ​ -- 2. 索引操作(提升查询效率) CREATE INDEX idx_student_name ON student(name); -- 给name字段建普通索引 DROP INDEX idx_student_name ON student; -- 删除索引 ​ -- 3. 查看表索引 SHOW INDEX FROM student; ​ -- 4. 去重查询(补充) SELECT DISTINCT name, class_id FROM student; -- 多字段去重
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 14:52:28

工业物联网实战:基于Netty+4G DTU(ZHC4013)的Modbus-RTU数据采集平台搭建指南

工业物联网实战&#xff1a;基于Netty与4G DTU的Modbus-RTU数据采集平台架构设计 在工业自动化领域&#xff0c;远程数据采集系统的稳定性和实时性直接关系到生产监控的可靠性。传统有线连接方式在设备分布广泛、环境复杂的场景中面临布线困难、维护成本高等挑战。本文将深入探…

作者头像 李华
网站建设 2026/5/13 14:52:21

谁能打败大疆

在商业的世界里&#xff0c;每一个水草丰美之地历来都会吸引大量猎食者。文&#xff5c;游勇编&#xff5c;周路平2015年&#xff0c;得罪了美国政府的汪滔&#xff0c;罕见地接受了外媒的采访&#xff0c;当时福布斯的记者问汪滔&#xff0c;大疆的对手是谁&#xff0c;他给出…

作者头像 李华
网站建设 2026/5/13 14:51:30

基于Springboot + vue实现的员工岗前培训学习平台

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐➕关注&#x1f440;是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;关注&#x1f440;欢迎…

作者头像 李华
网站建设 2026/5/13 14:50:30

【备考高项】模拟预测题(四)案例分析及答案详解

更多内容请见: 《备考信息系统项目管理师》 - 专栏介绍和目录 文章目录 试题一(25分) 【问题1】(8分) 【问题2】(9分) 【问题3】(4分) 【问题4】(4分) 试题二(25分) 【问题1】(6分) 【问题2】(15分) 【问题3】(4分) 试题三(25分) 【问题1】(10分) 【问题…

作者头像 李华
网站建设 2026/5/13 14:50:23

企业如何利用多模型聚合能力构建内部AI助手矩阵

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业如何利用多模型聚合能力构建内部AI助手矩阵 对于拥有多个部门的中型企业而言&#xff0c;不同团队对AI助手的需求往往存在显著…

作者头像 李华