小白入门 MySQL 基础语句:从建库建表到增删改查一篇搞懂
一、什么是 MySQL?
MySQL 是一种关系型数据库管理系统,简单来说,它就是用来存储和管理数据的软件。
比如一个学生管理系统中,可能需要保存:
这些数据就可以存放在 MySQL 数据库中。
MySQL 中常见的几个概念:
| 概念 | 说明 |
|---|
| 数据库 | 存放数据表的容器 | | 数据表 | 用来存储具体数据 | | 字段 | 表中的一列,比如姓名、年龄 | | 记录 | 表中的一行数据 | | SQL | 操作数据库的语言 |
二、查看已有数据库
连接 MySQL 后,可以先查看当前有哪些数据库。 这个语句的作用是查看 MySQL 中已经存在的数据库。
三、创建数据库
创建一个名为 student_db 的数据库: - CREATE DATABASE student_db;
复制代码为了避免数据库已经存在时报错,可以写成: - CREATE DATABASE IF NOT EXISTS student_db;
复制代码推荐小白使用第二种写法,更安全。
四、选择数据库
创建数据库后,需要先进入这个数据库,才能在里面创建数据表。 表示接下来所有操作都会在 student_db 数据库中进行。
五、删除数据库
删除数据库使用: - DROP DATABASE student_db;
复制代码更安全的写法: - DROP DATABASE IF EXISTS student_db;
复制代码注意:删除数据库会把里面的表和数据全部删除,实际开发中一定要谨慎使用。
六、创建数据表
下面创建一个学生表 students。 - CREATE TABLE students (
- id INT PRIMARY KEY AUTO_INCREMENT,
- name VARCHAR(50) NOT NULL,
- age INT,
- gender VARCHAR(10),
- score DECIMAL(5,2)
- );
复制代码字段说明:
| 字段名 | 含义 | 类型 |
|---|
| id | 学生编号 | 整数,自增主键 | | name | 学生姓名 | 字符串 | | age | 年龄 | 整数 | | gender | 性别 | 字符串 | | score | 成绩 | 小数 |
其中: 表示主键,主键不能重复。 表示自动递增,一般用于编号字段。 表示该字段不能为空。
七、查看当前数据库中的表该语句可以查看当前数据库中有哪些数据表。
八、查看表结构或者: 可以查看表中有哪些字段、字段类型、是否允许为空等信息。
九、插入数据
1. 插入完整数据- INSERT INTO students (name, age, gender, score)
- VALUES ('张三', 18, '男', 89.5);
复制代码因为 id 是自增字段,所以不需要手动填写。
2. 一次插入多条数据- INSERT INTO students (name, age, gender, score)
- VALUES
- ('李四', 19, '女', 92.0),
- ('王五', 20, '男', 76.5),
- ('赵六', 18, '女', 88.0);
复制代码一次插入多条数据比多次执行 INSERT 更方便。
十、查询数据
1. 查询所有数据* 表示查询所有字段。
2. 查询指定字段- SELECT name, score FROM students;
复制代码只查询学生姓名和成绩。
3. 给字段起别名- SELECT name AS 姓名, score AS 成绩 FROM students;
复制代码查询结果中的字段名会显示为“姓名”和“成绩”。
十一、条件查询
1. 查询年龄为 18 的学生- SELECT * FROM students
- WHERE age = 18;
复制代码2. 查询成绩大于 80 的学生- SELECT * FROM students
- WHERE score > 80;
复制代码3. 查询年龄不等于 18 的学生- SELECT * FROM students
- WHERE age != 18;
复制代码也可以写成: - SELECT * FROM students
- WHERE age <> 18;
复制代码
十二、多个条件查询
1. AND:同时满足多个条件
查询年龄为 18 且成绩大于 80 的学生: - SELECT * FROM students
- WHERE age = 18 AND score > 80;
复制代码2. OR:满足其中一个条件
查询年龄为 18 或成绩大于 90 的学生: - SELECT * FROM students
- WHERE age = 18 OR score > 90;
复制代码3. BETWEEN:范围查询
查询成绩在 80 到 90 之间的学生: - SELECT * FROM students
- WHERE score BETWEEN 80 AND 90;
复制代码4. IN:指定多个值
查询年龄为 18 或 20 的学生: - SELECT * FROM students
- WHERE age IN (18, 20);
复制代码
十三、模糊查询 LIKE
模糊查询常用于搜索功能。
1. 查询姓“张”的学生- SELECT * FROM students
- WHERE name LIKE '张%';
复制代码% 表示任意多个字符。
2. 查询名字中包含“三”的学生- SELECT * FROM students
- WHERE name LIKE '%三%';
复制代码3. 查询名字为两个字,并且第二个字是“四”的学生- SELECT * FROM students
- WHERE name LIKE '_四';
复制代码_ 表示任意一个字符。
十四、排序查询 ORDER BY
1. 按成绩升序排序- SELECT * FROM students
- ORDER BY score ASC;
复制代码ASC 表示升序,可以省略。
2. 按成绩降序排序- SELECT * FROM students
- ORDER BY score DESC;
复制代码3. 先按年龄升序,再按成绩降序- SELECT * FROM students
- ORDER BY age ASC, score DESC;
复制代码
十五、分页查询 LIMIT
分页查询在项目开发中非常常见。
1. 查询前 3 条数据- SELECT * FROM students
- LIMIT 3;
复制代码2. 从第 3 条开始,查询 2 条数据- SELECT * FROM students
- LIMIT 2, 2;
复制代码说明: 注意:起始位置从 0 开始。
例如:
| 页码 | SQL |
|---|
| 第 1 页,每页 5 条 | LIMIT 0, 5 | | 第 2 页,每页 5 条 | LIMIT 5, 5 | | 第 3 页,每页 5 条 | LIMIT 10, 5 |
十六、修改数据 UPDATE
1. 修改指定学生的成绩- UPDATE students
- SET score = 95
- WHERE id = 1;
复制代码2. 同时修改多个字段- UPDATE students
- SET age = 21, score = 90
- WHERE id = 2;
复制代码注意:使用 UPDATE 时一定要加 WHERE 条件。
如果不加 WHERE: - UPDATE students
- SET score = 100;
复制代码这会把整张表中所有学生的成绩都改成 100,非常危险。
十七、删除数据 DELETE
1. 删除指定数据- DELETE FROM students
- WHERE id = 3;
复制代码2. 删除成绩小于 60 的学生- DELETE FROM students
- WHERE score < 60;
复制代码注意:使用 DELETE 时也一定要加 WHERE 条件。
如果写成: 会删除整张表中的所有数据。
十八、常用聚合函数
聚合函数常用于统计数据。
1. 统计学生总数- SELECT COUNT(*) FROM students;
复制代码2. 查询最高分- SELECT MAX(score) FROM students;
复制代码3. 查询最低分- SELECT MIN(score) FROM students;
复制代码4. 查询平均分- SELECT AVG(score) FROM students;
复制代码5. 查询总分- SELECT SUM(score) FROM students;
复制代码
十九、分组查询 GROUP BY
查询不同性别的人数: - SELECT gender, COUNT(*) AS 人数
- FROM students
- GROUP BY gender;
复制代码查询不同年龄的平均成绩: - SELECT age, AVG(score) AS 平均成绩
- FROM students
- GROUP BY age;
复制代码
二十、分组后筛选 HAVING
WHERE 是分组前筛选,HAVING 是分组后筛选。
查询平均分大于 85 的年龄组: - SELECT age, AVG(score) AS avg_score
- FROM students
- GROUP BY age
- HAVING avg_score > 85;
复制代码
二十一、WHERE 和 HAVING 的区别
| 对比项 | WHERE | HAVING |
|---|
| 使用位置 | GROUP BY 之前 | GROUP BY 之后 | | 作用对象 | 原始数据 | 分组后的结果 | | 是否能使用聚合函数 | 一般不能 | 可以 |
示例: - SELECT age, AVG(score) AS avg_score
- FROM students
- WHERE score >= 60
- GROUP BY age
- HAVING avg_score > 80;
复制代码这条 SQL 的含义是:
先筛选出成绩大于等于 60 的学生,再按照年龄分组,最后找出平均分大于 80 的年龄组。
二十二、修改表结构
1. 添加字段- ALTER TABLE students
- ADD phone VARCHAR(20);
复制代码2. 修改字段类型- ALTER TABLE students
- MODIFY phone VARCHAR(30);
复制代码3. 修改字段名- ALTER TABLE students
- CHANGE phone telephone VARCHAR(30);
复制代码4. 删除字段- ALTER TABLE students
- DROP telephone;
复制代码
二十三、删除表安全写法: - DROP TABLE IF EXISTS students;
复制代码删除表会把表结构和表中数据全部删除,不能随便使用。
二十四、清空表数据TRUNCATE 会清空整张表的数据,并且通常会重置自增主键。
和 DELETE FROM students; 相比,TRUNCATE 更偏向于直接清空整张表。
二十五、小白最容易踩的坑
1. 忘记使用数据库
如果没有先执行: 可能会出现找不到表的问题。
2. 字符串忘记加引号
错误写法: - INSERT INTO students (name) VALUES (张三);
复制代码正确写法: - INSERT INTO students (name) VALUES ('张三');
复制代码3. UPDATE 忘记加 WHERE
危险写法: - UPDATE students SET score = 100;
复制代码这会修改所有数据。
4. DELETE 忘记加 WHERE
危险写法: 这会删除表中所有数据。
5. 中英文符号混用
SQL 中的括号、逗号、引号建议使用英文符号,否则可能报错。
二十六、完整练习代码
下面是一套完整的练习代码,小白可以直接复制到 MySQL 中运行。 - CREATE DATABASE IF NOT EXISTS student_db;
- USE student_db;
- DROP TABLE IF EXISTS students;
- CREATE TABLE students (
- id INT PRIMARY KEY AUTO_INCREMENT,
- name VARCHAR(50) NOT NULL,
- age INT,
- gender VARCHAR(10),
- score DECIMAL(5,2)
- );
- INSERT INTO students (name, age, gender, score)
- VALUES
- ('张三', 18, '男', 89.5),
- ('李四', 19, '女', 92.0),
- ('王五', 20, '男', 76.5),
- ('赵六', 18, '女', 88.0),
- ('钱七', 21, '男', 59.5);
- SELECT * FROM students;
- SELECT name, score FROM students;
- SELECT * FROM students
- WHERE score > 80;
- SELECT * FROM students
- WHERE age = 18 AND score > 80;
- SELECT * FROM students
- WHERE name LIKE '张%';
- SELECT * FROM students
- ORDER BY score DESC;
- SELECT gender, COUNT(*) AS 人数
- FROM students
- GROUP BY gender;
- SELECT age, AVG(score) AS 平均成绩
- FROM students
- GROUP BY age;
- UPDATE students
- SET score = 95
- WHERE id = 1;
- DELETE FROM students
- WHERE id = 5;
复制代码
二十七、总结
本文主要介绍了 MySQL 中最基础、最常用的 SQL 语句,包括数据库操作、数据表操作、数据新增、查询、修改、删除、排序、分页、分组和聚合函数等内容。
对于刚入门的小白来说,学习 MySQL 不需要一开始就追求复杂知识,而是应该先熟练掌握基础语句,尤其是: - CREATE DATABASE
- CREATE TABLE
- INSERT
- SELECT
- UPDATE
- DELETE
- WHERE
- ORDER BY
- GROUP BY
- LIMIT
复制代码只要把这些基础语句掌握清楚,就已经可以完成大部分简单项目中的数据库操作。后续可以继续学习主键、外键、索引、事务、多表查询、数据库设计规范以及 SQL 性能优化等内容。
|