在本教程中,您將學習如何使用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
語句之前,應該先備份數據庫,以防萬一要找回刪除過的數據。
假設要刪除officeNumber
為4
的員工,則使用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
語句從表中刪除數據。