Kendala utama Oracle adalah menjaga integritas data pada tingkat logika bisnis. Terutama oleh pemrogram untuk menentukan batasan dalam aplikasi atau dengan menentukan pemicu untuk menjaga integritas data, dan terakhir dengan menggunakan batasan Oracle sendiri untuk menjaga integritas data. Jika Anda dapat menggunakan batasan Oracle sendiri untuk memenuhi persyaratan, coba gunakan batasan Oracle sendiri, karena penggunaan batasan yang ditentukan pengguna seperti pemicu akan mempengaruhi kinerja database. Misalnya: saat menggunakan pemicu, tabel akan dikunci dan pemindaian tabel atau pemindaian indeks akan dilakukan, yang akan mengurangi performa dan konkurensi database.
Batasan Oracle terutama dibagi menjadi beberapa jenis berikut:
bukan batasan nol bukan nol, batasan unik unik, batasan kunci utama kunci utama, batasan kunci asing kunci asing, batasan periksa.
bukan nol batasan bukan nol:
Metode pembuatan: 1. Tentukan di tingkat kolom saat membuat tabel (yaitu, Anda hanya dapat menulis definisi batasan setelah kolom saat mendefinisikan tabel), 2 metode. Yang satu menggunakan nama batasan khusus, dan yang lainnya menggunakan nama default sistem.
lihat salinan biasa ke cetak papan klip?
membuat tabel t
(
angka tid(8) batasan NK_t1 bukan nol,
nama varchar2(10) bukan nol
)
membuat tabel t
(
angka tid(8) batasan NK_t1 bukan nol,
nama varchar2(10) bukan nol
)
lihat salinan biasa ke cetak papan klip?
SQL> pilih t.constraint_name, t.table_name, t.status, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DAPAT DITUNDA
--------------------------------------------------- ------ ----------------
NK_T1 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SYS_C003735 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SQL>
SQL> pilih t.constraint_name, t.table_name, t.status, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DAPAT DITUNDA
--------------------------------------------------- ------ ----------------
NK_T1 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SYS_C003735 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SQL>
2. Ubah tabel setelah dibuat, namun pastikan data dalam tabel tidak melanggar batasan.
lihat salinan biasa ke cetak papan klip?
SQL> ubah tabel t ubah tid bukan nol;
Tabel diubah
SQL> pilih t.constraint_name, t.table_name, t.status, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DAPAT DITUNDA
--------------------------------------------------- ------ ----------------
SYS_C003736 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SQL>
SQL> ubah tabel t ubah tid bukan nol;
Tabel diubah
SQL> pilih t.constraint_name, t.table_name, t.status, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DAPAT DITUNDA
--------------------------------------------------- ------ ----------------
SYS_C003736 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SQL>
periksa kendala
Metode pembuatan: Dapat ditentukan pada tingkat tabel dan tingkat kolom (dapat ditentukan setelah kolom atau setelah kolom ditentukan). Ada juga 2 cara definisi.
lihat salinan biasa ke cetak papan klip?
SQL> membuat tabel t
2 (
3 nomor tid (8) ,
4 nama varchar2(10),
5 batasan pemeriksaan CK_T1 ((tid bukan null) dan (tid > 0))
6)
7/
Tabel dibuat
SQL> ubah tabel t tambahkan batasan cek CK_T2 (nama bukan nol);
Tabel diubah
SQL> pilih t.constraint_name, t.table_name, t.status, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DAPAT DITUNDA
--------------------------------------------------- ------ ----------------
CK_T1 T DIAKTIFKAN TIDAK DAPAT DITUNDA
CK_T2 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SQL>
SQL> membuat tabel t
2 (
3 nomor tid (8) ,
4 nama varchar2(10),
5 batasan pemeriksaan CK_T1 ((tid bukan null) dan (tid > 0))
6)
7/
Tabel dibuat
SQL> ubah tabel t tambahkan batasan cek CK_T2 (nama bukan nol);
Tabel diubah
SQL> pilih t.constraint_name, t.table_name, t.status, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DAPAT DITUNDA
--------------------------------------------------- ------ ----------------
CK_T1 T DIAKTIFKAN TIDAK DAPAT DITUNDA
CK_T2 T DIAKTIFKAN TIDAK DAPAT DITUNDA
SQL>
Batasan CK_T1 memastikan bahwa kolom tid tidak boleh kosong dan lebih besar dari 0, dan CK_T2 memastikan bahwa inname tidak boleh kosong. Batasan pemeriksaan juga dapat berupa aturan antar kolom berbeda pada baris yang sama.
kendala unik
Metode pembuatan: Jika kolom unik hanya berisi satu kolom, kolom tersebut dapat ditentukan di tingkat kolom. Jika kolom unik berisi beberapa kolom, kolom tersebut hanya dapat ditentukan di tingkat tabel.
lihat salinan biasa ke cetak papan klip?
SQL> buat tabel t2
2 (
3 batasan nomor vid VK_T1 unik,
4 nama varchar2(10),
5 vsex varchar2(10),
6 batasan VK_T2 unik (vname,vsex)
7)
8/
Tabel dibuat
SQL> pilih t.constraint_name, t.table_name, t.status, t.validated, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DIVALIDASI DAPAT DITUNDA
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 DIAKTIFKAN DIVALIDASI TIDAK DAPAT DITUNDA
VK_T2 T2 DIAKTIFKAN DIVALIDASI TIDAK DAPAT DITUNDA
SQL>
SQL> buat tabel t2
2 (
3 batasan nomor vid VK_T1 unik,
4 nama varchar2(10),
5 vsex varchar2(10),
6 batasan VK_T2 unik (vname,vsex)
7)
8/
Tabel dibuat
SQL> pilih t.constraint_name, t.table_name, t.status, t.validated, t.deferrable dari user_constraints t;
STATUS CONSTRAINT_NAME TABLE_NAME DIVALIDASI DAPAT DITUNDA
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 DIAKTIFKAN DIVALIDASI TIDAK DAPAT DITUNDA
VK_T2 T2 DIAKTIFKAN DIVALIDASI TIDAK DAPAT DITUNDA
SQL>
Ketika batasan unik dibuat, indeks akan dihasilkan (bisa berupa indeks unik, jadi bisa juga berupa indeks non-unik, bergantung pada apakah tabel ditentukan saat membuat tabel untuk segera memeriksa batasan data saat data dimasukkan):
lihat salinan biasa ke cetak papan klip?
SQL> pilih t.index_name, t.table_name, t.uniqueness dari user_indexes t;
KEUNIKAN INDEX_NAME TABLE_NAME
---------- ---------- ----------
VK_T1 T2 UNIK
VK_T2 T2 UNIK
SQL> pilih t.index_name, t.table_name, t.uniqueness dari user_indexes t;
KEUNIKAN INDEX_NAME TABLE_NAME
---------- ---------- ----------
VK_T1 T2 UNIK
VK_T2 T2 UNIK
Karena terdapat indeks, Anda dapat menentukan lokasi penyimpanan indeks dan beberapa parameter penyimpanan saat membuat tabel.
lihat salinan biasa ke cetak papan klip?
SQL> buat tabel t2
2 (
3 batasan nomor vid VK_T1 unik,
4 nama varchar2(10),
5vsex varchar2(10),
6 batasan VK_T2 unik (vname,vsex) menggunakan indeks tablespace indx
7 penyimpanan (100 ribu awal, 100 ribu berikutnya, meningkat 0)
8 tidak masuk
9)
10/
Tabel dibuat
SQL> buat tabel t2
2 (
3 batasan nomor vid VK_T1 unik,
4 nama varchar2(10),
5 vsex varchar2(10),
6 batasan VK_T2 unik (vname,vsex) menggunakan indeks tablespace indx
7 penyimpanan (100 ribu awal, 100 ribu berikutnya, meningkat 0)
8 tidak masuk
9)
10/
Tabel dibuat
Ruang tabel tempat indeks yang dibatasi disimpan adalah ruang tabel indeks, ukuran blok awal adalah 100k, dan tidak ada log yang dihasilkan untuk operasi dml (tetapi log juga dibuat untuk alasan lain, tetapi jumlah log lebih sedikit daripada logging default)
batasan kunci utama kunci utama
Metode pembuatan: Kunci utama sebagian besar terdiri dari non-null dan keunikan. Sebuah tabel hanya dapat berisi satu kunci utama, namun kunci utama dapat berisi beberapa kolom.
lihat salinan biasa ke cetak papan klip?
SQL> buat tabel t2
2 (
3 batasan nomor vid VK_T1 unik,
4 nama varchar2(10),
5vsex varchar2(10),
6 batasan kunci utama VK_T2 (vname,vsex) menggunakan indeks tablespace indx
7 penyimpanan (100 ribu awal, 100 ribu berikutnya, meningkat 0)
8 tidak masuk
9)
10/
Tabel dibuat
SQL> buat tabel t2
2 (
3 batasan nomor vid VK_T1 unik,
4 nama varchar2(10),
5 vsex varchar2(10),
6 batasan kunci utama VK_T2 (vname,vsex) menggunakan indeks tablespace indx
7 penyimpanan (100 ribu awal, 100 ribu berikutnya, meningkat 0)
8 tidak masuk
9)
10/
Tabel dibuat
kunci asing kunci asing
Metode pembuatan: Tabel yang terlibat dalam kunci asing dapat memiliki dua atau satu tabel. Dalam kasus dua tabel, kunci yang direferensikan oleh bidang dalam tabel anak harus menjadi kunci utama dalam tabel yang lebih gemuk. Batasan dibuat di tabel anak, yang menunjukkan bahwa nilai di bidang dalam tabel harus ada di tabel induk atau berupa nilai NULL.
lihat salinan biasa ke cetak papan klip?
SQL> buat departemen tabel
2 (
3 melakukan nomor(8),
4 nama varchar2(20),
5 batasan kunci utama PK_DEPT (berhasil)
6)
7/
Tabel dibuat
SQL>
SQL> membuat tabel kosong
2 (
3 nomor Idul Fitri (8) kunci utama,
4 enam enamel varchar2(20),
5 melakukan nomor(8) /*departemen referensi(melakukan)*/,
6 nama varchar2(20),
7 kendala FK_EMP2 kunci asing(lakukan) departemen referensi(lakukan)
8)
9/
Tabel dibuat
SQL> buat departemen tabel
2 (
3 melakukan nomor(8),
4 nama varchar2(20),
5 batasan kunci utama PK_DEPT (berhasil)
6)
7/
Tabel dibuat
SQL>
SQL> membuat tabel kosong
2 (
3 nomor Idul Fitri (8) kunci utama,
4 enam enamel varchar2(20),
5 melakukan nomor(8) /*departemen referensi(melakukan)*/,
6 nama varchar2(20),
7 kendala FK_EMP2 kunci asing(lakukan) departemen referensi(lakukan)
8)
9/
Tabel dibuat
Karena kunci asing (foreign key) ditentukan oleh kunci referensi (reference key), maka akan ada batasan saat melakukan update, drop, delete dan operasi lainnya pada tabel fater. Secara khusus, hal ini ditentukan oleh status batasan kunci asing.
hapus tindakan, hapus kaskade, hapus set null
Hapus saat tindakan adalah pengaturan default. Jika Anda menghapus data di tabel fater, Oracle akan mengunci tabel kata dan kemudian memindai tabel (jika ada kolom kunci asing, pindai indeks) dan kemudian data tidak akan ada di kolom kunci asing di tabel anak. Hapus diperbolehkan.
delete cascade juga menghapus baris terkait di tabel kata.
hapus set null, data yang terkait dengan kolom kunci asing di tabel batang menjadi NULL.
lihat salinan biasa ke cetak papan klip?
membuat tabel emp
(
nomor Idul Fitri (8) kunci utama,
enam varchar2(20),
melakukan nomor(8) /*departemen referensi(melakukan)*/,
nama varchar2(20),
kendala FK_EMP2 kunci asing(did) referensi dept(did) pada penghapusan set null
)
membuat tabel emp
(
nomor Idul Fitri (8) kunci utama,
enam varchar2(20),
melakukan nomor(8) /*departemen referensi(melakukan)*/,
nama varchar2(20),
kendala FK_EMP2 kunci asing(did) referensi dept(did) pada penghapusan set null
)