当前位置: 首页 > news >正文

我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习

ℹ️大家好,我是练小杰,今天是星期四了,明天就是星期五了!!这周过得真快啊!!
本文将针对MYSQL数据表内容的插入,更新以及删除,相关命令的各种练习~~
复习:👉【插入、更新与删除数据详解】
数据库专栏👉【数据库专栏】~
想要了解更多内容,主页 【练小杰的CSDN】

在这里插入图片描述

文章目录

  • 前言
  • 使用表person举例
  • 向表中插入数值
    • 插入一条新记录,id值为1,name值为lxj,age值为21,info值为Student
    • 插入数据不按照表定义顺序
    • 插入数据时列名为空
    • 插入一条新记录,name值为SU,age值为20,info值为sports man
    • 插入一条新记录,name值为LJ,age值为55
    • 插入多条数据
    • 在person表中,不指定插入列表,同时插入2条新记录
  • 从源表中筛选记录添加到目标表
  • 向表中更新数据
    • 在person表中,更新id值为11的记录,将age字段值改为15,将name字段值改为LiMing
    • 在person表中,更新age值为19~22的记录,将info字段值都改为student
  • 删除表中数据
    • 在person表中,删除id等于11的记录
    • 在person表中,使用DELETE语句同时删除多条记录,在前面UPDATE语句中将age字段值在19~22之间的记录的info字段值修改为student
    • 删除person表中所有记录
    • TRUNCATE TABLE语句删除表
      • 举例:删除表person_old并查看记录
    • drop语句删除表person_old

在这里插入图片描述

前言

建议先了解基础概念👉【Mysql插入、更新与删除数据详解】
⚠️MySQL中可以灵活的对数据进行插入与更新,且MySQL中对数据地操作没有任何提示,因此在更新和删除数据时,一要谨慎小心,查询条件一定要准确,避免造成数据的丢失。

使用表person举例

  • 创建数据表,sql语句如下:
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)
);

向表中插入数值

向表中所有字段插入值的方法有两种:一种是指定所有字段名,另一种是完全不指定字段名。

插入一条新记录,id值为1,name值为lxj,age值为21,info值为Student

SQL语句如下:

  • 执行插入操作之前,使用SELECT语句查看表中的数据:
SELECT * FROM person;
Empty set (0.00 sec)

结果显示当前表为空,没有数据(Empty set)

  • 执行插入操作:
INSERT INTO person (id ,name, age , info)VALUES (1,'lxj', 21, 'Student');
Query OK, 1 row affected (0.00 sec)
  • 语句执行完毕,查看表里的数据:
 SELECT * FROM person;
+----+------+-----+---------+
| id | name | age | info    |
+----+------+-----+---------+
|  1 | lxj  |  21 | Student |
+----+------+-----+---------+
1 row in set (0.00 sec)

可以看到插入记录成功。在插入数据时,指定了person表的所有字段,因此将为每一个字段插入新的值。

插入数据不按照表定义顺序

INSERT语句后面的列名称顺序可以不是person表定义时的顺序。即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列字段的顺序相同就可以,如下所示。

  • 插入一条新记录,id值为2,name值为GEM,age值为22,info值为singer

SQL语句如下:

INSERT INTO person (age ,name, id , info)VALUES (22, 'GEM', 2, 'singer');
  • 语句执行完毕,查看表数据:
 SELECT * FROM person;
+----+------+-----+---------+
| id | name | age | info    |
+----+------+-----+---------+
|  1 | lxj  |  21 | Student |
|  2 | GEM  |  22 | singer  |
+----+------+-----+---------+
2 rows in set (0.01 sec)

由结果可以看到,INSERT语句成功插入了一条记录。

插入数据时列名为空

使用INSERT插入数据时,允许列名称列表column_list为空,此时,值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同,如下所示。

  • 插入一条新记录,id值为3,name值为EASON,age值为24,info值为songwriter,SQL语句如下:
 INSERT INTO person VALUES (3,'EASON', 24, 'songwriter');
Query OK, 1 row affected (0.00 sec)

语句执行完毕,查看执行结果:

 SELECT * FROM person;
+----+-------+-----+------------+
| id | name  | age | info       |
+----+-------+-----+------------+
|  1 | lxj   |  21 | Student    |
|  2 | GEM   |  22 | singer     |
|  3 | EASON |  24 | songwriter |
+----+-------+-----+------------+
3 rows in set (0.01 sec)

插入一条新记录,name值为SU,age值为20,info值为sports man

  • SQL语句如下:
 INSERT INTO person (name, age,info)VALUES('SU', 20, 'sports man');
Query OK, 1 row affected (0.00 sec)

提示信息表示插入一条记录成功

  • 使用SELECT查询表中的记录,查询结果如下:
 SELECT * FROM person;
+----+-------+-----+------------+
| id | name  | age | info       |
+----+-------+-----+------------+
|  1 | lxj   |  21 | Student    |
|  2 | GEM   |  22 | singer     |
|  3 | EASON |  24 | songwriter |
|  4 | SU    |  20 | sports man |
+----+-------+-----+------------+
4 rows in set (0.00 sec)

插入一条新记录,name值为LJ,age值为55

  • SQL语句如下:
 INSERT INTO person (name, age ) VALUES ('LJ', 55);
  • 语句执行完毕,查看表数据
SELECT * FROM person;
+----+-------+-----+------------+
| id | name  | age | info       |
+----+-------+-----+------------+
|  1 | lxj   |  21 | Student    |
|  2 | GEM   |  22 | singer     |
|  3 | EASON |  24 | songwriter |
|  4 | SU    |  20 | sports man |
|  5 | LJ    |  55 | NULL       |
+----+-------+-----+------------+
5 rows in set (0.00 sec)

插入多条数据

  • 在name、age和info字段指定插入值,同时插入3条新记录,SQL语句如下:
INSERT INTO person(name, age, info)
VALUES ('xiaojie',24, 'Employee'),
('Dale',22, 'cook'),
('Andy Lau',28, 'singer');
  • 语句执行完毕,查看执行结果:
  SELECT * FROM person;
+----+----------+-----+------------+
| id | name     | age | info       |
+----+----------+-----+------------+
|  1 | lxj      |  21 | Student    |
|  2 | GEM      |  22 | singer     |
|  3 | EASON    |  24 | songwriter |
|  4 | SU       |  20 | sports man |
|  5 | LJ       |  55 | NULL       |
|  6 | xiaojie  |  24 | Employee   |
|  7 | Dale     |  22 | cook       |
|  8 | Andy Lau |  28 | singer     |
+----+----------+-----+------------+
8 rows in set (0.00 sec)

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

  • SQL语句如下:
INSERT INTO person 
VALUES (9,'Harry',21, 'magician'), 
(NULL,'Harriet',19, 'pianist');
  • 语句执行结果如下:
 INSERT INTO personVALUES (9,'Harry',21, 'magician'),(NULL,'Harriet',19, 'pianist');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
  • 语句执行完毕,查看执行结果:
 SELECT * FROM person;+----+----------+-----+------------+
| id | name     | age | info       |
+----+----------+-----+------------+
|  1 | lxj      |  21 | Student    |
|  2 | GEM      |  22 | singer     |
|  3 | EASON    |  24 | songwriter |
|  4 | SU       |  20 | sports man |
|  5 | LJ       |  55 | NULL       |
|  6 | xiaojie  |  24 | Employee   |
|  7 | Dale     |  22 | cook       |
|  8 | Andy Lau |  28 | singer     |
|  9 | Harry    |  21 | magician   |
| 10 | Harriet  |  19 | pianist    |
+----+----------+-----+------------+
10 rows in set (0.00 sec)

从源表中筛选记录添加到目标表

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

  • 首先,创建一个名为person_old的数据表,其表结构与person结构相同
    SQL语句如下:
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)
);
  • person_old表中添加两条记录
INSERT INTO person_oldVALUES (11,'LiHua',20, 'student'), (12,'Judy Hopps',31, 'police');
  • 查看表person_old 的数据内容
 SELECT * FROM person_old;
+----+------------+-----+---------+
| id | name       | age | info    |
+----+------------+-----+---------+
| 11 | LiHua      |  20 | student |
| 12 | Judy Hopps |  31 | police  |
+----+------------+-----+---------+
2 rows in set (0.00 sec)

可以看到,插入记录成功,peson_old表中现在有两条记录。

  • 然后,将person_old表中所有的记录插入person表中,SQL语句如下:
INSERT INTO person(id, name, age, info)
SELECT id, name, age, info FROM person_old;
  • 执行完毕,查看执行结果:
 SELECT * FROM person;+----+------------+-----+------------+
| id | name       | age | info       |
+----+------------+-----+------------+
|  1 | lxj        |  21 | Student    |
|  2 | GEM        |  22 | singer     |
|  3 | EASON      |  24 | songwriter |
|  4 | SU         |  20 | sports man |
|  5 | LJ         |  55 | NULL       |
|  6 | xiaojie    |  24 | Employee   |
|  7 | Dale       |  22 | cook       |
|  8 | Andy Lau   |  28 | singer     |
|  9 | Harry      |  21 | magician   |
| 10 | Harriet    |  19 | pianist    |
| 11 | LiHua      |  20 | student    |
| 12 | Judy Hopps |  31 | police     |
+----+------------+-----+------------+
12 rows in set (0.00 sec)

向表中更新数据

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

  • SQL语句如下:
UPDATE person SET age = 15, name='LiMing' WHERE id = 11;
  • 更新操作执行前可以使用SELECT语句查看当前的数据:
SELECT * FROM person WHERE id=11;
+----+--------+-----+---------+
| id | name   | age | info    |
+----+--------+-----+---------+
| 11 | LiHua  |  20 | student |
+----+--------+-----+---------+
1 row in set (0.01 sec)

由结果可以看到在更新之前,id等于11的记录的name字段值为LiHua,age字段值为20

  • 下面使用UPDATE语句更新数据,语句执行结果如下:
 UPDATE person SET age = 15, name='LiMing' WHERE id = 11;Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  • 语句执行完毕,查看执行结果:
 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

  • SQL语句如下:
UPDATE person SET info='student'  WHERE id  BETWEEN 19 AND 22;
  • 更新操作之前可以使用SELECT语句查看当前的数据:
 SELECT * FROM person WHERE age BETWEEN 19 AND 22;+----+---------+-----+------------+
| id | name    | age | info       |
+----+---------+-----+------------+
|  1 | lxj     |  21 | Student    |
|  2 | GEM     |  22 | singer     |
|  4 | SU      |  20 | sports man |
|  7 | Dale    |  22 | cook       |
|  9 | Harry   |  21 | magician   |
| 10 | Harriet |  19 | pianist    |
+----+---------+-----+------------+
6 rows in set (0.00 sec)

可以看到,这些age字段值在19~22之间的记录的info字段值各不相同。

  • 下面使用UPDATE语句更新数据,语句执行结果如下:
UPDATE person SET info='student' WHERE age BETWEEN 19 AND 22;
Query OK, 6 rows affected (0.01 sec)
Rows matched: 6  Changed: 6  Warnings: 0
  • 执行完毕,再次查看表的数据内容:
 SELECT * FROM person WHERE age BETWEEN 19 AND 22;+----+---------+-----+---------+
| id | name    | age | info    |
+----+---------+-----+---------+
|  1 | lxj     |  21 | student |
|  2 | GEM     |  22 | student |
|  4 | SU      |  20 | student |
|  7 | Dale    |  22 | student |
|  9 | Harry   |  21 | student |
| 10 | Harriet |  19 | student |
+----+---------+-----+---------+
6 rows in set (0.00 sec)

删除表中数据

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

  • SQL语句如下:

执行删除操作前,先用SELECT语句查看当前id=11的记录

SELECT * FROM person WHERE id=11;
+----+--------+-----+---------+
| id | name   | age | info    |
+----+--------+-----+---------+
| 11 | LiMing |  15 | student |
+----+--------+-----+---------+
1 row in set (0.00 sec)

可以看到,现在表中有id=11的记录

  • 下面使用DELETE语句删除该记录,语句执行结果如下:
DELETE FROM person WHERE id = 11;
Query OK, 1 row affected (0.01 sec)

语句执行完毕,查看执行结果:

SELECT * FROM person WHERE id=11;Empty set (0.01 sec)

查询结果为空,说明删除操作成功。

在person表中,使用DELETE语句同时删除多条记录,在前面UPDATE语句中将age字段值在19~22之间的记录的info字段值修改为student

  • 删除多条记录,SQL语句如下:
DELETE FROM person WHERE age BETWEEN 19 AND 22;
  • 执行删除操作之前,使用SELECT语句查看当前的数据:
 SELECT * FROM person WHERE age BETWEEN 19 AND 22;+----+---------+-----+---------+
| id | name    | age | info    |
+----+---------+-----+---------+
|  1 | lxj     |  21 | student |
|  2 | GEM     |  22 | student |
|  4 | SU      |  20 | student |
|  7 | Dale    |  22 | student |
|  9 | Harry   |  21 | student |
| 10 | Harriet |  19 | student |
+----+---------+-----+---------+
6 rows in set (0.00 sec)

可以看到,筛选出age字段值在19~22之间的记录

  • 使用DELETE删除这些记录:
DELETE FROM person WHERE age BETWEEN 19 AND 22;
Query OK, 6 rows affected (0.01 sec)
  • 语句执行完毕,查看执行结果:
 SELECT * FROM person WHERE age BETWEEN 19 AND 22;Empty set (0.00 sec)

查询结果为空,删除多条记录成功

删除person表中所有记录

  • SQL语句如下:
DELETE FROM person;
  • 执行删除操作前,使用SELECT语句查看当前的数据:
 SELECT * FROM person;+----+------------+-----+------------+
| id | name       | age | info       |
+----+------------+-----+------------+
|  3 | EASON      |  24 | songwriter |
|  5 | LJ         |  55 | NULL       |
|  6 | xiaojie    |  24 | Employee   |
|  8 | Andy Lau   |  28 | singer     |
| 12 | Judy Hopps |  31 | police     |
+----+------------+-----+------------+
5 rows in set (0.00 sec)
  • 结果显示person表中还有5条记录,执行DELETE语句删除这5条记录:
DELETE FROM person;
Query OK, 5 rows affected (0.01 sec)
  • 语句执行完毕,查看执行结果:
 SELECT * FROM person;Empty set (0.00 sec)

查询结果为空,删除表中所有记录成功,表person中已经没有任何数据记录

TRUNCATE TABLE语句删除表

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

举例:删除表person_old并查看记录

TRUNCATE TABLE person_old;
Query OK, 0 rows affected (0.06 sec)
  • 查看表person_old数据
    可以看到,数据内容已清空,执行成功
SELECT * FROM person_old;
Empty set (0.01 sec)
  • 查看该数据库所拥有的表格,可以看到表格依旧存在,只是表里不存在数据
show tables;
+---------------+
| Tables_in_lxj |
+---------------+
| person        |
| person_old    |
+---------------+

drop语句删除表person_old

DROP TABLE 会删除整个表,包括表结构和所有数据。 这是一个不可逆的操作,执行后表将不复存在。

  • 执行drop语句之前先查看当前所有表
show tables;
+---------------+
| Tables_in_lxj |
+---------------+
| person        |
| person_old    |
+---------------+
  • 用drop语句删除表person_old
drop table  person_old;
Query OK, 0 rows affected (0.05 sec)
  • 执行完成后再次查看,可以看到表person_old 已经完全删除,不复存在
show tables;
+---------------+
| Tables_in_lxj |
+---------------+
| person        |
+---------------+
1 rows in set (0.01 sec)

本节有关mysql数据库的插入、更新以及删除数据的版块已结束,周五再见啦!!
😆 欢迎查看主页 【练小杰的CSDN】
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!

在这里插入图片描述


http://www.mrgr.cn/news/82324.html

相关文章:

  • 《塑战核心》V1.0.0.9952官方中文版
  • 自动生成RESTful API——Spring Data Rest
  • DiT(Diffusion Transformer)详解——AIGC时代的新宠儿
  • C#设计模式(行为型模式):观察者模式
  • 【计算机视觉技术 - 人脸生成】2.GAN网络的构建和训练
  • STM32G0B1 can Error_Handler 解决方法
  • 在DJI无人机上运行VINS-FUISON(PSDK 转 ROS)
  • 人脑处理信息的速度与效率:超越计算机的直观判断能力
  • win32汇编环境,窗口程序显示bmp图像文件
  • Structured-Streaming集成Kafka
  • LinuxC高级day5
  • CTFshow—远程命令执行
  • Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!
  • 国产编辑器EverEdit - 常用资源汇总
  • ubuntu开启root用户
  • ruoyi开发学习
  • 【计组不挂科】计算机组成综合习题库(选择题207道&判断题93道&填空题143道)(含答案与解析)
  • 数据挖掘——聚类
  • 【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
  • 嵌入式Linux驱动开发的基本知识(驱动程序的本质、常见的设备类型、设备号的本质理解、设备实例的注册过程)
  • Geotrust SSL证书
  • PHP入门笔记汇总
  • CG顶会论文阅读|《科技论文写作》硕士课程报告
  • 51c自动驾驶~合集44
  • Javascript算法——回溯算法(组合问题)
  • 25年1月更新。Windows 上搭建 Python 开发环境:Python + PyCharm 安装全攻略(文中有安装包不用官网下载)