我在广州学 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】
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!