13.2.4 DDL语句 3.删除表的语法
删除表的语法格式如下:
实例
如下SQL
语句将会把数据库中已有的wawa
数据表删除:
运行效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| mysql> show tables; +-----------------------+ | Tables_in_test_engine | +-----------------------+ | user_inf | | wawa | +-----------------------+ 2 rows in set
mysql> drop table wawa; Query OK, 0 rows affected
mysql> show tables; +-----------------------+ | Tables_in_test_engine | +-----------------------+ | user_inf | +-----------------------+ 1 row in set mysql>
|
删除数据表的效果如下。
- 表结构被删除,
- 表对象不再存在。
- 表里的所有数据也被删除。
- 该表所有相关的索引、约束也被删除。
4.truncate表
对于大部分数据库而言,truncate
都被当成DDL
处理,truncate
被称为“截断”某个表——它的作用是删除该表里的全部数据,但保留表结构。相对于DML
里的delete
命令而言,truncate
的速度要快得多,而且truncate
不像delete
可以删除指定的记录,truncate
只能一次性删除整个表的全部记录。truncate
命令的语法如下:
实例
运行效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| mysql> show tables; +-----------------------+ | Tables_in_test_engine | +-----------------------+ | user_inf | +-----------------------+ 1 row in set
mysql> select * from user_inf; +----+------+ | id | name | +----+------+ | 1 | 小明 | | 2 | 小王 | +----+------+ 2 rows in set
mysql> truncate user_inf; Database changed
mysql> show tables; +-----------------------+ | Tables_in_test_engine | +-----------------------+ | user_inf | +-----------------------+ 1 row in set
mysql> desc user_inf; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | varchar(10) | NO | PRI | NULL | | | name | varchar(30) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set
mysql> select * from user_inf; Empty set
mysql>
|
MySQL
对truncate
的处理比较特殊——如果使用非InnoDB
存储机制,truncate
比delete
速度要快;如果使用InnoDB
存储机制,在MySQL5.0.3
之前,truncate
和delete
完全完全一样,在5.0.3之后,truncatetable
比delete
效率高,但如果该表被外键约束所参照,truncate
又变为delete
操作。在5.0.13之后,快速truncate
总是可用,即比delete
性能要好。