DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name] ...[RESTRICT | CASCADE]
1、drop table table_name : 删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM;
DROP TABLE语句从数据库中永久删除表及其数据。在MySQL中,还可以使用单个DROP TABLE语句中,每个表都用逗号(,)分隔。它不删除与已删除表关联的特定用户权限。因此,如果在此之后重新创建同名表,则现有权限将应用于新表,这可能会带来安全风险。
TEMPORARY选项允许您删除临时表只有。确保您不会意外地删除非临时表是非常有用的。
IF EXISTS选项如果尝试删除不存在的表,则不会导致错误。当你使用IF EXISTS选项时,MySQL生成一个注释,可以使用SHOW WARNING声明。需要注意的是,DROP TABLE语句删除所有现有表,并在列表中不存在表时发出错误消息或注释。
RESTRICT和CASCADE为MySQL的未来版本保留了选项
2、truncate table table_name : 删除表全部数据,保留表结构,立刻释放磁盘空间 ,不管是 Innodb 和MyISAM;
3、delete from table_name : 删除表全部数据,表结构不变,对于 MyISAM
会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;
具体操作:
直接删除表s1表
DROP TABLE s1;
DROP TABLE IF EXISTS s1;
在某些情况下,您希望从表中删除一个或多个列。
ALTER TABLE table DROP [COLUMN] column-1, DROP [COLUMN] column-2;
table:指定包含要删除的列的表 ;
column:指的是列的名称;
COLUMN是可选的;
如果删除的列是外键,MySQL将发出一个错误。
具体操作:
删除student表中的字段intro
ALTER TABLE student DROP intro;
示例演示:
我们在testdb数据库中创建一个posts数据表并删除excerpt列并移除created_at和updated_at。
root@host# mysql -u root -p
Enter password:*******
mysql> use testdb;
mysql> CREATE TABLE posts (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,excerpt VARCHAR(400),content TEXT,created_at DATETIME,updated_at DATETIME);(创建posts数据表我这样写便于复制)
mysql>DESC posts;(查询post的表结构)
mysql>ALTER TABLE posts DROP COLUMN excerpt;(删除excerpt列)
mysql>DESC posts;(查询post的表结构)
mysql>ALTER TABLE posts DROP COLUMN created_at,DROP COLUMN updated_at;(移除created_at和updated_at这两列)
mysql>DESC posts;(查询post的表结构)
mysql>exit
--为表设置表模式和模式匹配(声明两个接受数据库模式的变量和希望与表匹配的模式:)
SET @schema = 'classicmodels';
SET @pattern = 'test%';
-- 构建动态SQL(DROPTABLE 1,tBL 2.)(构建一个动态的DROP TABLE声明:)
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(CONCAT(@schema,'.',table_name)),';')
INTO @droplike
FROM information_schema.tables
WHERE @schema = database()
AND table_name LIKE @pattern;
(查询指示MySQL转到information_schema 表,它包含所有数据库中所有表的数据,并连接数据库中的所有表。@schema ( classicmodels ) 与模式相匹配的 @pattern ( test% ) 带前缀DROP TABLE . 这个群凹函数创建以逗号分隔的表列表。)
-- 显示动态SQL语句
SELECT @droplike;
-- 执行动态SQL
PREPARE stmt FROM @dropcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
因此,如果要删除数据库中具有特定模式的多个表,只需使用上面的脚本来节省时间。您所需要做的就是替换花纹而数据库模式在……里面@pattern和@schema变量。如果您经常需要处理此任务,则始终可以开发一个存储过程基于脚本并重用此存储过程。
在mysql>命令提示窗口中删除数据表SQL语句为 DROP TABLE :
实例
以下实例删除了数据表runoob_tbl:
root@host# mysql -u root -p
Enter password:*******
mysql> use testdb;
mysql>show tables;
mysql> DROP TABLE runoob_tbl;
mysql>show tables;
mysql>exit
PHP使用 mysqli_query 函数来删除 MySQL 数据表。
该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。
语法
mysqli_query(connection,query,resultmode);
参数 | 描述 |
---|---|
connection | 必需。规定要使用的 MySQL 连接。 |
query | 必需,规定查询字符串。 |
resultmode | 可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认) |
实例
以下实例使用了PHP脚本删除数据表 runoob_tbl:
删除数据库
';
$sql = "DROP TABLE runoob_tbl";
mysqli_select_db( $conn, 'testdb' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('数据表删除失败: ' . mysqli_error($conn));
}
echo "数据表删除成功\n";
mysqli_close($conn);
?>
执行成功后,我们使用以下命令,就看不到 runoob_tbl 表了:
mysql> show tables;