すべてのプロダクト
Search
ドキュメントセンター

PolarDB:読み取り専用パーティションの作成

最終更新日:Jun 04, 2024

パーティションまたはサブパーティションを読み取り専用モードに設定できます。これにより、ユーザーが誤って実行したり、トリガーによって実行したりするDML操作からデータを保護できます。

次の図は、読み取り専用パーティションを示しています。Read-only partitions

構文

  • テーブルを作成するときに読み取り専用パーティションを作成します。
    CREATE TABLE [存在しない場合] [schema.]table_name
        table_definition [READ {のみ | 書き込み}]
        partition_options; 
    partition_optionsの説明:
    PARTITION BY
        {RANGE{(expr) | COLUMNS(column_list)} }
        [(partition_definition [, 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] 
  • テーブルを変更するときに読み取り専用パーティションを作成します。
    ALTER TABLE tbl_name
        [alter_option [, alter_option] ...]
        [partition_options] 
    partition_optionsの説明:
    partition_options:
        partition_option [partition_option] ... 
    partition_optionの説明:
    partition_option: {
        ADD PARTITION (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] 
    alter_optionの説明:
    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秒)