一、sql清除表中數(shù)據(jù),表結(jié)構(gòu)為什么還在
一般的數(shù)據(jù)庫原理是將表結(jié)構(gòu)作為元數(shù)據(jù)單獨(dú)存放的,而表實(shí)際存儲的數(shù)據(jù)是放在另外一個(gè)地方,數(shù)據(jù)庫系統(tǒng)保存兩者的對應(yīng)關(guān)系。這樣就能用sql語句查詢到對應(yīng)的數(shù)據(jù),一般清空數(shù)據(jù)和刪除表是分開的兩個(gè)操作。
就ORACLE數(shù)據(jù)庫,簡單的來說
清除數(shù)據(jù)你可能用的是delete或者truncate來,而不是drop,drop是直接刪除表,delete和truncate是刪除表中的數(shù)據(jù)
比如delete:
delete from a 此法是刪除表a中的數(shù)據(jù),一條一條刪除的;
truncate table a 此法也是刪除表a中的數(shù)據(jù),但是不是一條一條的刪;
drop table a 此法是直接刪除表a,包括表中的數(shù)據(jù)及數(shù)據(jù)結(jié)構(gòu)。
延伸閱讀:
二、SQL TRUNCATE TABLE清空表語句
SQL TRUNCATE TABLE 語句用來刪除表中的所有記錄,也即清空表,它類似于不帶 WHERE 子句的 DELETE FROM 語句。
TRUNCATE TABLE 和?DROP TABLE
DROP TABLE 用來刪除表,包括刪除該表的數(shù)據(jù)、結(jié)構(gòu)、索引、觸發(fā)器、約束等所有信息。一旦使用?DROP TABLE 刪除了表,則該表的所有信息都將丟失,該表再也無法使用了。如果您希望存儲一些數(shù)據(jù),就只能重新創(chuàng)建該表。
TRUNCATE TABLE 僅僅刪除表的所有記錄,表的結(jié)構(gòu)、索引、觸發(fā)器、約束等將被保留,后續(xù)仍然可以使用該表。
TRUNCATE TABLE 和 DELETE FROM
不帶 WHERE 子句的?DELETE FROM 語句同樣可以達(dá)到清空表的效果,但是?TRUNCATE TABLE 使用的系統(tǒng)資源和日志資源更少,因此比?DELETE FROM 更加快速。
DELETE FROM 語句每刪除一行,都會在事務(wù)日志中為所刪除的行記錄一項(xiàng)。TRUNCATE TABLE 通過釋放表中數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),只會在事務(wù)日志中記錄頁的釋放。
此外,TRUNCATE TABLE 還能重置具有自動(dòng)遞增(AUTO_INCREMENT)屬性的字段,而 DELETE FROM 卻不具備該功能。
總結(jié)
當(dāng)您不再需要該表時(shí),使用 DROP TABLE;當(dāng)您仍要保留該表,只是想刪除所有記錄時(shí),使用 TRUNCATE TABLE;當(dāng)你要?jiǎng)h除部分記錄時(shí),使用帶有 WHERE 子句的 DELETE FROM。