MySQL-15 DDL之删除数据表

一、语法

1.1删除数据表

	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;
    

MySQL-15 DDL之删除数据表_第1张图片
具体操作:
判断表是否存在并删除s1表

     DROP TABLE IF EXISTS s1;

MySQL-15 DDL之删除数据表_第2张图片

1.2删除列

在某些情况下,您希望从表中删除一个或多个列。

ALTER TABLE table DROP [COLUMN] column-1, DROP [COLUMN] column-2;
  • table:指定包含要删除的列的表 ;

  • column:指的是列的名称;

  • COLUMN是可选的;

  • 如果删除的列是外键,MySQL将发出一个错误。
    具体操作:
    删除student表中的字段intro

        ALTER TABLE student DROP  intro; 
    

MySQL-15 DDL之删除数据表_第3张图片
示例演示:
我们在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

MySQL-15 DDL之删除数据表_第4张图片
MySQL-15 DDL之删除数据表_第5张图片
MySQL-15 DDL之删除数据表_第6张图片
MySQL-15 DDL之删除数据表_第7张图片

1.3删除基于模式匹配的表

	--为表设置表模式和模式匹配(声明两个接受数据库模式的变量和希望与表匹配的模式:)
	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

MySQL-15 DDL之删除数据表_第8张图片

使用PHP脚本删除数据表

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;

你可能感兴趣的:(数据库之MySQL)