MySQL刪除表資料


在本教學中,您將學習如何使用MySQL DELETE語句從單個表中刪除資料。

1. MySQL DELETE語句介紹

要從表中刪除資料,請使用MySQL DELETE語句。下面說明了DELETE語句的語法:

DELETE FROM table_name
WHERE condition;

在上面查詢語句中 -

  • 首先,指定刪除資料的表(table_name)。
  • 其次,使用條件來指定要在WHERE子句中刪除的行記錄。如果行匹配條件,這些行記錄將被刪除。

請注意,WHERE子句是可選的。如果省略WHERE子句,DELETE語句將刪除表中的所有行。

除了從表中刪除資料外,DELETE語句返回刪除的行數。

要使用單個DELETE語句從多個表中刪除資料,請閱讀下一個教學中將介紹的DELETE JOIN語句

要刪除表中的所有行,而不需要知道刪除了多少行,那麼應該使用TRUNCATE TABLE語句來獲得更好的執行效能。

對於具有外來鍵約束的表,當從父表中刪除行記錄時,子表中的行記錄將通過使用ON DELETE CASCADE選項自動刪除。

2. MySQL DELETE的例子

我們將使用範例資料庫(yiibaidb)中的employees表進行演示。

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| emp_id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| emp_name    | varchar(255) | NO   |     | NULL    |                |
| performance | int(11)      | YES  | MUL | NULL    |                |
| salary      | float        | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set

請注意,一旦刪除資料,它就會永遠消失。因此,在執行DELETE語句之前,應該先備份資料庫,以防萬一要找回刪除過的資料。

假設要刪除officeNumber4的員工,則使用DELETE語句與WHERE子句作為以下查詢:

DELETE FROM employees 
WHERE
    officeCode = 4;

要刪除employees表中的所有行,請使用不帶WHERE子句的DELETE語句,如下所示:

DELETE FROM employees;

在執行上面查詢語句後,employees表中的所有行都被刪除。

MySQL DELETE和LIMIT子句

如果要限制要刪除的行數,則使用LIMIT子句,如下所示:

DELETE FROM table
LIMIT row_count;

請注意,表中的行順序未指定,因此,當您使用LIMIT子句時,應始終使用ORDER BY子句,不然刪除的記錄可能不是你所預期的那樣。

DELETE FROM table_name
ORDER BY c1, c2, ...
LIMIT row_count;

考慮在範例資料庫(yiibaidb)中的customers表,其表結構如下:

mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field                  | Type          | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber         | int(11)       | NO   | PRI | NULL    |       |
| customerName           | varchar(50)   | NO   |     | NULL    |       |
| contactLastName        | varchar(50)   | NO   |     | NULL    |       |
| contactFirstName       | varchar(50)   | NO   |     | NULL    |       |
| phone                  | varchar(50)   | NO   |     | NULL    |       |
| addressLine1           | varchar(50)   | NO   |     | NULL    |       |
| addressLine2           | varchar(50)   | YES  |     | NULL    |       |
| city                   | varchar(50)   | NO   |     | NULL    |       |
| state                  | varchar(50)   | YES  |     | NULL    |       |
| postalCode             | varchar(15)   | YES  |     | NULL    |       |
| country                | varchar(50)   | NO   |     | NULL    |       |
| salesRepEmployeeNumber | int(11)       | YES  | MUL | NULL    |       |
| creditLimit            | decimal(10,2) | YES  |     | NULL    |       |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set

例如,以下語句按客戶名稱按字母排序客戶,並刪除前10個客戶:

DELETE FROM customers
ORDER BY customerName
LIMIT 10;

類似地,以下DELETE語句選擇法國(France)的客戶,按升序按信用額度(creditLimit)進行排序,並刪除前5個客戶:

DELETE FROM customers
WHERE country = 'France'
ORDER BY creditLimit
LIMIT 5;

在本教學中,您已經學會了如何使用MySQL DELETE語句從表中刪除資料。