mysql分区表怎么删除 mysql 删除表分区

mysql中怎么删除表

DROP TABLE table_name (删除表);delete from 表名 where 删除条件(删除表内数据,用 delete);truncate table 表名(清除表内数据,保存表结构,用 truncate)。

站在用户的角度思考问题,与客户深入沟通,找到敦煌网站设计与敦煌网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广、域名与空间、雅安服务器托管、企业邮箱。业务覆盖敦煌地区。

扩展资料:

1、MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。

2、命令提示窗口中删除数据表:SQL语句为 DROP TABLE 。

3、使用PHP脚本删除数据表:PHP使用 mysqli_query 函数来删除 MySQL 数据表。该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。语法mysqli_query(connection,query,resultmode)。

4、当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时, 用 delete。

5、drop table table_name : 删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM。实例,删除学生表:drop table student。

6、truncate table table_name : 删除表全部数据,保留表结构,立刻释放磁盘空间 ,不管是 Innodb 和 MyISAM。实例,删除学生表:truncate table student。

7、delete from table_name : 删除表全部数据,表结构不变,对于 MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间。实例,删除学生表:delete from student。

8、delete from table_name where xxx : 带条件的删除,表结构不变,不管是 innodb 还是 MyISAM 都不会释放磁盘空间。实例,删除学生表中姓名为 "张三" 的数据:delete from student where T_name = "张三"。

9、delete 操作以后,使用 optimize table table_name 会立刻释放磁盘空间,不管是 innodb 还是 myisam。实例,删除学生表中姓名为 "张三" 的数据:delete from student where T_name = "张三"。

10、delete from 表以后虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以使用这部分空间。

如何彻底删除分区表数据文件

使用分区工具软件彻底删除数据方法如下:

运行软件,在软件中找到想要删除的数据。

选中想要删除的文件,然后点击鼠标右键并选择“彻底删除文件”选项。

在弹出的窗口上点击“彻底删除”按钮。

注意:使用此方法删除的文件将再也无法通过数据恢复软件找回来了。

Mysql分区表Partition

一、背景

话说风和日丽的一天,为提高随着业务增长的大表(3510449行吧)的访问效率,于是决定对表分区,记录如下。

二、实操

结合业务,若干条记录会集中在一个日期,查询时也往往只查询一个日期内的数据,于是选取分区字段为时间。

创建分区 比如

CREATE TABLE message_all (

id int(10) NOT NULL AUTO_INCREMENT,

......

createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'

PRIMARY KEY ( id , createtime )

) ENGINE=InnoDB DEFAULT CHARSET=utf8

PARTITION BY RANGE (YEAR(createtime))

(PARTITION p2015 VALUES LESS THAN (2016) ENGINE = InnoDB,

PARTITION p2016 VALUES LESS THAN (2017) ENGINE = InnoDB,

PARTITION p2017 VALUES LESS THAN (2018) ENGINE = InnoDB,

PARTITION p2018 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)

不过我们表已经有了当然不能这么建,除非你想导一次数据。

如下操作 :

1、

ALTER TABLE message_all PARTITION BY RANGE (to_days(createtime))

(

PARTITION p2015 VALUES LESS THAN (to_days('2016-01-01')),

PARTITION p2016 VALUES LESS THAN (to_days('2017-01-01')),

PARTITION p2017 VALUES LESS THAN (to_days('2018-01-01')),

PARTITION p2018 VALUES LESS THAN MAXVALUE

);

或者

2、ALTER TABLE message_all PARTITION BY RANGE (YEAR(createtime))

(

PARTITION p2015 VALUES LESS THAN (YEAR('2016-01-01'))

);

然后追加。

ALTER TABLE message_all ADD PARTITION

(

PARTITION p2016 VALUES LESS THAN (YEAR('2017-01-01')),

PARTITION p2017 VALUES LESS THAN (YEAR('2018-01-01')),

PARTITION p2018 VALUES LESS THAN MAXVALUE

);

这里会有几种错误情况:

1、ALTER TABLE message_all PARTITION BY RANGE (to_days(createtime)) ;

[Err] 1492 - For RANGE partitions each partition must be defined

解释:必须指定至少一个分区。

2、[Err] 1492 - A PRIMARY KEY must include all columns in the table's partitioning function

解释:分区字段必须是主键之一。

3、[Err] 1492 - Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed

解释:分区字段为timestamp,换成datetime。

4、[Err] 1526 - Table has no partition for value xxxx

解释:用追加方式第一次必须覆盖目前所有数据。

总结:

1、创建时必须指定至少一个分区。

2、key必须为主键之一。

3、RANGE处必须为INT型,时间字段用函数转——YEAR()、YEARWEEK()、TO_DAYS()。

4、THAN处必须为INT型,时间字段用函数转——TO_DAYS、TO_SECONDS()、UNIX_TIMESTAMP()。

5、它就是以两个INT比大小划分的文件。

6、所有ENGINE必须一样。

7、范围分区添加只能在最大值后面追加。

8、分区是有上限的貌似1024个。

用到的其他操作

1、删除分区(直接扔掉分区文件,数据也没了)

ALTER TABLE message_all DROP PARTITION p2016;

2、清空分区数据

ALTER TABLE message_all TRUNCATE PARTITION p2017;

3、重定义(可实现:分区拆分、合并、重命名)

ALTER TABLE message_all REORGANIZE PARTITION p201601,p201602,p201603,p201604 INTO

(

PARTITION p2016012 VALUES less than(TO_DAYS('2016-03-01')),

PARTITION p2016034 VALUES less than(TO_DAYS('2016-05-01'))

);

检查/查看你的分区

1、SHOW TABLE STATUS LIKE 'message_all';

2、SELECT * FROM information_schema.partitions WHERE table_name='message_all';

3、SHOW CREATE TABLE message_all;

4、EXPLAIN SELECT COUNT(1) FROM message_all WHERE createtime= '2016-01-01' AND createtime '2016-12-30';如果用到了分区partitions里会有显示。

5、指定分区查

SELECT COUNT(1) FROM message_all PARTITION (p2016) 表别名 WHERE ......;

到这里就结束啦,土豆白。

一些概念

水平分区Partition有以下几种模式


本文名称:mysql分区表怎么删除 mysql 删除表分区
转载源于:http://myzitong.com/article/hheegh.html