Heim >Datenbank >MySQL-Tutorial >MySQL 5.5中使用UNIX_TIMESTAMP分区_MySQL

MySQL 5.5中使用UNIX_TIMESTAMP分区_MySQL

WBOY
WBOYOriginal
2016-06-01 13:44:581018Durchsuche

bitsCN.com

RT不用多说,同行一看就知道!
 
MySQL分区有很多种,这里我只讨论按时间——按天分区!
 
在操作之前,你仍然有必要执行如下命令,查看你的MySQL版本是否支持partition功能:
 
 
Sql代码 
show variables like '%partition%' 
如果系统输出如下结果,那么恭喜你,MySQL支持分区!
 
Sql代码 
variable_name            value 
have_partitioning        yes 
 
 
Sql代码 
CREATE TABLE quarterly_report_status ( 
report_id INT NOT NULL, 
    report_status VARCHAR(20) NOT NULL, 
    report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) ( 
    PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-01-01 00:00:00') ), 
    PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-02-01 00:00:00') ), 
    PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-03-01 00:00:00') ), 
    PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-04-01 00:00:00') ), 
    PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-05-01 00:00:00') ), 
    PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-06-01 00:00:00') ), 
    PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-07-01 00:00:00') ), 
    PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-08-01 00:00:00') ), 
    PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-09-01 00:00:00') ), 
    PARTITION p9 VALUES LESS THAN (MAXVALUE) 
); 
 
官方文档说从MySQL 5.1.43开始,除了TIMESTAMP 外,其他日期类型都不接受!
 
偶虽然没有尝试,至于你信不信,反正我是信了!
 
 
Explain Partitions SQL测试,看看是否有效:
 
Sql代码 
explain partitions select * FROM quarterly_report_status q where q.report_updated  输出:
 
| id | select_type | table | partitions | type | possible_keys | key  | key_len| ref     | rows | Extra       |
|  1 | SIMPLE        | q       | p0,p1       | ALL  | NULL              | NULL | NULL    | NULL |    2    | Using where |
1 row in set (0.00 sec)
 
非常棒,完美!
————————————————————————————————————————————————————
 
【转】相关函数:from_unixtime(date)
 
date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串
 
后面的 '%Y%m%d' 主要是将返回值格式化(可有可无)
 
例如:
mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' ) 
->20071120
 
mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' )
->2007年11月20
 
UNIX_TIMESTAMP() 是与之相对正好相反的时间函数
 
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
 
  若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用 UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个 DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。
 
例如:
mysql> SELECT UNIX_TIMESTAMP() ; (执行使得时间:2009-08-06 10:10:40)
->1249524739
mysql> SELECT UNIX_TIMESTAMP('2009-08-06') ;
->1249488000
SELECT * FROM `student` WHERE regTime > UNIX_TIMESTAMP( curdate( ) )

作者“极客先生”
 

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn