Saat membuat tabel di SQLite, Anda memiliki opsi untuk menambahkan batasan ke setiap kolom.
Salah satu kendala tersebut adalah DEFAULT
kendala.
DEFAULT
batasan memungkinkan Anda untuk menentukan nilai yang akan digunakan jika tidak ada nilai yang diberikan untuk kolom tersebut saat baris baru dimasukkan.
Jika Anda tidak gunakan DEFAULT
klausa, maka nilai default untuk kolom adalah NULL
.
Kemungkinan Nilai Default
Nilai default eksplisit dari DEFAULT
batasan dapat berupa salah satu dari berikut ini:
- konstanta string
- konstanta gumpalan
- nomor yang ditandatangani
- ekspresi konstan apa pun yang diapit tanda kurung.
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
NULL
Contoh
Berikut ini contoh untuk didemonstrasikan.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
Di sini saya menambahkan DEFAULT
kendala pada Harga kolom. Dalam hal ini, nilai defaultnya adalah 0,00 .
Sekarang ketika saya menyisipkan baris baru tanpa menentukan nilai untuk Harga kolom, nilai default digunakan.
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
Hasil:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
Nilai Eksplisit
Tentu saja, nilai default hanya digunakan jika Anda tidak memberikan nilai secara eksplisit. Jika ya, maka nilai itu yang akan digunakan.
Ini contoh lain. Kali ini saya secara eksplisit memberikan nilai untuk Harga itu kolom.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (2, 'Left-Handed Screwdriver', 19.99);
SELECT * FROM Products;
Hasil:
ProductId ProductName Price ---------- ------------------------- ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99
NULL Eksplisit
Contoh sebelumnya juga berlaku untuk NULL
yang diberikan secara eksplisit nilai.
Untuk mendemonstrasikan ini, inilah yang terjadi jika saya secara eksplisit memasukkan NULL
ke dalam Harga kolom.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (3, 'Elbow Grease', NULL);
SELECT * FROM Products;
Hasil:
ProductId ProductName Price ---------- ------------------------ ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99 3 Elbow Grease
Kali ini Harga kolomnya adalah NULL
, karena itulah yang saya masukkan secara eksplisit ke dalam kolom itu.
Untuk mencegah hal ini terjadi, lihat Cara Mengonversi Nilai NULL ke Nilai Default Kolom saat Memasukkan Data di SQLite.
Stempel Waktu Default
Dalam contoh ini saya membuat tabel lain. Kali ini saya menyetel nilai default ke stempel waktu saat ini.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
Dan sekarang untuk beberapa data.
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
Hasil:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
Stempel waktu dimasukkan seperti yang diharapkan.
Nilai Peningkatan Otomatis sebagai Nilai Default
Perhatikan bahwa pada contoh sebelumnya saya juga tidak memberikan nilai untuk TypeId kolom, tetapi secara otomatis menghasilkan nilai default.
Dalam hal ini, nilai default bukan karena DEFAULT
paksaan. Hal ini dikarenakan kolom tersebut merupakan kolom primary key yang dibuat dengan menggunakan INTEGER PRIMARY KEY
. Saat Anda mendefinisikan kolom menggunakan INTEGER PRIMARY KEY
, kolom secara otomatis menjadi kolom kenaikan otomatis.
Untuk mendemonstrasikan ini secara lebih menyeluruh, inilah yang terjadi jika saya memasukkan beberapa baris lagi.
INSERT INTO Types (Type)
VALUES
( 'Software' ),
( 'Hardcopy' );
SELECT * FROM Types;
Hasil:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57 2 Software 2020-06-05 00:22:14 3 Hardcopy 2020-06-05 00:22:14
Untuk informasi selengkapnya tentang penambahan kolom otomatis, lihat Cara kerja AUTOINCREMENT di SQLite, dan Cara Membuat Kolom Peningkatan Otomatis di SQLite.
Ekspresi sebagai Nilai Default
Anda juga dapat menggunakan ekspresi konstan sebagai nilai default. Untuk melakukan ini, ekspresi harus diapit dalam tanda kurung.
Ini contohnya.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
Dan sekarang untuk beberapa data.
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
Hasil:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
Perhatikan bahwa ekspresi harus berupa ekspresi konstan. Ekspresi konstanta adalah ekspresi yang hanya berisi konstanta.
Jika Anda mencoba menggunakan ekspresi yang tidak hanya berisi konstanta, Anda akan mendapatkan kesalahan.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
Hasil:
Error: default value of column [UserName] is not constant