欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL清空數(shù)據(jù)表的方法實例與分析

 更新時間:2016年10月04日 14:05:47   投稿:daisy  
這篇文章給大家詳細介紹了MySQL清空數(shù)據(jù)表的方法,文中給出了實例代碼,對大家學習使用MySQL具有一定的參考借鑒價值,有需要的可以參考借鑒,下面來一起看看吧。

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

truncate table table_n;

delete from table_n;

實例

我們先通過實例看下通過這兩種方式清空數(shù)據(jù)庫的過程和結(jié)果

#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)

以上是兩張同樣結(jié)構(gòu)的數(shù)據(jù)表,下面我們先插入數(shù)據(jù),然后再分別用 delete truncate 操作它們,看下結(jié)果如何

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: 0

mysql> 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: 0

mysql> 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: 0

mysql> 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: 0

mysql> 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)

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

最新評論