在本教程中,您將學(xué)習(xí)如何使用MySQL DELETE語句從單個表中刪除數(shù)據(jù)。
要從表中刪除數(shù)據(jù),請使用MySQL DELETE語句。下面說明了DELETE語句的語法:
DELETE FROM table_name
WHERE condition;
在上面查詢語句中 -
table_name)。WHERE子句中刪除的行記錄。如果行匹配條件,這些行記錄將被刪除。請注意,
WHERE子句是可選的。如果省略WHERE子句,DELETE語句將刪除表中的所有行。
除了從表中刪除數(shù)據(jù)外,DELETE語句返回刪除的行數(shù)。
要使用單個DELETE語句從多個表中刪除數(shù)據(jù),請閱讀下一個教程中將介紹的DELETE JOIN語句。
要刪除表中的所有行,而不需要知道刪除了多少行,那么應(yīng)該使用TRUNCATE TABLE語句來獲得更好的執(zhí)行性能。
對于具有外鍵約束的表,當(dāng)從父表中刪除行記錄時,子表中的行記錄將通過使用ON DELETE CASCADE選項自動刪除。
我們將使用示例數(shù)據(jù)庫(yiibaidb)中的employees表進(jìn)行演示。
+-------------+--------------+------+-----+---------+----------------+
| 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
請注意,一旦刪除數(shù)據(jù),它就會永遠(yuǎn)消失。 因此,在執(zhí)行
DELETE語句之前,應(yīng)該先備份數(shù)據(jù)庫,以防萬一要找回刪除過的數(shù)據(jù)。
假設(shè)要刪除officeNumber為4的員工,則使用DELETE語句與WHERE子句作為以下查詢:
DELETE FROM employees
WHERE
officeCode = 4;
要刪除employees表中的所有行,請使用不帶WHERE子句的DELETE語句,如下所示:
DELETE FROM employees;
在執(zhí)行上面查詢語句后,employees表中的所有行都被刪除。
如果要限制要刪除的行數(shù),則使用LIMIT子句,如下所示:
DELETE FROM table
LIMIT row_count;
請注意,表中的行順序未指定,因此,當(dāng)您使用LIMIT子句時,應(yīng)始終使用ORDER BY子句,不然刪除的記錄可能不是你所預(yù)期的那樣。
DELETE FROM table_name
ORDER BY c1, c2, ...
LIMIT row_count;
考慮在示例數(shù)據(jù)庫(yiibaidb)中的customers表,其表結(jié)構(gòu)如下:
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)進(jìn)行排序,并刪除前5個客戶:
DELETE FROM customers
WHERE country = 'France'
ORDER BY creditLimit
LIMIT 5;
類似地,以下DELETE語句選擇法國(France)的客戶,按升序按信用額度(creditLimit)進(jìn)行排序,并刪除前5個客戶:
DELETE FROM customers
WHERE country = 'France'
ORDER BY creditLimit
LIMIT 5;
在本教程中,您已經(jīng)學(xué)會了如何使用MySQL DELETE語句從表中刪除數(shù)據(jù)。