Ringkasan :dalam tutorial ini, Anda akan belajar bagaimana menggunakan SQLite PRIMARY KEY
batasan untuk mendefinisikan kunci utama untuk sebuah tabel.
Pengantar kunci utama SQLite
Kunci utama adalah kolom atau grup kolom yang digunakan untuk mengidentifikasi keunikan baris dalam sebuah tabel. Setiap tabel memiliki satu dan hanya satu kunci utama.
SQLite memungkinkan Anda untuk mendefinisikan kunci utama dalam dua cara:
Pertama, jika primary key hanya memiliki satu kolom, gunakan PRIMARY KEY
batasan kolom untuk mendefinisikan kunci utama sebagai berikut:
CREATE TABLE table_name(
column_1 INTEGER NOT NULL PRIMARY KEY,
...
);
Code language: PHP (php)
Kedua, jika kunci utama terdiri dari dua kolom atau lebih, gunakan PRIMARY KEY
batasan tabel untuk mendefinisikan yang utama seperti yang ditunjukkan pada pernyataan berikut.
CREATE TABLE table_name(
column_1 INTEGER NOT NULL,
column_2 INTEGER NOT NULL,
...
PRIMARY KEY(column_1,column_2,...)
);
Code language: SQL (Structured Query Language) (sql)
Dalam standar SQL, kolom kunci utama tidak boleh berisi NULL
nilai-nilai. Artinya kolom kunci utama memiliki NOT NULL
implisit kendala.
Namun, untuk membuat versi SQLite saat ini kompatibel dengan versi sebelumnya, SQLite mengizinkan kolom kunci utama berisi NULL
nilai.
Kunci utama SQLite dan tabel rowid
Saat Anda membuat tabel tanpa menentukan WITHOUT ROWID
pilihan, SQLite menambahkan kolom implisit yang disebut rowid
yang menyimpan bilangan bulat bertanda 64-bit. rowid
kolom adalah kunci yang secara unik mengidentifikasi baris dalam tabel. Tabel yang memiliki rowid
kolom disebut rowid
tabel.
Jika sebuah tabel memiliki kunci utama yang terdiri dari satu kolom, dan kolom tersebut didefinisikan sebagai INTEGER
maka kolom kunci utama ini menjadi alias untuk rowid
kolom.
Perhatikan bahwa jika Anda menetapkan tipe integer lain seperti BIGINT
dan UNSIGNED INT
ke kolom kunci utama, kolom ini tidak akan menjadi alias untuk rowid
kolom.
Karena rowid
tabel mengatur datanya sebagai B-tree, mengkueri dan menyortir data dari rowid
meja sangat cepat. Ini lebih cepat daripada menggunakan kunci utama yang bukan merupakan alias dari rowid
.
Catatan penting lainnya adalah jika Anda mendeklarasikan kolom dengan INTEGER
ketik dan PRIMARY KEY DESC
klausa, kolom ini tidak akan menjadi alias untuk rowid
kolom:
CREATE TABLE table(
pk INTEGER PRIMARY KEY DESC,
...
);
Code language: SQL (Structured Query Language) (sql)
Membuat contoh kunci utama SQLite
Pernyataan berikut membuat tabel bernama countries
yang memiliki country_id
kolom sebagai kunci utama.
CREATE TABLE countries (
country_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
Cobalah
Karena kunci utama countries
tabel hanya memiliki satu kolom, kami mendefinisikan kunci utama menggunakan PRIMARY KEY
batasan kolom.
Dimungkinkan untuk menggunakan PRIMARY KEY
batasan tabel untuk mendefinisikan kunci utama yang terdiri dari satu kolom seperti yang ditunjukkan pada pernyataan berikut:
CREATE TABLE languages (
language_id INTEGER,
name TEXT NOT NULL,
PRIMARY KEY (language_id)
);
Code language: SQL (Structured Query Language) (sql)
Cobalah
Namun, untuk tabel yang kunci utama terdiri dari lebih dari satu kolom, Anda harus menggunakan PRIMARY KEY
batasan tabel untuk mendefinisikan kunci utama.
Pernyataan berikut membuat country_languages
tabel yang kunci utamanya terdiri dari dua kolom.
CREATE TABLE country_languages (
country_id INTEGER NOT NULL,
language_id INTEGER NOT NULL,
PRIMARY KEY (country_id, language_id),
FOREIGN KEY (country_id) REFERENCES countries (country_id)
ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (language_id) REFERENCES languages (language_id)
ON DELETE CASCADE ON UPDATE NO ACTION
);
Code language: PHP (php)
Cobalah
Menambahkan contoh kunci utama SQLite
Tidak seperti sistem database lain misalnya MySQL dan PostgreSQL, Anda tidak dapat menggunakan ALTER TABLE
pernyataan untuk menambahkan kunci utama ke tabel yang ada.
Anda harus mengikuti langkah-langkah berikut untuk mengatasi batasan:
- Pertama, matikan pemeriksaan batasan kunci asing.
- Selanjutnya, ubah nama tabel menjadi nama tabel lain (old_table)
- Kemudian, buat tabel (tabel) baru dengan struktur persis tabel yang telah Anda rename.
- Setelah itu, salin data dari tabel_lama ke tabel.
- Terakhir, aktifkan pemeriksaan batasan kunci asing
Lihat pernyataan berikut:
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE table RENAME TO old_table;
-- define the primary key constraint here
CREATE TABLE table ( ... );
INSERT INTO table SELECT * FROM old_table;
COMMIT;
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Cobalah
BEGIN TRANSACTION
memulai transaksi baru. Ini memastikan bahwa semua pernyataan berikutnya berhasil dieksekusi atau tidak ada yang dieksekusi sama sekali.
COMMIT
pernyataan melakukan semua pernyataan.
Mari kita buat nama tabel cities
tanpa kunci utama.
CREATE TABLE cities (
id INTEGER NOT NULL,
name text NOT NULL
);
INSERT INTO cities (id, name)
VALUES(1, 'San Jose');
Code language: SQL (Structured Query Language) (sql)
Cobalah
Untuk menambahkan kunci utama ke cities
tabel, Anda melakukan langkah-langkah berikut:
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE cities RENAME TO old_cities;
CREATE TABLE cities (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL
);
INSERT INTO cities
SELECT * FROM old_cities;
DROP TABLE old_cities;
COMMIT;
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Cobalah
Jika Anda menggunakan alat GUI SQLite, Anda dapat menggunakan pernyataan berikut untuk menampilkan informasi tabel.
PRAGMA table_info([cities]);
Code language: SQL (Structured Query Language) (sql)
Cobalah
Dalam tutorial ini, Anda telah belajar menggunakan PRIMARY KEY
SQLite batasan untuk mendefinisikan kunci utama untuk sebuah tabel.