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

ℹ️大家好,我是练小杰,今天是星期四了,明天就是星期五了!!这周过得真快啊!!

本文将针对MYSQL数据表内容的插入,更新以及删除,相关命令的各种练习~~

复习:👉【插入、更新与删除数据详解

数据库专栏👉【数据库专栏】~

想要了解更多内容,主页 【练小杰的CSDN

文章目录

前言

建议先了解基础概念👉【Mysql插入、更新与删除数据详解

⚠️MySQL中可以灵活的对数据进行插入与更新,且MySQL中对数据地操作没有任何提示,因此在更新和删除数据时,一要谨慎小心,查询条件一定要准确,避免造成数据的丢失。

使用表person举例

  • 创建数据表,sql语句如下:
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语句查看表中的数据:
sql 复制代码
SELECT * FROM person;
Empty set (0.00 sec)

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

  • 执行插入操作:
sql 复制代码
INSERT INTO person (id ,name, age , info)
      VALUES (1,'lxj', 21, 'Student');
Query OK, 1 row affected (0.00 sec)
  • 语句执行完毕,查看表里的数据:
sql 复制代码
 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语句如下:

sql 复制代码
INSERT INTO person (age ,name, id , info)
      VALUES (22, 'GEM', 2, 'singer');
  • 语句执行完毕,查看表数据:
sql 复制代码
 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语句如下:
sql 复制代码
 INSERT INTO person 
     VALUES (3,'EASON', 24, 'songwriter');
Query OK, 1 row affected (0.00 sec)

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

sql 复制代码
 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语句如下:
sql 复制代码
 INSERT INTO person (name, age,info)
     VALUES('SU', 20, 'sports man');
Query OK, 1 row affected (0.00 sec)

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

  • 使用SELECT查询表中的记录,查询结果如下:
sql 复制代码
 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语句如下:
sql 复制代码
 INSERT INTO person (name, age ) VALUES ('LJ', 55);
  • 语句执行完毕,查看表数据
sql 复制代码
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语句如下:
sql 复制代码
INSERT INTO person(name, age, info)
VALUES ('xiaojie',24, 'Employee'),
('Dale',22, 'cook'),
('Andy Lau',28, 'singer');
  • 语句执行完毕,查看执行结果:
sql 复制代码
  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语句如下:
sql 复制代码
INSERT INTO person 
VALUES (9,'Harry',21, 'magician'), 
(NULL,'Harriet',19, 'pianist');
  • 语句执行结果如下:
sql 复制代码
 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
  • 语句执行完毕,查看执行结果:
sql 复制代码
 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语句如下:
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表中添加两条记录
sql 复制代码
INSERT INTO person_old
     VALUES (11,'LiHua',20, 'student'), (12,'Judy Hopps',31, 'police');
  • 查看表person_old 的数据内容
sql 复制代码
 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语句如下:
sql 复制代码
INSERT INTO person(id, name, age, info)
SELECT id, name, age, info FROM person_old;
  • 执行完毕,查看执行结果:
sql 复制代码
 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语句如下:
sql 复制代码
UPDATE person SET age = 15, name='LiMing' WHERE id = 11;
  • 更新操作执行前可以使用SELECT语句查看当前的数据:
sql 复制代码
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语句更新数据,语句执行结果如下:
sql 复制代码
 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
  • 语句执行完毕,查看执行结果:
sql 复制代码
 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语句如下:
sql 复制代码
UPDATE person SET info='student'  WHERE id  BETWEEN 19 AND 22;
  • 更新操作之前可以使用SELECT语句查看当前的数据:
sql 复制代码
 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语句更新数据,语句执行结果如下:
sql 复制代码
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
  • 执行完毕,再次查看表的数据内容:
sql 复制代码
 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的记录

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

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

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

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

sql 复制代码
SELECT * FROM person WHERE id=11;
 Empty set (0.01 sec)

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

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

  • 删除多条记录,SQL语句如下:
sql 复制代码
DELETE FROM person WHERE age BETWEEN 19 AND 22;
  • 执行删除操作之前,使用SELECT语句查看当前的数据:
sql 复制代码
 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删除这些记录:
sql 复制代码
DELETE FROM person WHERE age BETWEEN 19 AND 22;
Query OK, 6 rows affected (0.01 sec)
  • 语句执行完毕,查看执行结果:
sql 复制代码
 SELECT * FROM person WHERE age BETWEEN 19 AND 22;
 Empty set (0.00 sec)

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

删除person表中所有记录

  • SQL语句如下:
sql 复制代码
DELETE FROM person;
  • 执行删除操作前,使用SELECT语句查看当前的数据:
sql 复制代码
 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条记录:
sql 复制代码
DELETE FROM person;
Query OK, 5 rows affected (0.01 sec)
  • 语句执行完毕,查看执行结果:
sql 复制代码
 SELECT * FROM person;
 Empty set (0.00 sec)

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

TRUNCATE TABLE语句删除表

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

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

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

drop语句删除表person_old

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

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

本节有关mysql数据库的插入、更新以及删除数据的版块已结束,周五再见啦!!

😆 欢迎查看主页 【练小杰的CSDN

ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!

⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!

相关推荐
电脑能手5 分钟前
[保姆级教程] 解决不同局域网电脑无法SSH的问题
运维·ssh·电脑
peace..10 分钟前
温湿度变送器与电脑进行485通讯连接并显示在触摸屏中(mcgs)
经验分享·学习·其他
m0_6239556627 分钟前
Oracle使用SQL一次性向表中插入多行数据
数据库·sql·oracle
czhc114007566340 分钟前
Linux 76 rsync
linux·运维·python
福柯柯1 小时前
Android ContentProvider的使用
android·contenprovider
不想迷路的小男孩1 小时前
Android Studio 中Palette跟Component Tree面板消失怎么恢复正常
android·ide·android studio
餐桌上的王子1 小时前
Android 构建可管理生命周期的应用(一)
android
菠萝加点糖1 小时前
Android Camera2 + OpenGL离屏渲染示例
android·opengl·camera
用户2018792831671 小时前
🌟 童话:四大Context徽章诞生记
android
软件黑马王子1 小时前
C#系统学习第八章——字符串
开发语言·学习·c#