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性能要好。