加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL的分范围

发布时间:2022-03-28 23:41:20 所属栏目:MySql教程 来源:互联网
导读:mysql支持范围分区(range)、列表分区(list)、column分区、哈希分区(hash)、key分区、字段列表分区等 以timestamp类型字段作为分区键进行范围分区,有两种方式: CREATE TABLE quarterly_report_status ( report_id INT NOT NULL, report_status VARC
      mysql支持范围分区(range)、列表分区(list)、column分区、哈希分区(hash)、key分区、字段列表分区等
 
     以timestamp类型字段作为分区键进行范围分区,有两种方式:
 
     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('2008-01-01 00:00:00') ),
 
PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-04-01 00:00:00') ),
 
PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-07-01 00:00:00') ),
 
PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-10-01 00:00:00') ),
 
PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-01-01 00:00:00') ),
 
PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-04-01 00:00:00') ),
 
PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-07-01 00:00:00') ),
 
PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-10-01 00:00:00') ),
 
PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2010-01-01 00:00:00') ),
 
PARTITION p9 VALUES LESS THAN (MAXVALUE)
 
);
 
CREATE TABLE members (
 
    firstname VARCHAR(25) NOT NULL,
 
    lastname VARCHAR(25) NOT NULL,
 
    username VARCHAR(16) NOT NULL,
 
    email VARCHAR(35),
 
    joined DATE NOT NULL
 
)
 
PARTITION BY RANGE( YEAR(joined) ) (
 
    PARTITION p0 VALUES LESS THAN (1960),
 
    PARTITION p1 VALUES LESS THAN (1970),
 
    PARTITION p2 VALUES LESS THAN (1980),
 
    PARTITION p3 VALUES LESS THAN (1990),
 
    PARTITION p4 VALUES LESS THAN MAXVALUE
 
);
 
在mysql5.7中timestamp范围分区表只能使用上面两种格式,使用to_days可能触发bug。
 
date类型的分区:
  
PARTITION BY RANGE COLUMNS(joined) (
 
    PARTITION p0 VALUES LESS THAN ('1960-01-01'),
 
    PARTITION p1 VALUES LESS THAN ('1970-01-01'),
 
    PARTITION p2 VALUES LESS THAN ('1980-01-01'),
 
    PARTITION p3 VALUES LESS THAN ('1990-01-01'),
 
    PARTITION p4 VALUES LESS THAN MAXVALUE
 
);
 
使用列表分区的实例:
 
CREATE TABLE employees (
 
id INT NOT NULL,
 
fname VARCHAR(30),
 
lname VARCHAR(30),
 
hired DATE NOT NULL DEFAULT '1970-01-01',
 
separated DATE NOT NULL DEFAULT '9999-12-31',
 
job_code INT,
 
使用ignore关键字,可以在插入多条数据时忽略没有匹配分区的数据,不报错:
 
mysql> CREATE TABLE h3 (
 
-> c1 INT,
 
-> c2 INT
 
-> )
 
-> PARTITION BY LIST(c1) (
 
-> PARTITION p0 VALUES IN (1, 4, 7),
 
-> PARTITION p1 VALUES IN (2, 5, 8)
 
-> );
 
Query OK, 0 rows affected (0.11 sec)
 
mysql> INSERT INTO h3 VALUES (3, 5);
 
ERROR 1525 (HY000): Table has no partition for value 3
 
mysql> INSERT IGNORE INTO h3 VALUES (2, 5), (6, 10), (7, 5), (3, 1), (1, 9);
 
Query OK, 3 rows affected (0.00 sec)
 
Records: 5 Duplicates: 2 Warnings: 0
 
mysql> SELECT * FROM h3;
 
+------+------+
 
| c1 | c2 |
 
+------+------+
 
| 7 | 5 |
 
| 1 | 9 |
 
| 2 | 5 |
 
+------+------+
 
range columns不支持表达式,仅支持一或多个列名。
 
由于字符集character sets和collations的排列顺序不同,当进行数据迁移或者修改库、表、列的字符集时,
 
有可能因此而出现报错。比如对于大小写不敏感的collation,and排列顺序在Andersen之前,
 
但对于大小写敏感的collation就不是。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读