パーティションまたはサブパーティションを読み取り専用モードに設定できます。これにより、ユーザーが誤って実行したり、トリガーによって実行したりするDML操作からデータを保護できます。
次の図は、読み取り専用パーティションを示しています。
構文
- テーブルを作成するときに読み取り専用パーティションを作成します。
partition_optionsの説明:CREATE TABLE [存在しない場合] [schema.]table_name table_definition [READ {のみ | 書き込み}] partition_options;
partition_definitionの説明:PARTITION BY {RANGE{(expr) | COLUMNS(column_list)} } [(partition_definition [, partition_definition] ...)]
PARTITION partition_name [{expr | MAXVALUE} より少ない値] [READ {のみ | 書き込み}] [[ストレージ] エンジン [=] engine_name] [COMMENT [=] 'string'] [データディレクトリ [=] 'data_dir'] [インデックスディレクトリ [=] 'index_dir'] [MAX_ROWS [=] max_number_of_rows] [MIN_ROWS [=] min_number_of_rows] [TABLESPACE [=] tablespace_name]
- テーブルを変更するときに読み取り専用パーティションを作成します。
partition_optionsの説明:ALTER TABLE tbl_name [alter_option [, alter_option] ...] [partition_options]
partition_optionの説明:partition_options: partition_option [partition_option] ...
partition_definitionの説明:partition_option: { ADD PARTITION (partition_definition)
alter_optionの説明:PARTITION partition_name [{expr | MAXVALUE} より少ない値] [READ {のみ | 書き込み}] [[ストレージ] エンジン [=] engine_name] [COMMENT [=] 'string'] [データディレクトリ [=] 'data_dir'] [インデックスディレクトリ [=] 'index_dir'] [MAX_ROWS [=] max_number_of_rows] [MIN_ROWS [=] min_number_of_rows] [TABLESPACE [=] tablespace_name]
alter_option: { table_options | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name] | ADD [COLUMN] (col_name column_definition,...) | ADD {INDEX | KEY} [index_name] [index_type] (key_part,...) [index_option] ... | ADD {FULLTEXT | SPATIAL} [インデックス | キー] [index_name] (key_part,...) [index_option] ... | ADD [CONSTRAINT [シンボル]] PRIMARYキー [index_type] (key_part,...) [index_option] ... | ADD [CONSTRAINT [シンボル]] UNIQUE [インデックス | キー] [index_name] [index_type] (key_part,...) [index_option] ... | ADD [CONSTRAINT [シンボル]] 外国キー [index_name] (col_name,...) reference_definition | ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED] | DROP {チェック | CONSTRAINT} シンボル | ALTER {チェック | CONSTRAINT} シンボル [NOT] ENFORCED | ALGORITHM [=] {デフォルト | インスタント | インプレース | コピー} | ALTER [コラム] col_name { SET DEFAULT {リテラル | (expr)} | SET {VISIBLE | INVISIBLE} | ドロップデフォルト } | ALTER INDEX index_name {VISIBLE | INVISIBLE} | CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name] | [デフォルト] 文字セット [=] charset_name [COLLATE [=] collation_name] | CHARACTER SET charset_nameに変換 [collation_name] | {DISABLE | ENABLE} キー | {割引 | インポート} TABLESPACE | ドロップ [コラム] col_name | DROP {INDEX | KEY} index_name | DROP PRIMARYキー | DROP FOREIGN KEY fk_symbol | フォース | LOCK [=] {デフォルト | NONE | 共有 | 排他的} | MODIFY [コラム] col_name column_definition [FIRST | AFTER col_name] | ORDER BY col_name [, col_name] ... | RENAME COLUMN old_col_nameにnew_col_name | RENAME {INDEX | KEY} old_index_nameからnew_index_nameへ | RENAME [TO | AS] new_tbl_name | {WITHOUT | WITH} VALIDATION }
パラメーター
パラメーター | 説明 |
table_name | テーブルの名前。 |
expr | パーティションキー列の式。 |
column_list | パーティションキー列のリスト。 式はサポートされていません。 |
MAXVALUE | パーティション内の最大値。 |
partition_name | パーティションの名前。 名前はテーブル内で一意である必要があります。 |
engine_name | ストレージエンジンの名前。 |
table_options | テーブルオプション。 |
col_name | 列の名前。 |
使用上の注意
読み取り専用パーティションのデータは変更できません。 データ変更操作を実行すると、次のエラーメッセージが返されます。error HY000: 読み取り専用パーティションまたはサブパーティションのデータを変更できません。
データ変更操作には、INSERT、UPDATE、DELETEなどのDML文と、テーブルのデータ変更をもたらすDDL操作が含まれます。
ただし、この操作ではテーブル内の既存のデータの読み取り専用プロパティは変更されないため、テーブルに列を追加することはできます。 例:
ALTER TABLE [schema.]table_name ADD col_new varchar(100) DEFAULT 'i am not empty';
例
パーティションがすべて読み取り専用パーティションである
t1
という名前のテーブルを作成します。テーブルの作成t1 (
id INT,
year_col INT
) のみ読む
RANGE (year_col) によるPARTITION (
PARTITION p0の値は (2001) 未満、
パートp1の値は (2010) 未満、
PARTITION p2の値がより少ない (2020)
);
t1
テーブルの読み取り専用パーティションを作成します。ALTER TABLE t1 ADD PARTITION (PARTITION p3値よりも少ない (2030));
クエリOK、影響を受ける0行 (0.22秒)
レコード: 0重複: 0警告: 0
作成された読み取り専用パーティションを確認します。ショー作成テーブルt1;
+ ------- + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| テーブル | テーブルの作成 |
+ ------- + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| t1 | CREATE TABLE 't1' (
'id' int(11) DEFAULT NULL、
'year_col' int (11) DEFAULT NULL
) /*!99990 800020201読み取りのみ * /エンジン=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100パーティーBY RANGE ('year_col')
(PARTITION p0は (2001) エンジンより少ない値=InnoDB、
PARTITION p1は (2010) エンジン=InnoDBより少ない値、
PARTITION p2は、(2020) エンジン=InnoDBよりも少ない値であり、
PARTITION p3は (2030) エンジン=InnoDBより少ない値 */ |
+ ------- + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
1行セット (0.00秒)
t1
テーブルの読み取り専用パーティションと読み取り /書き込みパーティションの両方を作成します。テーブルの作成t1 (
id INT,
year_col INT
) READ WRITE
RANGE (year_col) によるPARTITION (
PARTITION p0は (2001) よりも少ない値を読み、
パートp1の値は (2010) 未満、
パートp2は (2020) よりも少ない読み取りのみ
);
読み取り専用パーティションの表示
SHOW CREATE TABLEステートメントを使用して、テーブルの読み取り専用パーティションに関する情報を表示できます。
ショー作成テーブルt1;
+ ------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| テーブル | テーブルの作成 |
+ ------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| t1 | CREATE TABLE 't1' (
'id' int(11) DEFAULT NULL、
'year_col' int (11) DEFAULT NULL
) /*!99990 800020201読み取り書き込み * /エンジン=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100パーティーBY RANGE ('year_col')
(PARTITION p0は (2001) */ /* より少ない値です! 99990 800020201のみ読む * /
/*!50100エンジン=InnoDB、
PARTITION p1は (2010) エンジン=InnoDBより少ない値、
PARTITION p2は (2020) */ /* より少ない値です! 99990 800020201のみ読む * /
/*!50100エンジン=InnoDB) */ |
+ ------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
1行セット (0.01秒)