以下的文章主要描述的是MySQL DELETE語法的詳細解析,首先我們是從單表語法與多表語法的示例開始的,假如你對MySQL DELETE語法的相關內容十分感興趣的話,你就可以瀏覽以下的文章對其有個更好的了解。
單表語法:
多表語法:
或:
tbl_name中有些行滿足由where_definition給定的條件。MySQL DELETE用于刪除這些行,并返回被刪除的記錄的數目。
如果您編寫的DELETE語句中沒有WHERE子句,則所有的行都被刪除。當您不想知道被刪除的行的數目時,有一個更快的方法,即使用TRUNCATE TABLE。
如果您刪除的行中包括用于AUTO_INCREMENT列的最大值,則該值被重新用于BDB表,但是不會被用于MyISAM表或InnoDB表。如果您在AUTOCOMMIT模式下使用DELETE FROM tbl_name(不含WHERE子句)刪除表中的所有行,則對于所有的表類型(除InnoDB和MyISAM外),序列重新編排。對于InnoDB表,此項操作有一些例外。
對于MyISAM和BDB表,您可以把AUTO_INCREMENT次級列指定到一個多列關鍵字中。在這種情況下,從序列的頂端被刪除的值被再次使用,甚至對于MyISAM表也如此。DELETE語句支持以下修飾符:
如果您指定LOW_PRIORITY,則DELETE的執行被延遲,直到沒有其它客戶端讀取本表時再執行。
對于MyISAM表,如果您使用QUICK關鍵詞,則在刪除過程中,存儲引擎不會合并索引端結點,這樣可以加快部分種類的刪除操作的速度。
在刪除行的過程中,IGNORE關鍵詞會使MySQL忽略所有的錯誤。(在分析階段遇到的錯誤會以常規方式處理。)由于使用本選項而被忽略的錯誤會作為警告返回。
刪除操作的速度會受到一些因素的影響,這些因素在7.2.18節,“MySQL DELETE語句的速度”中進行了討論。
在MyISAM表中,被刪除的記錄被保留在一個帶鏈接的清單中,后續的INSERT操作會重新使用舊的記錄位置。要重新使用未使用的空間并減小文件的尺寸,則使用OPTIMIZE TABLE語句或myisamchk應用程序重新編排表。OPTIMIZE TABLE更簡便,但是myisamchk速度更快。請參見13.5.2.5節,“OPTIMIZE TABLE語法”和第7章:優化。
新聞熱點
疑難解答