MySQL 数据表基本操作详解:从建表到增删改查
在 MySQL 数据库应用中,数据表的操作是核心环节。本文系统梳理了从建表定义到数据增删改查的全流程关键步骤。内容涵盖表结构的创建与验证,批量插入数据的效率原理,以及 SELECT 查询中复杂的条件过滤、表达式计算、去重排序和分页机制。同时特别警示 DROP 与 DELETE 操作的潜在风险,并提供性能优化的实操建议。
1. 准备工作与基础规范
在进行任何数据表操作前,需明确以下 SQL 基础规则:
- 关键字避让:库名、表名、列名若使用 SQL 关键字,必须用反引号
`包裹以作区分。 - 上下文切换:对表进行操作前,务必先通过
USE 数据库名;选中目标数据库。 - 注释规范:
--(注意后留空格)或#用于单行注释;/* ... */用于多行注释。字段注释可在建表时使用COMMENT '注释内容'属性添加。 - 字符串引用:SQL 中单引号和双引号均可表示字符串。
2. 查看当前数据库中的表
若要列出当前已选数据库中的所有表,使用以下语法:
SHOW TABLES;
3. 创建数据表
使用 CREATE TABLE 语句定义表结构,支持使用 IF NOT EXISTS 避免重复创建报错。
CREATE TABLE [IF NOT EXISTS] table_name (
column_name data_type,
...
);
4. 查看指定表结构
通过 DESC(即 DESCRIBE 的缩写)查看已存在表的详细字段信息:
DESC table_name;
-- 或
DESCRIBE table_name;
5. 删除数据表
使用 DROP TABLE 彻底移除表及其中的数据。此操作不可逆,风险极高,一旦删除可能导致应用程序直接崩溃且难以及时察觉。
DROP TABLE [IF EXISTS] table_name [, table_name ...];
6. 向表中新增数据 (INSERT)
使用 INSERT INTO 将数据写入表中。可指定列名插入特定字段,若不指定则默认为全列插入。
INSERT INTO table_name [(col1, col2, ...)]
VALUES (val1, val2, ...), (val1, val2, ...);
6.1 插入方式与性能差异
全列插入一行:
结果为:
| id | name |
|---|---|
| 1 | 张三 |
全列插入多行(推荐,效率更高):
结果为:
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
部分列插入:
结果为:
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | NULL |
MySQL 采用“客户端—服务器”架构。一条 SQL 语句插入多条记录,意味着一次网络 IO 传输即可完成多次数据落盘。而多次单条插入需要反复建立网络连接、传输包体及磁盘写入,受限于 IO 访问速度远低于内存寄存器速度的特性,单批插入在性能上具有显著优势。
6.2 插入性能直观对比
一条语句插入多个记录(高效):
多条语句分别插入(低效):
7. 查找表中的数据 (SELECT)
SELECT 语句执行结果仅为内存中的临时表,不改变磁盘数据。其通用语法如下:
SELECT [DISTINCT] {col | expr}
FROM table_name
[WHERE condition]
[ORDER BY col [ASC|DESC]]
[LIMIT m, n];
为配合后续查询演示,假设我们拥有如下包含学生信息的测试数据表:
7.1 全列与指定列查询
全列查询: 慎用,大量数据会撑满服务器带宽。
指定列查询: 返回顺序无需严格遵循建表定义的物理顺序。
7.2 表达式与常量列
在 SELECT 中可以参与列间运算,或插入常量作为新列。需注意:只要参与运算的值中包含 NULL,结果即为 NULL。
表达式查询: 计算总分(chinese+math+english),结果不受原数据类型限制,且不修改原表数据。
添加常量列:
7.3 别名设置 (AS)
使用 AS 为查询出的列或表达式起别名,提升可读性。
7.4 去重查询 (DISTINCT)
针对单列或多列组合进行去重,要求所有指定的列值在同一行完全一致才视为重复。
单列去重:
多列组合去重:
7.5 排序查询 (ORDER BY)
默认排序无序,ASC 为升序(默认),DESC 为降序。NULL 值被视为最小值。MySQL 常使用归并排序算法以优化硬盘读写开销。
单列排序: 数学成绩升序/降序。
表达式/别名排序:
多列综合排序: 优先按数学期末成绩最高,其次语文成绩最低。
7.6 条件查询 (WHERE)
支持比较运算符与逻辑运算符(AND/OR/NOT)。注意:WHERE 条件中不能直接使用查询列的别名。且模糊匹配涉及长字符串比较时可能拖慢性能。
比较与逻辑运算符说明:
| 运算符 | 说明 |
|---|---|
| AND | 类似 &&,全真才真 |
| OR | 类似 ||,一真即真 |
| NOT | 取反 |
运算符直观展示:
通配符匹配 (LIKE):
| 通配符 | 说明 |
|---|---|
| % | 任意多个字符(含0个) |
| _ | 任意一个字符 |
典型条件查询案例:
1. 英语不及格同学:
2. 总分小于 200(排除 NULL 干扰):
3. 包含 NULL 值的总分计算修正:
4. 区间查询(80-90分):
5. 集合查询(IN):
6-9. 模糊查询示例: 姓孙、名字以德结尾、名字包含悟、姓孙且仅两字。
10. 范围匹配(BETWEEN): 分数90几。
7.7 分页查询 (LIMIT)
应对大数据量,减少网络与 IO 开销。第一行索引为 0。
应用场景: 搜索引擎结果的分页展示。
语法:
LIMIT n:返回前 n 条记录。LIMIT m, n:从第 m 条开始(跳过前 m 条),返回 n 条。LIMIT n OFFSET m:同上。
操作示例:
8. 修改表中的数据 (UPDATE)
UPDATE 会真实持久化修改硬盘数据。= 在此处代表赋值而非判断。
UPDATE table_name SET col = value [WHERE condition];
执行更新后的效果:
9. 删除表中的数据 (DELETE)
逐行删除,适合少量数据。若需清空整表,建议使用 DROP TABLE 或直接 TRUNCATE,效率远高于 DELETE。
DELETE FROM table_name [WHERE condition];
删除操作示意:
以上就是 MySQL 数据库中数据表超详细的基本操作的全部内容,更多关于 MySQL 进阶教程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









