mysql 刪除操作(delete+TRUNCATE)。本站提示廣大學習愛好者:(mysql 刪除操作(delete+TRUNCATE))文章只能為提供參考,不一定能成為您想要的結果。以下是mysql 刪除操作(delete+TRUNCATE)正文
delete
語法
單表語法:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]多表語法:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*] ...]
FROM table_references
[WHERE where_definition]或
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*] ...]
USING table_references
[WHERE where_definition]假如您編寫的DELETE語句中沒有WHERE子句,則一切的行都被刪除。當您不想曉得被刪除的行的數量時,有一個更快的辦法,就是用TRUNCATE TABLE。
DELETE語句支撐以下潤飾符:
•假如您指定LOW_PRIORITY,則DELETE的履行被延遲,直到沒有其它客戶端讀取本表時再履行。
• 關於MyISAM表,假如您應用QUICK症結詞,則在刪除進程中,存儲引擎不匯合並索引端結點,如許可以加速部門品種的刪除操作的速度。
•在刪除行的進程中,IGNORE症結詞會使MySQL疏忽一切的毛病。(在剖析階段碰到的毛病會以慣例方法處置。)因為應用本選項而被疏忽的毛病會作為正告前往。
在MyISAM表中,被刪除的記載被保存在一個帶鏈接的清單中,後續的INSERT操作會從新應用舊的記載地位。要從新應用未應用的空間並減小文件的尺寸,則應用OPTIMIZE TABLE語句或myisamchk運用法式從新編排表。OPTIMIZE TABLE更輕便,然則myisamchk速度更快。
QUICK潤飾符會影響到在刪除操作中索引端結點能否歸並。當用於被刪除的行的索引值被來自後拔出的行的鄰近的索引值取代時,DELETE QUICK最為實用。在此情形下,被刪除的值留上去的空間被從新應用。
未充斥的索引塊逾越某一個規模的索引值,會再次產生新的拔出。當被刪除的值招致湧現未充斥的索引塊時,DELETE QUICK沒有感化。在此情形下,應用QUICK會招致未應用的索引中湧現放棄空間。
假如您盤算從一個表中刪除很多行,應用DELETE QUICK再加上OPTIMIZE TABLE可以加速速度。如許做可以從新樹立索引,而不是停止年夜量的索引塊歸並操作。
用於DELETE的MySQL獨一的LIMIT row_count選項用於告訴辦事器在掌握敕令被前往到客戶端前被刪除的行的最年夜值。本選項用於確保一個DELETE語句不會占用過量的時光。您可以只反復DELETE語句,直到相干行的數量少於LIMIT值為止。
假如DELETE語句包含一個ORDER BY子句,則各行依照子句中指定的次序停止刪除。此子句只在與LIMIT聯用是才起感化。例如,以下子句用於查找與WHERE子句對應的行,應用timestamp_column停止分類,並刪除第一(最舊的)行:
DELETE FROM somelog WHERE user = 'jcole' ORDER BY timestamp_column LIMIT 1;可以同時刪除很多個表中的行,並應用其它的表停止搜刮:
DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
--或許
DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
當搜刮待刪除的行時,這些語句應用一切三個表,然則只從表t1和表t2中刪除對應的行。
以上例子顯示了應用逗號操作符的外部結合,然則多表DELETE語句可使用SELECT語句中許可的一切類型的結合,好比LEFT JOIN,不外,您不克不及在一個多表DELETE語句中應用ORDER BY或LIMIT。
當援用表稱號時,您必需應用別號(假如已給定):
DELETE t1 FROM test AS t1, test2 WHERE ...
停止多表刪除時支撐跨數據庫刪除,然則在此情形下,您在援用表時不克不及應用別號。舉例解釋:
DELETE test1.tmp1, test2.tmp2 FROM test1.tmp1, test2.tmp2 WHERE ...
今朝,您不克不及從一個表中刪除,同時又在子查詢中從統一個表當選擇。
TRUNCATE
語法
TRUNCATE [TABLE] tbl_nameTRUNCATE TABLE用於完整清空一個表。從邏輯上說,該語句與用於刪除一切行的DELETE語句同等,然則在有些情形下,二者在應用上有所分歧。
關於InnoDB表,假如有須要援用表的外鍵限制,則TRUNCATE TABLE被映照到DELETE上;不然應用疾速刪減(撤消和從新創立表)。應用TRUNCATE TABLE從新設置AUTO_INCREMENT計數器,設置時不斟酌能否有外鍵限制。
關於其它存儲引擎,TRUNCATE TABLE與DELETE FROM有以下幾處分歧:
•刪減操作會撤消偏重新創立表,這比一行一行的刪除行要快許多。
•刪減操作不克不及包管對事務是平安的;在停止事務處置和表鎖定的進程中測驗考試停止刪減,會產生毛病。
•被刪除的行的數量沒有被前往。
•只需表界說文件tbl_name.frm是正當的,則可使用TRUNCATE TABLE把表從新創立為一個空表,即便數據或索引文件曾經被損壞。
•表治理法式不記得最初被應用的AUTO_INCREMENT值,然則會從頭開端計數。即便關於MyISAM和InnoDB也是如斯。MyISAM和InnoDB平日不再次應用序列值。
•當被用於帶分區的表時,TRUNCATE TABLE會保存分區;即,數據和索引文件被撤消偏重新創立,同時分區界說(.par)文件不受影響。
TRUNCATE TABLE是在MySQL中采取的一個Oracle SQL擴大。
轉自 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#delete