【MySQL】03 数据库的CRUD

文章目录

  • [create 增加](#create 增加)
  • [**retrieve 读取查询 单表查询**](#retrieve 读取查询 单表查询)
    • [简单查询 select](#简单查询 select)
    • 条件查询
      • [where 关系运算符](#where 关系运算符)
      • [where in](#where in)
      • [where between and](#where between and)
      • [where null](#where null)
      • [where like 模糊查询](#where like 模糊查询)
      • [distinct 去重](#distinct 去重)
    • 高级查询
    • [别名 as](#别名 as)
  • [update 更新](#update 更新)
  • [delete 删除](#delete 删除)
    • [删除部分数据 delete](#删除部分数据 delete)
    • [删除全部数据 delete](#删除全部数据 delete)
    • [清除表中所有数据 truncate](#清除表中所有数据 truncate)

create 增加

为表添加数据 insert

  1. 指定字段添加数据
sql 复制代码
mysql> truncate table_test;
Query OK, 0 rows affected (0.08 sec)

mysql> select * from table_test tt ;
Empty set

mysql> insert into table_test (id,name,create_data,`rank`) values (12,'dept',now(),1);
Query OK, 1 row affected (0.03 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from table_test tt ;
+----+------+-------------+------+
| id | name | create_data | rank |
+----+------+-------------+------+
| 12 | dept | 2025-11-24  | 1a   |
+----+------+-------------+------+
1 row in set (0.05 sec)

mysql>  
sql 复制代码
mysql> use db_02;
Database changed
mysql> show create table table_test;
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                                                               |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| table_test | CREATE TABLE `table_test` (
  `id` int DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `create_data` date DEFAULT NULL,
  `rank` enum('1a','2b','3c','4d') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.08 sec)

mysql> 
  1. 不指定字段添加数据,一定要按照顺序插入数据;
sql 复制代码
mysql> insert into table_test values (1,'dept',now(),1);
Query OK, 1 row affected (0.03 sec)

mysql> select * from table_test;
+----+------+-------------+------+
| id | name | create_data | rank |
+----+------+-------------+------+
| 12 | dept | 2025-11-24  | 1a   |
|  1 | dept | 2025-11-24  | 1a   |
+----+------+-------------+------+
2 rows in set (0.05 sec)

mysql> 

为指定字段添加数据

同上,只是添加字段的写法

sql 复制代码
mysql> insert into table_test (id,create_data,`rank`) values (2,now(),1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from table_test;
+----+------+-------------+------+
| id | name | create_data | rank |
+----+------+-------------+------+
| 12 | dept | 2025-11-24  | 1a   |
|  1 | dept | 2025-11-24  | 1a   |
|  2 | NULL | 2025-11-24  | 1a   |
+----+------+-------------+------+
3 rows in set (0.05 sec)

mysql>

使用set 添加数据

sql 复制代码
mysql> truncate TABLE table_test;
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO table_test SET id = 3, NAME = 'name3', create_data = CURRENT_DATE, `rank` = 2;
Query OK, 1 row affected (0.03 sec)

mysql> SELECT 	* FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  3 | name3 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
1 row in set (0.07 sec)

mysql> 

同时添加多条数据

insert into select

sql 复制代码
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3
FROM table1
WHERE some_condition;

inset into table

sql 复制代码
INSERT INTO table_test (column1, column2, column3)
VALUES
  (value1_1, value2_1, value3_1),
  (value1_2, value2_2, value3_2),
  (value1_3, value2_3, value3_3);

retrieve 读取查询 单表查询

简单查询 select

sql 复制代码
select [Distinct] * [colum1,colum2,······,column]
from table
where [continue]
group by colum [having 分组表达式]
order by colum [asc|desc]
limit n
sql 复制代码
// 更改字段名称,方便查询
ALTER TABLE table_test CHANGE `rank` desc_rank ENUM('1a', '2b', '3c', '4d');
sql 复制代码
mysql> select id,name,desc_rank from
    -> table_test;
+----+-------+-----------+
| id | name  | desc_rank |
+----+-------+-----------+
|  1 | name1 | 2b        |
|  2 | name2 | 1a        |
|  4 | name3 | 2b        |
|  3 | name3 | 3c        |
+----+-------+-----------+
4 rows in set (0.07 sec)

mysql> SELECT * FROM table_test;
+----+-------+-------------+-----------+
| id | name  | create_data | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
4 rows in set (0.08 sec)

mysql> 

条件查询

where 关系运算符

sql 复制代码
mysql> select * from table_test where id >2;
+----+-------+-------------+-----------+
| id | name  | create_data | desc_rank |
+----+-------+-------------+-----------+
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
2 rows in set (0.09 sec)

mysql> select * from table_test where desc_rank = 2b;
1054 - Unknown column '2b' in 'where clause'
mysql> select * from table_test where desc_rank = 2;
+----+-------+-------------+-----------+
| id | name  | create_data | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  4 | name3 | 2025-11-23  | 2b        |
+----+-------+-------------+-----------+
2 rows in set (0.09 sec)

mysql> 

where in

sql 复制代码
mysql> select * from table_test where name in ('name1','name3');
+----+-------+-------------+-----------+
| id | name  | create_data | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
3 rows in set (0.07 sec)

mysql> select * from table_test where name not in ('name1','name3');
+----+-------+-------------+-----------+
| id | name  | create_data | desc_rank |
+----+-------+-------------+-----------+
|  2 | name2 | 2025-11-24  | 1a        |
+----+-------+-------------+-----------+
1 row in set (0.09 sec)

mysql> 

where between and

sql 复制代码
mysql> select * from table_test where create_date between 20251024 and 20251123;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  4 | name3 | 2025-11-23  | 2b        |
+----+-------+-------------+-----------+
1 row in set (0.08 sec)

mysql> select * from table_test where create_date between 20251124 and 20251124;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
3 rows in set (0.07 sec)

mysql> select * from table_test where create_date between 20251123 and 20251124;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
4 rows in set (0.04 sec)

mysql> 

where null

sql 复制代码
mysql> insert into table_test values(5,null,null,null);
Query OK, 1 row affected (0.03 sec)

mysql> select * from table_test;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
|  5 | NULL  | NULL        | NULL      |
+----+-------+-------------+-----------+
5 rows in set (0.07 sec)

mysql> select * from table_test where name is null;
+----+------+-------------+-----------+
| id | name | create_date | desc_rank |
+----+------+-------------+-----------+
|  5 | NULL | NULL        | NULL      |
+----+------+-------------+-----------+
1 row in set (0.06 sec)

mysql> select * from table_test where name is not null;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
4 rows in set (0.08 sec)

mysql> 

where like 模糊查询

sql 复制代码
mysql> select * from table_test;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
|  5 | NULL  | NULL        | NULL      |
+----+-------+-------------+-----------+
5 rows in set (0.07 sec)

mysql> select * from table_test where name like 'name%';
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
4 rows in set (0.07 sec)

mysql> select * from table_test where name like 'nam%';
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
4 rows in set (0.07 sec)

mysql> select * from table_test where name like 'nam%3';
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
+----+-------+-------------+-----------+
2 rows in set (0.08 sec)

mysql> 

distinct 去重

sql 复制代码
mysql> select * from table_test;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
|  5 | NULL  | NULL        | NULL      |
+----+-------+-------------+-----------+
5 rows in set (0.07 sec)

mysql> select distinct name from table_test;
+-------+
| name  |
+-------+
| name1 |
| name2 |
| name3 |
| NULL  |
+-------+
4 rows in set (0.06 sec)

mysql> select distinct name,create_date from table_test;
+-------+-------------+
| name  | create_date |
+-------+-------------+
| name1 | 2025-11-24  |
| name2 | 2025-11-24  |
| name3 | 2025-11-23  |
| name3 | 2025-11-24  |
| NULL  | NULL        |
+-------+-------------+
5 rows in set (0.07 sec)

mysql> 

and的优先级高于or,两个使用时 确定优先级使用()区分

高级查询

聚合函数

  1. count() 统计表中数据
  2. sum()计算表中数据
  3. avg()计算平均值
  4. max()计算最大值
  5. min()计算最小值

排序函数

order by,进行排序查询

  1. 对查询结果进行排序
  2. 利用decode函数排序,orcle中有这个关键字,MySQL没有;
  3. 利用case when进行排序,Oracle和MySQL都可以,MySQL用这个平替;
sql 复制代码
mysql> select * from table_test order by id;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  3 | name3 | 2025-11-24  | 3c        |
|  4 | name3 | 2025-11-23  | 2b        |
|  5 | NULL  | NULL        | NULL      |
+----+-------+-------------+-----------+
5 rows in set (0.06 sec)

mysql> select * from table_test order by name,id;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  5 | NULL  | NULL        | NULL      |
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  3 | name3 | 2025-11-24  | 3c        |
|  4 | name3 | 2025-11-23  | 2b        |
+----+-------+-------------+-----------+
5 rows in set (0.12 sec)

mysql> select id,name,create_date,desc_rank from table_test order by decode(name,'name1',1,'name2',2,3);
1305 - FUNCTION db_02.decode does not exist
mysql> select id,name,create_date,desc_rank from table_test order by case name  when 'name1' then 1 when 'name2' then 2 else 3 end;
+----+-------+-------------+-----------+
| id | name  | create_date | desc_rank |
+----+-------+-------------+-----------+
|  1 | name1 | 2025-11-24  | 2b        |
|  2 | name2 | 2025-11-24  | 1a        |
|  4 | name3 | 2025-11-23  | 2b        |
|  3 | name3 | 2025-11-24  | 3c        |
|  5 | NULL  | NULL        | NULL      |
+----+-------+-------------+-----------+
5 rows in set (0.10 sec)

mysql> 

null,默认被认为是最小值

分组查询

  1. group by 分组,查询每个分组的数据;
  2. 结合聚合函数,可以统计所需要的数据;
  3. 结合having关键字使用,附加group的分组条件;
  4. 结合limit限制查询数据,一个参数查数据,两个参数选页数;
sql 复制代码
mysql> select id as 'No.',name as 'Name',create_date as 'Date',desc_rank as 'Desc' from table_test as t1 group by 'Name';
+-----+-------+------------+------+
| No. | Name  | Date       | Desc |
+-----+-------+------------+------+
|   1 | name1 | 2025-11-24 | 2b   |
+-----+-------+------------+------+
1 row in set (0.08 sec)

mysql> select id as 'No.',name as 'Name',create_date as 'Date',desc_rank as 'Desc' from table_test as t1 group by t1.Name;
+-----+-------+------------+------+
| No. | Name  | Date       | Desc |
+-----+-------+------------+------+
|   1 | name1 | 2025-11-24 | 2b   |
|   2 | name2 | 2025-11-24 | 1a   |
|   4 | name3 | 2025-11-23 | 2b   |
|   5 | NULL  | NULL       | NULL |
+-----+-------+------------+------+
4 rows in set (0.06 sec)

mysql> select id as 'No.',name as 'Name',create_date as 'Date',desc_rank as 'Desc',count(*) from table_test as t1 group by t1.Name;
+-----+-------+------------+------+----------+
| No. | Name  | Date       | Desc | count(*) |
+-----+-------+------------+------+----------+
|   1 | name1 | 2025-11-24 | 2b   |        1 |
|   2 | name2 | 2025-11-24 | 1a   |        1 |
|   4 | name3 | 2025-11-23 | 2b   |        2 |
|   5 | NULL  | NULL       | NULL |        1 |
+-----+-------+------------+------+----------+
4 rows in set (0.09 sec)

mysql> select id as 'No.',name as 'Name',create_date as 'Date',desc_rank as 'Desc',count(*) from table_test as t1 group by t1.Name having id >3;
+-----+-------+------------+------+----------+
| No. | Name  | Date       | Desc | count(*) |
+-----+-------+------------+------+----------+
|   4 | name3 | 2025-11-23 | 2b   |        2 |
|   5 | NULL  | NULL       | NULL |        1 |
+-----+-------+------------+------+----------+
2 rows in set (0.13 sec)

mysql> select id as 'No.',name as 'Name',create_date as 'Date',desc_rank as 'Desc',count(*) from table_test as t1 group by t1.Name limit 2;
+-----+-------+------------+------+----------+
| No. | Name  | Date       | Desc | count(*) |
+-----+-------+------------+------+----------+
|   1 | name1 | 2025-11-24 | 2b   |        1 |
|   2 | name2 | 2025-11-24 | 1a   |        1 |
+-----+-------+------------+------+----------+
2 rows in set (0.11 sec)

mysql> select id as 'No.',name as 'Name',create_date as 'Date',desc_rank as 'Desc',count(*) from table_test as t1 group by t1.Name limit 2,2;
+-----+-------+------------+------+----------+
| No. | Name  | Date       | Desc | count(*) |
+-----+-------+------------+------+----------+
|   4 | name3 | 2025-11-23 | 2b   |        2 |
|   5 | NULL  | NULL       | NULL |        1 |
+-----+-------+------------+------+----------+
2 rows in set (0.10 sec)

mysql> 

别名 as

  1. 字段别名 table as t1
  2. 表别名 colum as c1,单表查询是一般用不上表别名;
sql 复制代码
mysql> select id as 'No.',name as'Name',create_date as 'Date',desc_rank as 'Desc' from table_test as t1 ;
+-----+-------+------------+------+
| No. | Name  | Date       | Desc |
+-----+-------+------------+------+
|   1 | name1 | 2025-11-24 | 2b   |
|   2 | name2 | 2025-11-24 | 1a   |
|   4 | name3 | 2025-11-23 | 2b   |
|   3 | name3 | 2025-11-24 | 3c   |
|   5 | NULL  | NULL       | NULL |
+-----+-------+------------+------+
5 rows in set (0.09 sec)

mysql> 

update 更新

更新全部数据

sql 复制代码
mysql> SELECT * FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  3 | name3 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
1 row in set (0.07 sec)

mysql> update table_test set id = 1,name = 'name1';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  1 | name1 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
1 row in set (0.08 sec)

mysql> 

更新部分数据

sql 复制代码
mysql> SELECT 	* FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  1 | name1 | 2025-11-24  | 2b   |
|  3 | name3 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
2 rows in set (0.09 sec)

mysql> update table_test set name = 'name2' where id = 3;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT 	* FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  1 | name1 | 2025-11-24  | 2b   |
|  3 | name2 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
2 rows in set (0.09 sec)

mysql> 

delete 删除

删除部分数据 delete

sql 复制代码
mysql> SELECT 	* FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  1 | name1 | 2025-11-24  | 2b   |
|  3 | name2 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
2 rows in set (0.09 sec)

mysql> delete from table_test where id = 3;
Query OK, 1 row affected (0.04 sec)

mysql> SELECT 	* FROM	table_test;
+----+-------+-------------+------+
| id | name  | create_data | rank |
+----+-------+-------------+------+
|  1 | name1 | 2025-11-24  | 2b   |
+----+-------+-------------+------+
1 row in set (0.07 sec)

mysql> 

删除全部数据 delete

sql 复制代码
delete from table_test

清除表中所有数据 truncate

sql 复制代码
mysql> truncate TABLE table_test;
Query OK, 0 rows affected (0.05 sec)
相关推荐
DarkAthena2 小时前
【DuckDB】活用marco以兼容GaussDB的SQL执行
数据库·sql·duckdb
沐浴露z2 小时前
一张思维导图理清【Redis】
数据库·redis·缓存
q***33372 小时前
mysql查看binlog日志
数据库·mysql
q***51892 小时前
MYSQL批量UPDATE的两种方式
数据库·mysql
x***01062 小时前
SQL 注入漏洞原理以及修复方法
网络·数据库·sql
百***81273 小时前
【HTML+CSS】使用HTML与后端技术连接数据库
css·数据库·html
6***3493 小时前
MySQL项目
数据库·mysql
木井巳3 小时前
【MySQL数据库】数据库基础
数据库·mysql
Wang's Blog3 小时前
MySQL: 查询全流程深度解析与性能优化实践指南
数据库·mysql·性能优化