パーティションを張りたいのですがPARTITIONに指定するカラムってPRIMARYのカラムじゃないといけないのでしょうか。
⇒厳密には以下のようなSQLであれば、作成できるので「いいえ」です。
SQL
1-- DROP TABLE IF EXISTS t_no_pk;
2CREATE TABLE IF NOT EXISTS t_no_pk(
3 c1 INT
4 , c2 INT
5)
6PARTITION BY RANGE(c1) (
7 PARTITION p0 VALUES LESS THAN (10),
8 PARTITION p1 VALUES LESS THAN (20),
9 PARTITION p2 VALUES LESS THAN (30),
10 PARTITION p3 VALUES LESS THAN MAXVALUE
11);
ですが、パーティションの用途として、
基本的にはプライマリーキーや一意キーを推奨します。
※MAXVALUEを使わなければ、該当カラムに登録の範囲制限をかけるために使えるかもしれませんが、
わざわざ、テーブル(しかもパーティション)でやる必要はないですね。。。
下記のようなエラーが出たので意味合い的にPRIMARYの項目じゃないといけないと思っているのですが、その理由
⇒上記のようにプライマリーキーでなくても作成はできます。
ただ、プライマリーキーやユニークキーが存在するテーブルなら、
パーティション(ファイル分割)を行う場合、
その項目を使わない手はないでしょう?
という事だと思います。
たとえば、1冊の本(テーブル)をイメージして頂ければ、
1頁、2頁、・・・と情報記載されていて、
いざ分割する時に、適当なページ数で分割した方が分割・結合しやすいのに、
わざわざページの中の特定の情報部分で分割する必要ないですよね?
といったところでしょうか。
※プライマリーキーがないということは、1つの大きなページに情報がたくさんちらばっているのを、
特定の情報部分で並べて分割するイメージです。
p2015で指定している全テーブルのデータになるのでしょうか?それともlist_rtxのデータだけでしょうか?
ALTER TABLE list_rtx DROP PARTITION p2015;
⇒list_rtxテーブルにパーティションを作った場合、
list_rtxテーブルの中のデータがp2014,p2015,p2016,p2017,…という名前で分割されているイメージです。
上記SQLでは、list_rtxテーブルの中のデータのうち、パーティション名p2015の条件のデータがパーティションと共に、データも全て削除されます。
SQL
1-- 上記SQLを実行した場合のお試し用SQL
2INSERT INTO t_no_pk
3values
4( -50, NULL)
5,( 0, NULL)
6,( 10, NULL)
7,( 20, 0)
8,( 30, 0)
9,( 40, 0)
10,( 2147483647, 0)
11,( NULL, 0)
12;
13-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。
14
15SELECT * FROM t_no_pk;
16
17ALTER TABLE t_no_pk
18 DROP PARTITION p3;
19-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。
20
21SELECT * FROM t_no_pk;
22
23show create table t_no_pk;
24
データを残すにはREMOVEを利用すればよいのでしょうか?
ALTER TABLE list_rtx REMOVE PARTITIONING;
⇒はい、そうです。
SQL
1ALTER TABLE t_no_pk REMOVE PARTITIONING;
2-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。
3
4SELECT * FROM t_no_pk;
5
6show create table t_no_pk;
7-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。
8
全体的にパーティションの理屈がわかっていないため
⇒実際に実行して試してみるのも手です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。