簡介
新增和刪除資料是相當基礎的操作,它們允許你控制資料庫維護哪些資料。要插入資料,你需要為每個新行指定滿足表每個列要求的資料項。要刪除資料,你需要提供要刪除的表中行的匹配條件。
在本文中,我們將瞭解如何使用 INSERT 和 DELETE 命令向 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: employeeCreate 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_ci1 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_name 和 last_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)
你還可以使用 Prisma Client 透過發出建立查詢來向表中新增資料。
使用 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 employeeWHERE first_name = 'Abigail';
Query OK, 1 row affected (0.01 sec)
這裡的返回值表示 DELETE 命令已處理,並刪除了單行。
要使用 Prisma Client 從表中刪除資料,請使用刪除查詢。
使用 DELETE 一次刪除多行
你可以透過操作 WHERE 子句中指定的選擇條件來使用 DELETE 一次刪除多個專案。
例如,要按 ID 刪除多行,你可以輸入如下內容
DELETE FROM employeeWHERE 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 命令高效,後者可以在不掃描表的情況下刪除資料,但有一些注意事項。
Prisma Client 使用一個名為 deleteMany 的單獨查詢來一次刪除多行資料。
結論
在本文中,我們討論瞭如何從 MySQL 表中插入和刪除資料。首先,我們介紹瞭如何查詢表的結構以幫助構建有效的資料插入查詢。然後,我們使用 INSERT 命令逐個或批次插入資料。最後,我們介紹了 DELETE 命令,用於根據查詢條件從表中刪除記錄。
INSERT 和 DELETE 命令雖然相當基礎,卻是管理表實際維護資料最有用的命令之一。理解它們的基本語法和操作將使你能夠快速高效地向資料庫結構中新增或刪除記錄。
