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.