mysql刪除表中的記錄

  你們都知道,在MySQL中刪除一個表中的記錄有兩種方法,一種是DELETE FROM TABLENAME WHERE... , 還有一種是TRUNCATE TABLE TABLENAME。sql

  DELETE FROM設計

  從 MySQL 數據表中刪除數據,若是沒有指定 WHERE 子句,MySQL 表中的全部記錄將被刪除。能夠在 WHERE 子句中指定任何條件。日誌

  語法:blog

DELETE FROM table_name WHERE column_name = some_value

  TRUNCATE TABLE TABLENAME索引

  刪除表中的全部行,而不記錄單個行刪除操做。事務

  語法:table

TRUNCATE TABLE TABLENAME

  區別:程序設計

  1)DELETE FROM語句可使用WHERE 對要刪除的記錄進行選擇,TRUNCATE TABLE 將刪除表中的全部記錄,so,DELETE FROM更靈活。class

  2)若是DELETE FROM 不加WHERE條件,那麼他和TRUNCATE TABLE 是同樣的,惟一的區別就是DELETE FROM刪除後返回被刪除的記錄數,而TRUNCATE TABLE返回的是0。語法

  3)若是一個表中有自增的字段,這時使用DELETE和TRUNCATE刪除表中全部數據時,若是表中有自增字段,則自增字段將起始值恢復爲1,若是不想恢復,則能夠在DELETE時加上WHERE的永真條件,使用DELETE FROM TABLENAME WHERE 1便可,但在這樣作時會有一些缺點,即掃描表中的每一行記錄,因此雖然能夠保持自增的最大值,但他的執行成本要比沒有WHERE條件的DELETE以及TRUNCATE大得多的多。

  4)當表中的數據比較多時,刪除全表數據建議使用TRUNCATE TABLE,TRUNCATE TABLE經過釋放存儲表數據所用的數據頁來刪除數據,而且只在事務日誌中記錄頁的釋放,而DELETE FROM則是將數據一行一行的刪除,每刪除一行,還要在事務日誌中爲所刪除的行記錄一項,賊慢。

  5)TRUNCATE TABLE刪除後沒法ROLLBACK,緣由:TRUNCATE是一個DDL語句,將被隱式提交,不能使用ROLLBACK命令,而DELETE是DML語句,能夠ROLLBACK(前提是DELETE操做沒有COMMIT)

注:SQL語言包括四種主要程序設計語言類別的語句:

  數據定義語言(DDL)主要表現爲建立刪除表,建立索引等;

  數據操做語言(DML)主要表現爲對數據的追加,更新查詢;

  數據控制語言(DCL)主要表現爲受權(GRANT),撤銷受權(REVOKE),拒絕受權(DENY);

  事務控制語言(TCL)主要表現爲設置保存點(SAVEPOINT),回滾(ROLLBACK),提交(COMMIT)。

   總結:

 DELETE能夠經過WHERE語句選擇要刪除的記錄,但執行得速度不快,能夠返回被刪除的記錄數,在未提交狀況下能夠回滾。而TRUNCATE TABLE沒法刪除指定的記錄,並且不能返回被刪除的記錄。但它執行得很是快。

相關文章
相關標籤/搜索