我在广州学 Mysql 系列——插入、更新与删除数据详解及练习

ℹ️大家好,我是练小杰,今天是2024年12月30号,明天就是2024最后一天了!!

本文将讲述MYSQL数据库的插入,更新以及删除数据~~

复习:👉【有关Mysql数据库的单表,多表查询的练习

同时,数据库相关内容查看专栏👉【数据库专栏】~

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

"人人期望可达到,我的快乐比天高,人人如意开心欢笑,跳进美梦寻获美好,爬进奇妙口袋里,你的希望必得到~~"

朋友们,今年的梦想都实现了吗?😏

文章目录

插入数据

基本语法

sql 复制代码
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

为数据表的字段插入单条数据

  • 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值。
sql 复制代码
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...);

说明

  • INSERT INTO: 这是 SQL 语句的关键字,表示要执行插入操作
  • table_name: 指定要将数据插入到哪个数据表中,它是数据库中已经存在的数据表的名称。例如,如果你的数据库中有一个名为 employees 的表,你就可以将 table_name 替换为 employees。
  • (column1, column2, column3,...):这部分是可选择的,但通常会使用它。列出了你想要插入数据的具体字段。你可以选择只插入表中的部分字段,而不是全部字段。这样做的好处是,当表的字段较多,而你只需要插入部分字段的数据时,可以明确指定要操作的字段。字段名称需要准确对应表中的列名,它们之间用逗号分隔。
  • VALUES (value1, value2, value3,...):这里列出了要插入到上述指定字段中的具体数据值。这些值的顺序必须与 (column1, column2, column3,...) 中字段的顺序一一对应。换句话说,就是value1 将被插入到 column1value2 将被插入到 column2,以此类推。

同时插入多条记录

  • INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开
  • 基本语法格式:
sql 复制代码
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES 
    (值1a, 值2a, 值3a, ...),
    (值1b, 值2b, 值3b, ...),
    (值1c, 值2c, 值3c, ...);
  • 举例:
    若有一个名为 lxj 的表,表结构为:
sql 复制代码
INSERT INTO students (id, name, age)
VALUES (1, '哆啦A梦', 31),(2,'野比大雄',10),(3,'源静香',11);

将查询结果插入到表中

  • INSERT语句和SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多个行。
sql 复制代码
INSERT INTO 目标表 (列1, 列2, 列3, ...)
SELECT 列1, 列2, 列3, ...
FROM 源表
WHERE 条件;

说明

  • 目标表:数据将被插入到的表
  • (列1, 列2, 列3, ...) :可选,指定目标表中要插入数据的列。若省略,则默认插入所有列,且值的顺序应与目标表中列的顺序一致。
  • SELECT ... FROM 源表 WHERE 条件:标准的 SELECT 查询,用于从源表中检索数据。

使用 INSERT INTO ... SELECT 插入所有列

  • 目标表和源表的列完全一致,可以省略列名。
  • ⚠️ 一定要确保两个表的列顺序和类型完全一致,否则可能会导致数据插入错误。
sql 复制代码
INSERT INTO 目标表
SELECT *FROM 源表
WHERE 列名 = '数值';

更新数据

  • 更新数据主要使用 UPDATE 语句。
  • UPDATE 语句允许你修改表中现有的记录。根据需求,你可以更新单条记录、多条记录,甚至使用复杂的条件来精确控制需要更新的数据。
sql 复制代码
UPDATE 表名
SET 列1 = 新值1, 列2 = 新值2, ...
WHERE 条件;

说明

  • 表名 :要更新的表名称。
  • SET 列1 = 新值1, 列2 = 新值2, ... :指定要更新的列及其新值。可以更新一个或多个列。
  • WHERE 条件 :可选,指定哪些记录需要被更新。如果省略 WHERE 子句,表中的所有记录都会被更新

使用 ORDER BY 和 LIMIT 配合用

  • ORDER BY:指定更新的顺序。
  • LIMIT:限制更新的记录数。
sql 复制代码
UPDATE 表名
SET 列1 = 新值1, 列2 = 新值2, ...
WHERE 条件
ORDER BY 列 [ASC|DESC]
LIMIT 行数;

注意事项

1.备份数据:在执行更新操作之前,建议备份相关数据,以防出现意外情况。

2.使用 WHERE 子句:始终使用 WHERE 子句来指定要更新的记录,避免意外更新所有记录。

3.事务处理:对于重要的更新操作,建议使用事务 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。

4.权限问题:确保执行更新操作的用户具有对目标表的适当权限。

5.外键约束:如果表中有外键约束,更新操作必须符合外键约束条件。

6.索引优化:对于大数据量的更新操作,确保相关列有适当的索引,以提高更新效率。

删除数据

  • 从数据表中删除数据使用DELETE语句,DELETE语句允许WHERE子句指定删除条件。
  • 此外,还有 TRUNCATEDROP 语句用于删除表中的所有数据或删除整个表。

DELETE 命令删除表数据

sql 复制代码
DELETE FROM 表名 WHERE 条件;

表名:这里的表名,指要删除数据的表名称

WHERE 条件:可选,指定哪些记录需要被删除。如果省略 WHERE 子句,表中的所有记录都会被删除。

使用 TRUNCATE 语句删除所有数据

  • TRUNCATE 操作无法回滚,因此在执行前请确保数据不再需要或已备份
sql 复制代码
TRUNCATE TABLE 表名;

说明

TRUNCATE 会快速删除表中的所有数据,但不会逐行删除,而是直接清空表。
TRUNCATEDELETE FROM 表名 不同,如果表有自增列,TRUNCATE 会重置自增计数器。

TRUNCATE 不支持 WHERE 子句,因此无法删除特定条件的数据。

举例:清空表 lxj 中的所有数据

  • 清空数据之前最好先备份
sql 复制代码
TRUNCATE TABLE lxj;

使用 DROP 语句删除表

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

sql 复制代码
DROP TABLE 表名;

DELETE 进阶用法(结合 JOIN)

  • 假设有一个名为 employees 的表,数据如下:

- 从 employees 表中删除所有属于 "关闭的部门" 的员工

sql 复制代码
DELETE e
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE d.name = '关闭的部门';

总结

  • 三种主要删除数据命令的区别:

DELETE:用于删除表中的特定记录或所有记录,但保留表结构。
TRUNCATE:用于快速删除表中的所有数据,并重置自增计数器,但保留表结构。
DROP:用于删除整个表,包括表结构和所有数据。

实例

创建数据表books,并定义各个字段

sql 复制代码
CREATE TABLE books
(
id      	INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name   	VARCHAR(40) NOT NULL,
authors  VARCHAR(200) NOT NULL,
price    	INT(11) NOT NULL,
pubdate 	YEAR NOT NULL,
note    	VARCHAR(255) NULL,
num    	INT NOT NULL DEFAULT 0
);

插入books表中数据,分别使用不同的方法插入记录

  • 表创建好之后,用SELECT语句查看表中的数据,结果如下:
sql 复制代码
SELECT * FROM books;
Empty set (0.00 sec)

可以看到,当前表中为空,没有任何数据,下面向表中插入记录。

  • 指定所有字段名称插入单条记录
    SQL语句如下:
sql 复制代码
 INSERT INTO books (id, name, authors, price, pubdate,note,num)
   VALUES(1, 'Tale of AAA', 'Dickes', 23, '1995', 'novel',11);
Query OK, 1 row affected (0.02 sec)
  • 不指定字段名称插入单条记录
    SQL语句如下:
sql 复制代码
 INSERT INTO books
   VALUES (2,'EmmaT','Jane lura',35,'1993','joke',22);
Query OK, 1 row affected (0.01 sec)
  • 再使用SELECT语句查看当前表中的数据
sql 复制代码
 SELECT * FROM books;
+----+------------------+-----------+-------+---------+---------+-----+
| id | name        | authors   | price | pubdate | note   | num |
+----+-----------------+-----------+---------+---------+---------+-----+
|  1 | Tale of AAA | Dickes  |    23 |  1995 | novel  |  11  |
|  2 | EmmaT    | Jane lura  |    35 |  1993 | joke   |  22  |
+----+----------------+-------------+---------+----------+-------+------+
2 rows in set (0.00 sec)

可以看到,两条语句分别成功插入了两条记录。

  • 同时插入多条记录,使用INSERT语句将剩下的多条记录插入表中,SQL语句如下:
sql 复制代码
 INSERT INTO books
  VALUES(3, 'Story of Jane', 'Jane Tim', 40, '2001', 'novel', 0),
     (4, 'Lovey Day', 'George Byron', 20, '2005', 'novel', 30),
     (5, 'Old Land', 'Honore Blade', 30, '2010', 'law',0),
     (6,'The Battle','Upton Sara',33,'1999', 'medicine',40),
     (7,'Rose Hood','Richard Kale',28,'2008', 'cartoon',28);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

可以看到,语句执行成功,总共插入了5条记录

  • 使用SELECT语句查看表中所有的记录
sql 复制代码
 SELECT * FROM books;
+----+---------------+--------------+-------+---------+----------+-----+
| id | name          | authors      | price | pubdate | note     | num |
+----+---------------+--------------+-------+---------+----------+-----+
|  1 | Tale of AAA   | Dickes       |    23 |    1995 | novel    |  11 |
|  2 | EmmaT         | Jane lura    |    35 |    1993 | joke     |  22 |
|  3 | Story of Jane | Jane Tim     |    40 |    2001 | novel    |   0 |
|  4 | Lovey Day     | George Byron |    20 |    2005 | novel    |  30 |
|  5 | Old Land      | Honore Blade |    30 |    2010 | law      |   0 |
|  6 | The Battle    | Upton Sara   |    33 |    1999 | medicine |  40 |
|  7 | Rose Hood     | Richard Kale |    28 |    2008 | cartoon  |  28 |
+----+---------------+--------------+-------+---------+----------+-----+
7 rows in set (0.01 sec)

由结果可以看到,所有记录成功插入表中。

将小说类型(novel)的书的价格都增加5

  • 执行前先使用SELECT语句查看当前记录:
sql 复制代码
SELECT id, name, price, note FROM books WHERE note = 'novel';
+----+----------------------+-------+-------+
| id | name            | price | note  |
+----+----------------------+-------+-------+
|  1 | Tale of AAA    |    23 | novel |
|  3 | Story of Jane  |    40 | novel |
|  4 | Lovey Day      |    20 | novel |
+----+---------------+-------+-------+
3 rows in set (0.00 sec)
  • 使用UPDATE语句执行更新操作:
sql 复制代码
UPDATE books SET price = price + 5 WHERE note = 'novel';

Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

由结果可以看到,该语句对3条记录进行了更新

  • 使用SELECT语句查看更新结果:
sql 复制代码
 SELECT id, name, price, note FROM books WHERE note = 'novel';
+----+---------------+-------+-------+
| id | name          | price | note  |
+----+---------------+-------+-------+
|  1 | Tale of AAA   |    28 | novel |
|  3 | Story of Jane |    45 | novel |
|  4 | Lovey Day     |    25 | novel |
+----+---------------+-------+-------+
3 rows in set (0.00 sec)

由对比可以看到,price的值都在原来的价格之上增加了5

将名称为EmmaT的书的价格改为40,并将列名改为drama

  • 修改语句为:
sql 复制代码
UPDATE books SET price=40, note= 'drama ' WHERE name= 'EmmaT';
  • 执行修改前,使用SELECT语句查看当前记录:
sql 复制代码
 SELECT name, price, note FROM books WHERE name='EmmaT';
+---------+-------+------+
| name  | price | note |
+----------+-------+------+
| EmmaT |  35 | joke |
+---------+-------+------+
1 row in set (0.00 sec)
  • 执行修改操作,结果为:
sql 复制代码
UPDATE books SET price=40,note='drama' WHERE name='EmmaT';

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  • 然后,使用SELECT查看执行结果:
sql 复制代码
SELECT name, price, note FROM books WHERE name='EmmaT';
+---------+--------+-------+
| name  |  price | note  |
+---------+---------+-------+
| EmmaT |  40  | drama |
+---------+---------+-------+
1 row in set (0.00 sec)

可以看到,price和note字段的值已经改变,修改操作成功。

删除库存为0的记录

  • 删除库存为0的语句为:
sql 复制代码
DELETE FROM books WHERE num=0;
  • 删除之前使用SELECT语句查看当前记录:
sql 复制代码
 SELECT * FROM books WHERE num=0;
+----+----------------+----------------+---------+---------+-------+-----+
| id | name        | authors    | price  | pubdate |  note | num |
+----+-----------------+---------------+----------+---------+-------+-----+
|  3 | Story of Jane | Jane Tim   |    45 |  2001 | novel  |   0 |
|  5 | Old Land    | Honore Blade |   30 |  2010 |  law  |   0 |
+----+------------------+----------------+--------+---------+--------+-----+
2 rows in set (0.00 sec)

可以看到,当前有两条记录的num值为0,

  • 下面使用DELETE语句删除这两条记录
    SQL语句如下:
sql 复制代码
 DELETE FROM books WHERE num=0;
Query OK, 2 rows affected (0.00 sec)
  • 语句执行成功,查看操作结果:
sql 复制代码
SELECT * FROM books WHERE num=0;
Empty set (0.00 sec)

由执行结果可以看到,查询结果为空,表中已经没有num=0的记录。

本文有关mysql数据库的插入、更新以及删除数据已经讲完了,明天再见!!

😆 主页 【练小杰的CSDN

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

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

相关推荐
sunly_3 分钟前
Flutter:打包apk,安卓版本更新(二)
android·flutter
micro_xx10 分钟前
发那科 PMC 学习与总结
学习
cwtlw34 分钟前
CSS学习记录23
前端·css·笔记·学习·css3
三万棵雪松43 分钟前
7.系统学习-神经网络基础与激活函数解析
人工智能·神经网络·学习
vincent_woo1 小时前
再学安卓 - binder之ServiceManager
android·操作系统
weixin_448065311 小时前
Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺
笔记·学习·unity
mm_exploration1 小时前
halcon三维点云数据处理(六)find_box_3d
前端·数据库·3d
Edward-tan2 小时前
【玩转全栈】----用户管理案例
数据库·后端·django
思忖小下2 小时前
深入Android架构(从线程到AIDL)_09 认识Android的主线程
android·thread
tmacfrank2 小时前
Coroutine 基础六 —— Flow
android·开发语言·kotlin