Anda dapat mengatur partisi atau subpartisi ke mode baca-saja untuk melindungi data dari operasi DML yang dilakukan secara tidak sengaja oleh pengguna atau dieksekusi oleh pemicu.
Gambar berikut mengilustrasikan partisi baca-saja.

Sintaksis
- Buat partisi baca-saja saat Anda membuat tabel.
Deskripsi opsi_partisi:CREATE TABLE [IF NOT EXISTS] [schema.]table_name definisi_tabel [READ {ONLY | WRITE}] opsi_partisi;
Deskripsi definisi_partisi:PARTITION BY { RANGE{(expr) | COLUMNS(daftar_kolom)} } [(definisi_partisi [, definisi_partisi] ...)]PARTITION nama_partisi [VALUES LESS THAN {expr | MAXVALUE}] [READ {ONLY | WRITE}] [[STORAGE] ENGINE [=] nama_mesin] [COMMENT [=] 'string' ] [DATA DIRECTORY [=] 'direktori_data'] [INDEX DIRECTORY [=] 'direktori_indeks'] [MAX_ROWS [=] jumlah_baris_maksimum] [MIN_ROWS [=] jumlah_baris_minimum] [TABLESPACE [=] nama_tablespace] - Buat partisi baca-saja saat Anda memodifikasi tabel.
Deskripsi opsi_partisi:ALTER TABLE nama_tbl [opsi_alter [, opsi_alter] ...] [opsi_partisi]
Deskripsi opsi_partisi:opsi_partisi: opsi_partisi [opsi_partisi] ...
Deskripsi definisi_partisi:opsi_partisi: { ADD PARTITION (definisi_partisi)
Deskripsi opsi_alter:PARTITION nama_partisi [VALUES LESS THAN {expr | MAXVALUE}] [READ {ONLY | WRITE}] [[STORAGE] ENGINE [=] nama_mesin] [COMMENT [=] 'string' ] [DATA DIRECTORY [=] 'direktori_data'] [INDEX DIRECTORY [=] 'direktori_indeks'] [MAX_ROWS [=] jumlah_baris_maksimum] [MIN_ROWS [=] jumlah_baris_minimum] [TABLESPACE [=] nama_tablespace]opsi_alter: { opsi_tabel | ADD [COLUMN] nama_kolom definisi_kolom [FIRST | AFTER nama_kolom] | ADD [COLUMN] (nama_kolom definisi_kolom,...) | ADD {INDEX | KEY} [nama_indeks] [tipe_indeks] (bagian_kunci,...) [opsi_indeks] ... | ADD {FULLTEXT | SPATIAL} [INDEX | KEY] [nama_indeks] (bagian_kunci,...) [opsi_indeks] ... | ADD [CONSTRAINT [simbol]] PRIMARY KEY [tipe_indeks] (bagian_kunci,...) [opsi_indeks] ... | ADD [CONSTRAINT [simbol]] UNIQUE [INDEX | KEY] [nama_indeks] [tipe_indeks] (bagian_kunci,...) [opsi_indeks] ... | ADD [CONSTRAINT [simbol]] FOREIGN KEY [nama_indeks] (nama_kolom,...) definisi_referensi | ADD [CONSTRAINT [simbol]] CHECK (ekspresi) [[NOT] ENFORCED] | DROP {CHECK | CONSTRAINT} simbol | ALTER {CHECK | CONSTRAINT} simbol [NOT] ENFORCED | ALGORITHM [=] {DEFAULT | INSTANT | INPLACE | COPY} | ALTER [COLUMN] nama_kolom { SET DEFAULT {literal | (ekspresi)} | SET {VISIBLE | INVISIBLE} | DROP DEFAULT } | ALTER INDEX nama_indeks {VISIBLE | INVISIBLE} | CHANGE [COLUMN] nama_kolom_lama nama_kolom_baru definisi_kolom [FIRST | AFTER nama_kolom] | [DEFAULT] CHARACTER SET [=] nama_charset [COLLATE [=] nama_kolasi] | CONVERT TO CHARACTER SET nama_charset [COLLATE nama_kolasi] | {DISABLE | ENABLE} KEYS | {DISCARD | IMPORT} TABLESPACE | DROP [COLUMN] nama_kolom | DROP {INDEX | KEY} nama_indeks | DROP PRIMARY KEY | DROP FOREIGN KEY simbol_fk | FORCE | LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE} | MODIFY [COLUMN] nama_kolom definisi_kolom [FIRST | AFTER nama_kolom] | ORDER BY nama_kolom [, nama_kolom] ... | RENAME COLUMN nama_kolom_lama TO nama_kolom_baru | RENAME {INDEX | KEY} nama_indeks_lama TO nama_indeks_baru | RENAME [TO | AS] nama_tbl_baru | {WITHOUT | WITH} VALIDATION }
Parameter
| Parameter | Deskripsi |
| nama_tabel | Nama tabel. |
| ekspresi | Ekspresi kolom kunci partisi. |
| daftar_kolom | Daftar kolom kunci partisi. Ekspresi tidak didukung. |
| NILAIMAKSIMUM | Nilai maksimum dalam partisi. |
| nama_partisi | Nama partisi. Nama tersebut harus unik dalam tabel. |
| nama_mesin | Nama mesin penyimpanan. |
| opsi_tabel | Opsi tabel. |
| nama_kolom | Nama kolom. |
Catatan penggunaan
Anda tidak dapat memodifikasi data dalam partisi baca-saja. Jika Anda melakukan operasi modifikasi data, pesan kesalahan berikut akan dikembalikan: ERROR HY000: Data dalam partisi atau subpartisi baca-saja tidak dapat dimodifikasi.. Operasi modifikasi data termasuk pernyataan DML seperti INSERT, UPDATE, dan DELETE, serta operasi DDL yang mengakibatkan perubahan data dalam tabel.
Namun, menambahkan kolom ke tabel diperbolehkan karena operasi ini tidak mengubah properti baca-saja data yang ada di tabel. Contoh:
ALTER TABLE [skema.]nama_tabel ADD kolom_baru varchar(100) DEFAULT 'saya tidak kosong';Contoh
Buat tabel bernama
t1 yang semua partisinya adalah partisi baca-saja.CREATE TABLE t1 (
id INT,
tahun_kol INT
) READ ONLY
PARTITION BY RANGE (tahun_kol) (
PARTITION p0 VALUES LESS THAN (2001),
PARTITION p1 VALUES LESS THAN (2010),
PARTITION p2 VALUES LESS THAN (2020)
);Buat partisi baca-saja untuk tabel
t1.ALTER TABLE t1 ADD PARTITION (PARTITION p3 values LESS THAN (2030));
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0Periksa partisi baca-saja yang telah dibuat.SHOW CREATE TABLE t1;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`tahun_kol` int(11) DEFAULT NULL
) /*!99990 800020201 READ ONLY */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY RANGE (`tahun_kol`)
(PARTITION p0 VALUES LESS THAN (2001) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (2010) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (2020) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (2030) ENGINE = InnoDB) */ |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)Buat partisi baca-saja dan partisi baca/tulis untuk tabel
t1.CREATE TABLE t1 (
id INT,
tahun_kol INT
) READ WRITE
PARTITION BY RANGE (tahun_kol) (
PARTITION p0 VALUES LESS THAN (2001) READ ONLY,
PARTITION p1 VALUES LESS THAN (2010),
PARTITION p2 VALUES LESS THAN (2020) READ ONLY
);Lihat partisi baca-saja
Anda dapat menggunakan pernyataan SHOW CREATE TABLE untuk melihat informasi tentang partisi baca-saja suatu tabel.
show create table t1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`tahun_kol` int(11) DEFAULT NULL
) /*!99990 800020201 READ WRITE */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY RANGE (`tahun_kol`)
(PARTITION p0 VALUES LESS THAN (2001) */ /*!99990 800020201 READ ONLY */
/*!50100 ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (2010) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (2020) */ /*!99990 800020201 READ ONLY */
/*!50100 ENGINE = InnoDB) */ |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)