drop删除表

基本语法
使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:

drop table 表名1,表名2, 表名3 ...

加 if exists 判断是否有表,如果有再进行删除(开发中常用)

drop table if exists 表名1,表名2,表名3 ...

对语法格式的说明如下

  • 表名1, 表名2, 表名3 ...表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。
  • IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。
  • 一般drop table if exists是数据库里面的,后面接表名如:drop table if exists xxx_book意思就是:如果数据库中存在xxx_book表,就把它从数据库中drop掉。
  • 备份sql中一般都有这样的语句,如果是数据库中有这个表,先drop掉,然后create表,然后再进行数据插入。

两点注意

  • 用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。
  • 表被删除时,用户在该表上的权限不会自动删除。

程度从强到弱
1、drop  table tb 
      drop将表格直接删除,没有办法找回
2、truncate (table) tb
      删除表中的所有数据,不能与where一起使用
3、delete from tb (where)
      删除表中的数据(可制定某一行)

区别:truncate和delete的区别
1、事务:truncate是不可以rollback的,但是delete是可以rollback的;
              原因:truncate删除整表数据(ddl语句,隐式提交),delete是一行一行的删除,可以rollback
2、效果:truncate删除后将重新水平线和索引(id从零开始) ,delete不会删除索引    
3、 truncate 不能触发任何Delete触发器。
4、delete 删除可以返回行数

实例:删除tb_emp3的表

选择数据库 test_db,创建 tb_emp3 数据表,输入的 SQL 语句和运行结果如下所示。

mysql> USE test_db;
Database changed
mysql> CREATE TABLE tb_emp3
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.27 sec)
mysql> SHOW TABLES;
+--------------------+
| Tables_in_test_db  |
+--------------------+
| tb_emp2            |
| tb_emp3            |
+--------------------+
2 rows in set (0.00 sec)

由运行结果可以看出,test_tb 数据库中有 tb_emp2 和 tb_emp3 两张数据表。

我们来删除数据表 tb_emp3,输入的 SQL 语句和运行结果如下所示:

mysql> DROP TABLE tb_emp3;
Query OK, 0 rows affected (0.22 sec)
mysql> SHOW TABLES;
+--------------------+
| Tables_in_test_db  |
+--------------------+
| tb_emp2            |
+--------------------+
1 rows in set (0.00 sec)

执行结果可以看到,test_db 数据库的数据表列表中已经不存在名称为 tb_emp3 的表,删除操作成功。

实例:删除t_student的表

mysql> show tables;
+-----------------+
| Tables_in_table |
+-----------------+
| bonus           |
| dept            |
| emp             |
| salgrade        |
| t_student       |
+-----------------+
5 rows in set (0.01 sec)

mysql> drop table if exists t_student;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+-----------------+
| Tables_in_table |
+-----------------+
| bonus           |
| dept            |
| emp             |
| salgrade        |
+-----------------+
4 rows in set (0.00 sec)