国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL清空數據表的方法實例與分析

2024-07-24 13:10:47
字體:
來源:轉載
供稿:網友

MySQL數據庫中,如果我們想清空數據表(刪除數據表中所有內容)的話,可以通過下面兩個語句來實現:

truncate table table_n;delete from table_n;

實例

我們先通過實例看下通過這兩種方式清空數據庫的過程和結果

#delete演示mysql> create table testforde( -> number int not null auto_increment, -> name varchar(20) not null, -> primary key(number) -> );Query OK, 0 rows affected (0.05 sec)#truncate演示mysql> create table testfortr( -> number int not null auto_increment, -> name varchar(20) not null, -> primary key(number) -> );Query OK, 0 rows affected (0.04 sec)

以上是兩張同樣結構的數據表,下面我們先插入數據,然后再分別用 delete truncate 操作它們,看下結果如何

mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');Query OK, 7 rows affected (0.04 sec)Records: 7 Duplicates: 0 Warnings: 0mysql> insert into testfortr(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');Query OK, 7 rows affected (0.00 sec)Records: 7 Duplicates: 0 Warnings: 0mysql> select * from testforde;+--------+----------+| number | name  |+--------+----------+|  1 | zhagnsan ||  2 | lisi  ||  3 | wanger ||  4 | zhaoliu ||  5 | xiaosan ||  6 | qiqi  ||  7 | hanba |+--------+----------+7 rows in set (0.01 sec)mysql> select * from testfortr;+--------+----------+| number | name  |+--------+----------+|  1 | zhagnsan ||  2 | lisi  ||  3 | wanger ||  4 | zhaoliu ||  5 | xiaosan ||  6 | qiqi  ||  7 | hanba |+--------+----------+7 rows in set (0.00 sec)mysql> delete from testforde;Query OK, 7 rows affected (0.02 sec)mysql> truncate table testfortr;Query OK, 0 rows affected (0.02 sec)mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');Query OK, 7 rows affected (0.00 sec)Records: 7 Duplicates: 0 Warnings: 0mysql> insert into testfortr(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');Query OK, 7 rows affected (0.00 sec)Records: 7 Duplicates: 0 Warnings: 0mysql> select * from testforde;+--------+----------+| number | name  |+--------+----------+|  8 | zhagnsan ||  9 | lisi  ||  10 | wanger ||  11 | zhaoliu ||  12 | xiaosan ||  13 | qiqi  ||  14 | hanba |+--------+----------+7 rows in set (0.00 sec)mysql> select * from testfortr;+--------+----------+| number | name  |+--------+----------+|  1 | zhagnsan ||  2 | lisi  ||  3 | wanger ||  4 | zhaoliu ||  5 | xiaosan ||  6 | qiqi  ||  7 | hanba |+--------+----------+7 rows in set (0.00 sec)

從上面操作過程和結果不難看出,它們最大的區別就是delete在不限定where條件下清空表的話,不會重置auto_increment的值,新插入的會隨著上次的值接著增加;而truncate則不然,他會直接重置為1(其實這里它做的操作可以理解為直接刪除表結構和內容,然后按照表結構重建表)

那么除了上面能明顯看出來的區別之外,他們還存在以下幾點區別:

    1、truncate是整個清空的,而delete是逐行刪除的。相較而言,truncate效率較高。

    2、在事物處理方面,truncate 可能不會那么安全。因為 delete 語句是數據庫操作語言(dml),這個操作會放到 rollback segement 中,事務提交之后才生效;如果有相應的 trigger,執行的時候將被觸發。而 truncate 是數據庫定義語言(ddl),操作立即生效,原數據不放到 rollback segment 中,不能回滾,操作不觸發 trigger

    3、truncate 只能做清空表使用,而 delete 可以配合 where,order by,limit 等字句使用,所以在靈活方面,delete完勝。

    4、truncate操作不會記錄到日志中,而delete則是記錄的。

    5、正是由于 truncate 操作不會記錄到日志中,所以它不會激活觸發器。所以對于由 foreign 約束引用的表,不能使用 truncate table,而應使用不帶 where 子句的 delete 語句。

    6、truncate 不能用于參與了索引視圖的表

總結

以上就是MySQL清空數據表的全部內容了,希望這篇文章的內容對大家的學習或者工作能有所幫助,如果有疑問大家可以留言交流。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旬阳县| 武定县| 长葛市| 澄江县| 永康市| 赤水市| 贺州市| 东宁县| 屯留县| 景东| 大埔县| 延庆县| 海门市| 新密市| 湄潭县| 精河县| 禹城市| 远安县| 自贡市| 南丹县| 新疆| 黔东| 澄江县| 石景山区| 仙桃市| 闻喜县| 都江堰市| 汤阴县| 玉树县| 静安区| 宁南县| 临海市| 化州市| 宁蒗| 山丹县| 黎平县| 怀宁县| 建德市| 台州市| 通江县| 城固县|