mysql高階 二十一 刪除表資料

2021-07-09 10:31:19 字數 1319 閱讀 2098

在mysql中有兩種方法可以刪除資料,一種是delete語句,另一種是truncate table語句。delete語句可以通過where對要刪除的記錄進行選擇。而使用truncate table將刪除表中的所有記錄。因此,delete語句更靈活。

如果要清空表中的所有記錄,可以使用下面的兩種方法:

delete from table1

truncate table table1

其中第二條記錄中的table是可選的。

如果要刪除表中的部分記錄,只能使用delete語句。

delete from table1 where ...;

如果delete不加where子句,那麼它和truncate table是一樣的,但它們有一點不同,那就是delete可以返回被刪除的記錄數,而truncate table返回的是0。

如果乙個表中有自增欄位,使用truncate table和沒有where子句的delete刪除所有記錄後,這個自增字段將起始值恢復成1.如果你不想這樣做的話,可以在delete語句中加上永真的where,如where 1或where true。

delete from table1 where 1;

上面的語句在執行時將掃瞄每一條記錄。但它並不比較,因為這個where條件永遠為true。這樣做雖然可以保持自增的最大值,但由於它是掃瞄了所有的記錄,因此,它的執行成本要比沒有where子句的delete大得多。  

delete和truncate table的最大區別是delete可以通過where語句選擇要刪除的記錄,但執行速度不快。

truncate刪除後不記錄mysql日誌,不可以恢復資料。delete的效果有點像將mysql表中所有記錄一條一條刪除到刪完,而truncate相當於保留mysql表的結構,重新建立了這個表,所有的狀態都相當於新錶。而且還可以返回被刪除的記錄數。而truncate table無法刪除指定的記錄,而且不能返回被刪除的記錄。但它執行得非常快。

和標準的sql語句不同,delete支援order by和limit子句,通過這兩個子句,我們可以更好地控制要刪除的記錄。如當我們只想刪除where子句過濾出來的記錄的一部分,可以使用limit,如果要刪除後幾條記錄,可以通過order by和limit配合使用。假設我們要刪除users表中name等於"mike"的前6條記錄。可以使用如下的delete語句:

delete from users where name = 'mike' limit 6;

一般mysql並不確定刪除的這6條記錄是哪6條,為了更保險,我們可以使用order by對記錄進行排序。

delete from users where name = 'mike' order by id desc limit 6;

二十一 Mysql 插入, 修改, 刪除資料

insert into tablename colname1,colname2 value value1,value2 insert into tablename values 所有字段 注意 cmd 中 如果儲存中文的話,且資料庫中server設定為utf 8的話會報錯 因為cmd預設是gbk的。...

資料結構(二十一)

現在哈利 波特的手裡有一本教材,裡面列出了所有的變形魔咒和能變的動物。老師允許他自己帶乙隻動物去考場,要考察他把這只動物變成任意乙隻指定動物的本事。於是他來問你 帶什麼動物去可以讓最難變的那種動物 即該動物變為哈利 波特自己帶去的動物所需要的魔咒最長 需要的魔咒最短?例如 如果只有貓 鼠 魚,則顯然...

baidu高階訓練筆記二十一20200808

build rtk尋跡測試 高精地圖 工具鏈感測器層 核心軟體平台 雲服務層 如何使用不同於參考硬體的camera 如何使用不同於參考硬體的lidar安裝docker 進入docker,拉取apollo映象,並以此映象建立容器 執行容器 適配apollo 左側是乙個高精度地圖,右側是實時相對地圖。實...