分享到

简介

添加和删除数据是相当基础的操作,允许你控制数据库维护哪些数据。要插入数据,你需要为每个新 指定满足表中每个 要求的项目。要删除数据,你需要提供要删除的表中行的匹配条件。

在本文中,我们将了解如何使用 INSERTDELETE 命令在 MySQL 中添加或删除数据。我们将介绍语法以及更高级的变体,例如在一个语句中操作多行。

回顾表的结构

在使用 INSERT 命令之前,你必须了解表的结构,以便你可以满足表中的列、数据类型约束 要求。

要查找名为 employee 的表的结构,可以使用 MySQL DESCRIBE 命令

DESCRIBE employee;
+-------------+-----------------+------+-----+-------------------+-------------------+
Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+-----+-------------------+-------------------+
employee_id | bigint unsigned | NO | PRI | NULL | auto_increment |
first_name | varchar(45) | NO | | NULL | |
last_name | varchar(45) | NO | | NULL | |
last_update | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+-------------+-----------------+------+-----+-------------------+-------------------+
4 rows in set (0.00 sec)

输出显示表的列名、数据类型和默认值,以及其他信息。

另一种方法是显示可以用来重新创建表的的信息。你可以使用 SHOW CREATE TABLE 命令找到这些信息

SHOW CREATE TABLE employee\G
*************************** 1. row ***************************
Table: employee
Create Table: CREATE TABLE `employee` (
`employee_id` bigint unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(45) NOT NULL,
`last_name` varchar(45) NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `employee_id` (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

这里,我们使用 \G 终止符垂直显示输出,以提高可读性。除了在创建表时手动设置的属性外,输出还显示了由于 MySQL 默认值而设置的任何值。

这些应该能让你很好地了解表的结构,以便你可以正确地插入值。

使用 INSERT 将新记录添加到表中

SQL INSERT 命令用于将数据行添加到现有表中。一旦你了解了表的结构,你就可以构造一个命令,将表的列与你希望为新记录插入的相应值匹配。

该命令的基本语法如下所示

INSERT INTO my_table(column1, column2)
VALUES ('value1', 'value2');

列列表中的列直接对应于值列表中提供的值。

例如,要将一名新员工插入到上面列出的 employee 表中,我们可以输入

INSERT INTO employee(first_name, last_name)
VALUES ('Bob', 'Smith');

这里,我们为 first_namelast_name 列提供了值,而将其他列留空,以便由它们的默认值填充。如果你查询该表,你会发现新记录已添加

SELECT * FROM employee;
+-------------+------------+-----------+---------------------+
employee_id | first_name | last_name | last_update |
+-------------+------------+-----------+---------------------+
1 | Bob | Smith | 2021-01-26 09:56:42 |
+-------------+------------+-----------+---------------------+
1 row in set (0.00 sec)

使用 INSERT 一次添加多行

一次插入一条记录比一次插入多行更耗时且效率更低。MySQL 允许你指定要添加到同一表的多个行。每个新行都封装在括号中,每个括号组之间用逗号隔开。

多记录插入的基本语法如下所示

INSERT INTO my_table(column_name, column_name_2)
VALUES
('value', 'value2'),
('value3', 'value4'),
('value5', 'value6');

对于我们一直在引用的 employee 表,你可以通过输入以下命令在一个语句中添加四名新员工

INSERT INTO employee(first_name, last_name)
VALUES
('Abigail', 'Spencer'),
('Tamal', 'Wayne'),
('Katie', 'Singh'),
('Felipe', 'Espinosa');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

使用 DELETE 从表中删除行

SQL DELETE 命令用于从表中删除行,作为 INSERT 的补充操作。为了从表中删除行,你必须通过在 WHERE 子句中提供匹配条件来识别要定位的行。

基本语法如下所示

DELETE FROM <table>
WHERE <condition>;

例如,要删除我们 employee 表中所有其 first_name 设置为 Abigail 的行,我们可以输入以下命令

DELETE FROM employee
WHERE first_name = 'Abigail';
Query OK, 1 row affected (0.01 sec)

这里的返回值表明 DELETE 命令已处理,并删除了一行。

使用 DELETE 一次删除多行

您可以通过操作 WHERE 子句中指定的筛选条件,使用 DELETE 一次删除多个项目。

例如,要按 ID 删除多行,您可以键入以下内容

DELETE FROM employee
WHERE employee_id in (3,4);
Query OK, 2 rows affected (0.00 sec)

您甚至可以省略 WHERE 子句,以删除给定表中的所有行

DELETE FROM employee;
Query OK, 2 rows affected (0.00 sec)

但是请注意,使用 DELETE 清空表数据 可能不如 TRUNCATE 命令有效TRUNCATE 命令可以在不扫描表的情况下删除数据,但有一些注意事项。

结论

在本文中,我们讨论了如何从 MySQL 表中插入和删除数据。首先,我们介绍了如何查找表的结构以帮助构建有效的 数据插入查询。然后,我们使用 INSERT 命令一次一个或分批插入数据。最后,我们介绍了 DELETE 命令,用于根据查询条件从表中删除记录。

虽然 INSERTDELETE 命令相当基础,但它们是管理表实际维护哪些数据的最有用命令。理解它们的 基本语法和操作将使您能够快速有效地向数据库结构添加或删除记录。

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直在撰写有关数据库、Linux、基础架构和开发人员工具的文章。他目前与妻子和两只兔子住在柏林。他不必经常以第三人称写作,这对所有相关人员来说都是一种解脱。