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

我在广州学 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 person
     VALUES (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_old
     VALUES (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.kler.cn/a/468872.html

相关文章:

  • 【网络安全设备系列】9、WAF(Web应用防火墙)
  • 前端访问一个图片URL时,浏览器默认会尝试下载文件而不是直接显示它
  • nginx-灰度发布策略(split_clients)
  • 前端小案例——520表白信封
  • 跨站脚本攻击(XSS)详解
  • 《数据结构》期末考试测试题【中】
  • Go语言的 的编程环境(programming environment)基础知识
  • CBAM (Convolutional Block Attention Module)注意力机制详解
  • Docker-Compose安装和使用
  • 联发科MTK6771/MT6771安卓核心板规格参数介绍
  • 曲靖郎鹰金属构件有限公司受邀出席第十七届中国工业论坛
  • vulnhub——Earth靶机
  • 单片机-LED实验
  • 【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)
  • 数据分析思维(八):分析方法——RFM分析方法
  • php反序列化 触发的魔术方法 原理 pop链构造 ctfshow 练习
  • UML之发现用例
  • 【Blackbox Exporter】prober.Handler源码详细分析
  • 缓存-文章目录
  • Qt 5.14.2 学习记录 —— 일 新项目
  • python:多线程 简单示例
  • 毛泽东思想概论
  • 【Docker】docker启动命令,不执行特定程序,但是让容器保持启动
  • 微信小程序几种数据通信方式记录
  • C++基础概念复习
  • Prism模块化