在本教程中,您將學(xué)習(xí)如何使用SQL快速刪除表中的所有行。
TRUNCATE TABLE語句比DELET刪除表中的所有行更快。從邏輯上講,TRUNCATE TABLE它類似于DELETE沒有WHERE子句的語句。
TRUNCATE TABLE語句從表中刪除所有行,但表結(jié)構(gòu)及其列,約束,索引等保持不變。要?jiǎng)h除表及其數(shù)據(jù),可以使用該DROP TABLE語句,但是需謹(jǐn)慎操作。
TRUNCATE TABLE的基本語法:
TRUNCATE TABLE table_name;
讓我們對數(shù)據(jù)庫表執(zhí)行清空操作。
考慮我們在數(shù)據(jù)庫中有一個(gè)employee表,其中包含以下記錄:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
以下命令從employees表中刪除所有行:
TRUNCATE TABLE employees;
現(xiàn)在,在執(zhí)行上述SQL語句之后,如果嘗試從employee表中選擇記錄,則將獲得一個(gè)空結(jié)果集。
盡管DELETE和TRUNCATE TABLE似乎具有相同的效果,但是它們的工作方式不同。這是這兩個(gè)語句之間的一些主要區(qū)別:
TRUNCATE TABLE語句刪除并重新創(chuàng)建表,并使任何自動(dòng)增量值都重置為其初始值(通常為1)。
DELETE可讓您根據(jù)可選WHERE子句過濾要?jiǎng)h除的行,TRUNCATE TABLE而不支持WHERE子句則僅刪除所有行。
TRUNCATE TABLE與DELETE相比,它更快并且使用的系統(tǒng)資源更少,因?yàn)镈ELETE掃描表以生成受影響的行數(shù),然后逐行刪除行,并為每個(gè)刪除的行在數(shù)據(jù)庫日志中記錄一個(gè)條目,而TRUNCATE TABLE只刪除所有行而不提供任何其他信息。
提示:如果你只是想刪除所有的行,并重新創(chuàng)建整個(gè)表,使用TRUNCATE TABLE。如果你想刪除基于特定條件的行的數(shù)量有限,或者您不想要重置自動(dòng)遞增值,則使用DELETE。