七、MySQL插入、更新与删除数据

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS Agent(兼容OpenClaw),2核4GB
简介:

 存储在系统中的数据是数据库管理系统(DBMS)的核心,数据库被设计用来管理数据的存储、访问和维护数据的完整性。MySQL中提供丰富的数据管理语句,包括插入数据的INSERT、更新数据的UPDATE以及删除数据的DELETE语句。

7.1、插入数据

为表的所有字段插入数据

 使用基本的INSERT语句插入数据,要求指定表名称和插入到新纪录中的值,其基本语法为:

1
INSERT  INTO  tbl_name (column_list)  VALUES  (value_list)

在插入数据前,首先创建一张表:

1
2
3
4
5
6
7
8
9
mysql>  CREATE  TABLE  person
     -> (
     -> id      INT  UNSIGNED  NOT  NULL  AUTO_INCREMENT,
     ->  name    CHAR (40)  NOT  NULL  DEFAULT  '' ,
     -> age     INT  NOT  NULL  DEFAULT  0,
     -> info    CHAR (50)  NULL ,
     ->  PRIMARY  KEY  (id)
     -> );
Query OK, 0  rows  affected (0.03 sec)

在person表中,插入一条新记录,id值为1,name值为Green,age值为21,info值为Lawyer

1
2
3
4
5
6
7
8
9
10
11
mysql>   INSERT  INTO  person (id , name , age , info)
     ->        VALUES  (1, 'Green' , 21,  'Lawyer' );
Query OK, 1 row affected (0.02 sec)
 
mysql>  SELECT  FROM  person;
+ ----+-------+-----+--------+
| id |  name   | age | info   |
+ ----+-------+-----+--------+
|  1 | Green |  21 | Lawyer |
+ ----+-------+-----+--------+
1 row  in  set  (0.00 sec)

在person表中,插入一条新记录,id值为2,name值为Suse,age值为22,info值为dancer

1
2
3
4
5
6
7
8
9
10
11
12
mysql>   INSERT  INTO  person (age , name , id , info)
     ->        VALUES  (22,  'Suse' , 2,  'dancer' );
Query OK, 1 row affected (0.02 sec)
 
mysql>  SELECT  FROM  person;
+ ----+-------+-----+--------+
| id |  name   | age | info   |
+ ----+-------+-----+--------+
|  1 | Green |  21 | Lawyer |
|  2 | Suse  |  22 | dancer |
+ ----+-------+-----+--------+
rows  in  set  (0.00 sec)


为表的指定字段插入数据

在person表中,插入一条新记录,name值为Willam,age值为20,info值为sports man

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql>   INSERT  INTO  person ( name , age,info)
     ->       VALUES ( 'Willam' , 20,  'sports man' );
Query OK, 1 row affected (0.02 sec)
 
mysql>  SELECT  FROM  person;                                                       
+ ----+--------+-----+------------+
| id |  name    | age | info       |
+ ----+--------+-----+------------+
|  1 | Green  |  21 | Lawyer     |
|  2 | Suse   |  22 | dancer     |
|  3 | Willam |  20 | sports man |
+ ----+--------+-----+------------+
rows  in  set  (0.00 sec)

在person表中,插入一条新记录,name值为laura,age值为25

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql>   INSERT  INTO  person ( name , age )  VALUES  ( 'Laura' , 25);
Query OK, 1 row affected (0.01 sec)
 
mysql>  SELECT  FROM  person;                                 
+ ----+--------+-----+------------+
| id |  name    | age | info       |
+ ----+--------+-----+------------+
|  1 | Green  |  21 | Lawyer     |
|  2 | Suse   |  22 | dancer     |
|  3 | Willam |  20 | sports man |
|  4 | Laura  |  25 |  NULL        |
+ ----+--------+-----+------------+
rows  in  set  (0.00 sec)

  可以发现id字段在插入数据后,没有赋值时自动增加,在这里id字段为表的主键,不能为空,紫铜会自动为字段插入自增的序列值。

同时插入多条记录

  INSERT语句可以同时相数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法为:

1
2
INSERT  INTO  tbl_name (column_list) 
   VALUES  (value_list1), (value_list2),(value_list3);

在person表中,在name、age和info字段指定插入值,同时插入3条新记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql>   INSERT  INTO  person( name , age, info)
     ->       VALUES  ( 'Evans' ,27,  'secretary' ),
     ->      ( 'Dale' ,22,  'cook' ),
     ->      ( 'Edison' ,28,  'singer' );
Query OK, 3  rows  affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql>  SELECT  FROM  person;                                                              
+ ----+--------+-----+------------+
| id |  name    | age | info       |
+ ----+--------+-----+------------+
|  1 | Green  |  21 | Lawyer     |
|  2 | Suse   |  22 | dancer     |
|  3 | Willam |  20 | sports man |
|  4 | Laura  |  25 |  NULL        |
|  5 | Evans  |  27 | secretary  |
|  6 | Dale   |  22 | cook       |
|  7 | Edison |  28 | singer     |
+ ----+--------+-----+------------+
rows  in  set  (0.00 sec)

在person表中,不指定插入列表,同时插入2条新记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql>   INSERT  INTO  person
     ->       VALUES  (9, 'Harry' ,21,  'magician' ),
     ->      ( NULL , 'Harriet' ,19,  'pianist' );
Query OK, 2  rows  affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql>  SELECT  FROM  person;                                                              
+ ----+---------+-----+------------+
| id |  name     | age | info       |
+ ----+---------+-----+------------+
|  1 | Green   |  21 | Lawyer     |
|  2 | Suse    |  22 | dancer     |
|  3 | Willam  |  20 | sports man |
|  4 | Laura   |  25 |  NULL        |
|  5 | Evans   |  27 | secretary  |
|  6 | Dale    |  22 | cook       |
|  7 | Edison  |  28 | singer     |
|  9 | Harry   |  21 | magician   |
| 10 | Harriet |  19 | pianist    |
+ ----+---------+-----+------------+
rows  in  set  (0.00 sec)

将查询结果插入数据

 INSERT语句用来给数据表插入记录时,指定插入记录的列值。INSERT还可以将SELECT语句查询的结果插入到列表中,其基本语法为:

1
2
INSERT  INTO  tbl_name1 (column_list1) 
   SELECT  (column_list2)  FROM  table_name2  WHERE  (condition)

从person_old表中查询所有的记录,并将其插入到person表中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
首先,创建一个名为person_old的数据表,其表结构与person结构相同
mysql>  CREATE  TABLE  person_old
     -> (
     -> id      INT  UNSIGNED  NOT  NULL  AUTO_INCREMENT,
     ->  name    CHAR (40)  NOT  NULL  DEFAULT  '' ,
     -> age     INT  NOT  NULL  DEFAULT  0,
     -> info    CHAR (50)  NULL ,
     ->  PRIMARY  KEY  (id)
     -> );
Query OK, 0  rows  affected (0.11 sec)
 
向person_old表中添加两条记录
mysql>   INSERT  INTO  person_old
     ->       VALUES  (11, 'Harry' ,20,  'student' ), (12, 'Beckham' ,31,  'police' );
Query OK, 2  rows  affected (0.20 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql>  SELECT  FROM  person_old;
+ ----+---------+-----+---------+
| id |  name     | age | info    |
+ ----+---------+-----+---------+
| 11 | Harry   |  20 | student |
| 12 | Beckham |  31 | police  |
+ ----+---------+-----+---------+
rows  in  set  (0.00 sec)
 
插入数据到person表中
mysql>  INSERT  INTO  person(id,  name , age, info)
     ->       SELECT  id,  name , age, info  FROM  person_old;
Query OK, 2  rows  affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql>  SELECT  FROM  person;
+ ----+---------+-----+------------+
| id |  name     | age | info       |
+ ----+---------+-----+------------+
|  1 | Green   |  21 | Lawyer     |
|  2 | Suse    |  22 | dancer     |
|  3 | Willam  |  20 | sports man |
|  4 | Laura   |  25 |  NULL        |
|  5 | Evans   |  27 | secretary  |
|  6 | Dale    |  22 | cook       |
|  7 | Edison  |  28 | singer     |
|  9 | Harry   |  21 | magician   |
| 10 | Harriet |  19 | pianist    |
| 11 | Harry   |  20 | student    |
| 12 | Beckham |  31 | police     |
+ ----+---------+-----+------------+
11  rows  in  set  (0.00 sec)

7.2、更新数据

  表中有数据之后,可以对数据进行更新,其基本语法为:

1
2
3
UPDATE  table_name
     SET  col_name1=value1,col_name2=value2,...,
     WHERE  where_condition

在person表中,更新id值为11的记录,将age字段值改为15,将name字段值改为LiMing

1
2
3
4
5
6
7
8
9
10
11
mysql>  UPDATE  person  SET  age = 15,  name = 'LiMing'  WHERE  id = 11;
Query OK, 1 row affected (0.02 sec)
Rows  matched: 1  Changed: 1  Warnings: 0
 
mysql>  SELECT  FROM  person  WHERE  id=11;
+ ----+--------+-----+---------+
| id |  name    | age | info    |
+ ----+--------+-----+---------+
| 11 | LiMing |  15 | student |
+ ----+--------+-----+---------+
1 row  in  set  (0.00 sec)

在person表中,更新age值为19~22的记录,将info字段值都改为student

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql>  UPDATE  person  SET  info= 'student'   WHERE  age   BETWEEN  19  AND  22;  
Query OK, 6  rows  affected (0.02 sec)
Rows  matched: 6  Changed: 6  Warnings: 0
 
mysql>  SELECT  FROM  person  WHERE  age  BETWEEN  19  AND  22;                 
+ ----+---------+-----+---------+
| id |  name     | age | info    |
+ ----+---------+-----+---------+
|  1 | Green   |  21 | student |
|  2 | Suse    |  22 | student |
|  3 | Willam  |  20 | student |
|  6 | Dale    |  22 | student |
|  9 | Harry   |  21 | student |
| 10 | Harriet |  19 | student |
+ ----+---------+-----+---------+
rows  in  set  (0.00 sec)

7.3、删除数据

  从数据表中删除数据使用DELETE语句,其基本语法为:

1
DELETE  FROMN table_name [ WHERE  <condition>]

在person表中,删除id等于11的记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
执行删除操作前,使用 SELECT 语句查看当前id=11的记录
mysql>   SELECT  FROM  person  WHERE  id=11;
+ ----+--------+-----+---------+
| id |  name    | age | info    |
+ ----+--------+-----+---------+
| 11 | LiMing |  15 | student |
+ ----+--------+-----+---------+
1 row  in  set  (0.00 sec)
 
使用 DELETE 语句删除该记录
mysql>   DELETE  FROM  person  WHERE  id = 11;
Query OK, 1 row affected (0.02 sec)
 
语句执行完毕,查看执行结果:
mysql>   SELECT  FROM  person  WHERE  id=11;
Empty  set  (0.00 sec)

在person表中,使用DELETE语句同时删除多条记录,删除age字段在19-22的记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
执行删除操作前,使用 SELECT 语句查看当前的数据
mysql>   SELECT  FROM  person  WHERE  age  BETWEEN  19  AND  22;
+ ----+---------+-----+---------+
| id |  name     | age | info    |
+ ----+---------+-----+---------+
|  1 | Green   |  21 | student |
|  2 | Suse    |  22 | student |
|  3 | Willam  |  20 | student |
|  6 | Dale    |  22 | student |
|  9 | Harry   |  21 | student |
| 10 | Harriet |  19 | student |
+ ----+---------+-----+---------+
rows  in  set  (0.00 sec)
 
DELETE 删除这些记录
mysql>   DELETE  FROM  person  WHERE  age  BETWEEN  19  AND  22;
Query OK, 6  rows  affected (0.01 sec)
 
查看执行结果
mysql>   SELECT  FROM  person  WHERE  age  BETWEEN  19  AND  22;
Empty  set  (0.00 sec)

删除person表中所有记录,SQL语句如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
执行删除操作前,使用 SELECT 语句查看当前的数据:
  mysql>  SELECT  FROM  person;
+ ----+---------+-----+-----------+
| id |  name     | age | info      |
+ ----+---------+-----+-----------+
|  4 | Laura   |  25 |  NULL       |
|  5 | Evans   |  27 | secretary |
|  7 | Edison  |  28 | singer    |
| 12 | Beckham |  31 | police    |
+ ----+---------+-----+-----------+
rows  in  set  (0.00 sec)
 
执行 DELETE 语句删除这4条记录
mysql>   DELETE  FROM  person;
Query OK, 4  rows  affected (0.01 sec)
 
查看执行结果:
mysql>   SELECT  FROM  person;
Empty  set  (0.00 sec)

  如果想删除表中的所有记录,还可以使用TRUNCATE TABLE语句,TRUNCATE将直接删除原来的表并重新创建一个表,其语法结构为TRUNCATE TABLE table_name。TRUNCATE直接删除表而不是删除记录,因此执行速度比DELETE快。




本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/1953245,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
300 0
|
存储 关系型数据库 MySQL
mysql添加和删除数据库以及数据类型
mysql添加和删除数据库以及数据类型
259 1
|
关系型数据库 MySQL 测试技术
mysql中删除数据的几种方法
在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据。在执行删除操作时,需要谨慎,以免误删重要数据。
1684 3
|
SQL 关系型数据库 MySQL
MySQL删除数据后磁盘空间的释放总结
MySQL删除数据后磁盘空间的释放总结
1890 0
|
关系型数据库 MySQL 数据库
在MySQL数据库中插入、更新与删除数据
在MySQL数据库中插入、更新与删除数据。
310 2
|
存储 关系型数据库 MySQL
MySQL删除数据 文件大小不变的原因以及处理空洞问题
总之,MySQL中删除数据后文件大小不变的现象是由于InnoDB存储引擎的设计决策,旨在优化性能和空间的重用。处理这一问题需要综合考量数据库的使用场景以及可能的性能影响,选择合适的策略
1725 6
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之 MySQL数据库中,执行delete命令删除数据后,存储空间通常不会立即释放,该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
548 2
|
SQL 关系型数据库 MySQL
MySQL数据库——图形化界面工具(DataGrip),SQL(2)-DML(插入、修改和删除数据)
MySQL数据库——图形化界面工具(DataGrip),SQL(2)-DML(插入、修改和删除数据)
1926 1
|
SQL 关系型数据库 MySQL
【MySQL-7】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)
【MySQL-7】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)
|
关系型数据库 MySQL 数据库
mysql,归零,无法自动排序,删除id,表单的数据没有从零开始出现怎样解决?删除数据仍然从删除的地方该怎样解决?表单的数据没有从2开始,而是从之前的删除的序号开始自增。
mysql,归零,无法自动排序,删除id,表单的数据没有从零开始出现怎样解决?删除数据仍然从删除的地方该怎样解决?表单的数据没有从2开始,而是从之前的删除的序号开始自增。

推荐镜像

更多