mysql删除表的命令

mysql中删除表的命令如下:在mysql中,可以使用“DORPTABLE”语句来删除数据表。
一般语法格式为“DROPTABLEtable_name;”;其中,“table_name”代表要删除的数据表的名称,可以指定多个数据。
表名,只要用逗号分隔即可。
在MySQL中删除数据表非常容易,但是删除表时必须非常小心,因为执行删除命令后所有数据都会消失。
从执行结果可以看出,test_db数据库的数据表列表中不再存在名为tb_emp2的表,删除操作成功。

MySQL删除表数据,磁盘空间还一直被占用,为什么?

最近,我有一个项目,上级计算机检索下级计算机上报的数据,由于上报频率频繁,数据量大,导致数据增长过快,占用大量磁盘空间。

为了节省成本,请定期进行数据备份并删除表记录。

删除是理所当然的事情,但是令人沮丧的是,表文件的大小并没有减少。

项目的数据库使用MySQL。
表结构和表数据。
表结构占用的空间比较小,通常是表数据占用的空间。

使用delete删除数据实际上是删除表中的数据记录,但不会改变表文件大小。

Mysql数据结构

使用过MySQL的人可能都听说过B+树。
MySQLInnoDB使用B+树作为存储数据的结构,也称为索引组织表,数据存储如下。
要保存的页面。
因此,删除数据时会发生两件事:

从数据页中删除一些记录。

删除整个数据页的内容。

表文件大小不会。
改动与Mysql设计相关

例如要删除一条R4记录:

InnoDB直接将R4记录标记为删除做。
,这些称为可重用位置。
如果您稍后插入ID在300到700之间的记录,则将重复使用该位置。

可以看到磁盘文件的大小并没有减少。

如果删除整个数据,则记录标记也被删除。
与隐式记录删除的区别在于,如果删除整个记录页,则记录标记也被删除。
如果稍后插入它,它将超出其原始范围。
该位置可以重用,但如果仅删除隐式记录,则必须插入与已删除记录的位置匹配的数据才能重用。

所以无论你删除一行数据还是一页数据,你的文件都不会缩小,因为它会被标记为已删除并可以重复使用。

怎样才能让表的大小变小?

DELETE只删除数据标识位,并不清理数据文件。
当插入新数据时,这些带有删除标识的记录的空间可以被重用。
使用OPTIMIZETABLE回收未使用的空间并对数据文件进行碎片整理。

OPTIMIZETABLE表名;

注意:OPTIMIZETABLE仅适用于MyISAM、BDB和InnoDB表。

也可以通过ALTERTABLE重建表。

ALTERTABLE表名ENGINE=INNODB

有人可能会问OPTIMIZETABLE和ALTERTABLE有什么区别?是。

altertabletengine=InnoDB(即再生),而optimtablet与再生+分析相同。

OnlineDDL

最后说一下OnlineDDL。
DBA的日常任务之一是:ddl更改和ddl更改会导致表锁定。
这是DBA心中永远的痛苦,因为它会导致库中的许多线程处于“Waitingformetadatalock”状态,尤其是在执行DDL更改时。
所以OnlineDDL是在5.6版本之后引入的。

在OnlineDDL发布之前,执行DDL的方式主要有两种,也称为Copy模式和Inplace模式(fastindexcreation)。
与复制方法相比,就地方法速度更快,因为它不复制数据。
不过这种方法只支持增删索引,并且和copy方法一样需要全表锁,所以不太实用。
与前两种方式相比,在线方式不仅可以支持读操作,还可以支持写操作。

执行onlineDDL语句时使用ALGORITHM和LOCK关键字。
这两个关键字位于DDL语句的末尾,可以用逗号分隔。
示例包括:

ALTERTABLEtbl_nameADDCOLUMNcol_namecol_type,ALGORITHM=INPLACE,LOCK=NONE;

ALGORITHM选项

INPLACE:替代方案:直接在源表上执行DDL操作。


COPY:复制:临时表方法用于克隆临时表,对临时表运行DDL,然后将数据导入临时表,重命名等。
在此期间,需要两倍的磁盘空间来支持这些操作。
表运行时不允许对其进行DML操作。

DEFAULT:允许MySQL选择默认方法。
优选INPLACE方法。

LOCK选项

SHARE:共享锁,执行DDL的表只能读,不能写。

NONE:无限制,读表执行DDL。

EXCLUSIVE:排它锁,执行DDL的表无法读写。

DEFAULT:默认值,DDL语句中未指定LOCK子句时使用的默认值。
如果LOCK值指定为DEFAULT,则由MySQL子句决定是否锁定表。
不推荐。
如果您确定DDL语句不会锁定表,则不能指定锁定或默认其值。
否则,建议指定锁类型。

执行DDL操作时无需指定ALGORITHM选项。
此时,MySQL会自动按照以下顺序选择合适的模式:INSTANT、INPLACE、COPY。
您还可以指定ALGORITHM=DEFAULT,它具有相同的效果。
如果指定了ALGORITHM选项但不支持,则直接报错。

OPTIMIZETABLE和ALTERTABLE表名ENGINE=INNODB都支持OlineDDL,但在业务流量较低的时候还是建议使用它们

总结

当删除删除数据时,实际上是删除了相应的数据行被标记为可重用,只需实际删除,因此您的表空间不会变小。

删除数据后重新创建表(OPTIMIZETABLE或ALTERTABLE)可以快速减小表大小。
从5.6版本开始,建表已经支持在线工作,但最好在工作量较小的时候进行。
小时。