Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pertanyaan Teratas tentang Kunci Utama di Oracle dengan Contoh

Kita akan mulai dengan pengenalan kunci utama di oracle dan kemudian kita akan menyelami berbagai pertanyaan tentangnya.

Pengantar Kunci Utama

Kunci utama adalah kolom atau kumpulan kolom dalam tabel yang secara unik mengidentifikasi baris dalam tabel.

Properti Kunci utama

  1. Anda tidak boleh memiliki nilai duplikat di dalamnya. yaitu harus unik dalam tabel
  2. Tidak boleh null atau berisi string kosong
  3. Seharusnya tidak diubah dari waktu ke waktu
  4. Kita hanya dapat memiliki satu kunci utama dalam tabel

Rekomendasi

  1. Disarankan untuk memiliki nilai numerik sebagai kunci utama karena lebih cepat
  2. Semua tabel harus memiliki kunci utama

Cara Menambahkan kunci utama di oracle

Kunci utama dapat ditambahkan pada pembuatan tabel atau dapat dibuat setelah pembuatan tabel.
Mari kita lihat pembuatan tabel terlebih dahulu

Kunci Utama pada Pembuatan Tabel

Itu dapat didefinisikan pada tingkat kolom atau tingkat tabel. Kunci Primer Gabungan didefinisikan hanya pada tingkat tabel. Saat oracle membuat kunci utama, oracle membuat indeks unik pada kolom tersebut dalam tabel untuk menerapkan batasan kunci utama.

Mari kita periksa dulu level Kolom

Column Level
 SQL> CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER PRIMARY KEY,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date
   2  );  
 Table created.
 SQL> desc DEPT_MASTER
  Name                                      Null?    Type
 
  DEPT_NR                                   NOT NULL NUMBER
  DEPT_NAME                                 NOT NULL VARCHAR2(100)
  DEPT_STATUS                               NOT NULL NUMBER(1)
  CREATED_AT                                         DATE
 
SQL>  select index_name from dba_indexes where table_name='DEPT_MASTER';
INDEX_NAME
**********
 SYS_C0013850522

SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONSTRAINT_TYPE
 
 SYS_C00478605                             C
 SYS_C00478606                             C
 SYS_C00478607        SYS_C00478607        P

Sekarang mari kita lihat level Tabel

Table Level
SQL> CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date,
 PRIMARY KEY ("DEPT_NR")
    );   2    3    4    5    6    7
 Table created.
 
SQL>  select index_name from dba_indexes where table_name='DEPT_MASTER';
 INDEX_NAME
 SYS_C0013850525

SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONSTRAINT_TYPE
 
 SYS_C00478605                             C
 SYS_C00478606                             C
 SYS_C00478607        SYS_C00478607        P

Kami dapat memberikan nama kustom dari batasan kunci utama juga menggunakan klausa add constraint seperti yang ditunjukkan di bawah ini

SQL> CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date,
 CONSTRAINT PK_DEPT_NR PRIMARY KEY ("DEPT_NR") ); 
 Table created.

 SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONSTRAINT_TYPE
 
 SYS_C00478609                             C
 SYS_C00478608                             C
 PK_DEPT_NR           PK_DEPT_NR           P

Tabel dengan Primer dapat direpresentasikan sebagai Diagram

Ubah Tabel Tambahkan Kunci Utama

Mari kita lihat cara menambahkan Primer setelah pembuatan tabel

CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date
     );  

 SQL> alter table DEPT_MASTER add primary  key ( dept_nr);
 Table altered.

 SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';

 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C
 SYS_C00485780        SYS_C00485780        P

Kami juga dapat memberikan nama khusus sambil menambahkan kunci utama

SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr);
 Table altered.
 
SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C
 DEPT_MASTER_ID       DEPT_MASTER_ID       P

cara membuat kunci utama komposit di oracle

Sekarang mari kita lihat cara menambahkan kunci utama untuk kunci komposit

CREATE TABLE CUSTOMER(
    CUSTOMER_ID   NUMBER(6,0),  
    NAME VARCHAR (20)     NOT NULL,
    AGE  NUMBER(6,0)    NOT NULL,
    ADDRESS   VARCHAR2(25), 
    SALARY   NUMBER(6,0),     
    PRIMARY KEY (CUSTOMER_ID, NAME)
 );
 
 SQL> col CONSTRAINT_NAME  format a20
 SQL>  col INDEX_NAME format a20
 SQL> col CONSTRAINT_TYPE format a5
 SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='CUSTOMER'; 
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485772                             C
 SYS_C00485773                             C
 SYS_C00485774        SYS_C00485774        P

Kami dapat memberikan nama khusus untuk batasan kunci utama pada kunci Komposit juga

SQL>CREATE TABLE CUSTOMER(
    CUSTOMER_ID   NUMBER(6,0),
    NAME VARCHAR (20)     NOT NULL,
    AGE  NUMBER(6,0)    NOT NULL,
    ADDRESS   VARCHAR2(25), SQL>
    SALARY   NUMBER(6,0),
  CONSTRAINT PK_CUSTOMER  PRIMARY KEY (CUSTOMER_ID, NAME)
 );
 Table created.
 
SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='CUSTOMER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485776                             C
 SYS_C00485775                             C
 PK_CUSTOMER          PK_CUSTOMER          P

Gabungan Primer dapat direpresentasikan sebagai

cara melepaskan kunci utama di oracle

Kita dapat menjatuhkan kunci utama menggunakan perintah di bawah ini. Kita dapat menggunakan drop primary key atau drop constraint

SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C
 DEPT_MASTER_ID       DEPT_MASTER_ID       P
 
SQL> alter table DEPT_MASTER  drop  primary  key;
 Table altered.

SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C

SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr);
 Table altered.

SQL>  alter table DEPT_MASTER  drop constraint DEPT_MASTER_ID;
 Table altered.

SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C

Cara Mengaktifkan/Menonaktifkan batasan Kunci Utama

SQL> alter table DEPT_MASTER enable  primary key;  
Table altered.   

SQL>  alter table DEPT_MASTER  disable primary key;  
Table altered. 

SQL> alter table DEPT_MASTER  disable constraint DEPT_MASTER_ID;  Table altered. 

SQL> alter table DEPT_MASTER enable constraint DEPT_MASTER_ID; 
 Table altered

Cara Menambahkan Kunci Utama menggunakan Indeks

Ketika oracle membuat kunci utama, itu membuat indeks unik pada kolom itu di tabel untuk menegakkan batasan kunci utama. Tetapi jika tabel memiliki indeks sebelum penambahan kunci Primer, Oracle dapat menggunakan indeks itu untuk batasan kunci utama juga. Oracle dapat menerapkan batasan kunci utama pada indeks unik, non-unik, dan komposit. Oracle akan menggunakan indeks tergantung pada tabel indeks yang sudah dimiliki. Kami juga dapat menggunakan menggunakan klausa indeks pada waktu pembuatan kunci utama juga jika kami ingin menerapkan batasan menggunakan indeks tertentu

SQL> create index DEPT_MASTER_IDX on DEPT_MASTER(dept_nr);
 Index created.

 SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr) using index DEPT_MASTER_IDX;
 Table altered.

 SQL> col CONSTRAINT_NAME  format a20
 SQL> col INDEX_NAME format a20
 SQL> col CONSTRAINT_TYPE format a5
 SQL> /
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 DEPT_MASTER_ID       DEPT_MASTER_IDX      P
 SYS_C00485779                             C
 SYS_C00485778                             C

Bahkan jika kita tidak menggunakan menggunakan indeks dalam pernyataan sebelumnya, oracle akan tetap memiliki indeks non-unik yang sama untuk menerapkan batasan kunci utama

SQL> create index DEPT_MASTER_IDX on DEPT_MASTER(dept_nr);
 Index created.
 
SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr);
 Table altered.
 
SQL> col CONSTRAINT_NAME  format a20
 SQL> col INDEX_NAME format a20
 SQL> col CONSTRAINT_TYPE format a5
 SQL> /
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 DEPT_MASTER_ID       DEPT_MASTER_IDX      P
 SYS_C00485779                             C
 SYS_C00485778      

cara memodifikasi kunci utama di oracle

Kita tidak bisa begitu saja mengubah nilai kunci Primer. kita perlu membuang kunci lama dan membuat kunci utama baru. Jika kita memiliki batasan kunci asing yang merujuk itu. maka kita perlu melepaskannya terlebih dahulu dan melepaskan kunci utama dan membuat lagi kunci utama baru

cara menaikkan kunci utama secara otomatis di oracle

Dengan 12c, kami memiliki dua cara mudah untuk menerapkan peningkatan otomatis untuk kunci utama

Kolom Identitas
Dalam Oracle Database 12c, Kita dapat mendefinisikan kolom Tabel dengan kata kunci SQL IDENTITY yang merupakan kata kunci SQL American National Standards Institute (ANSI). Yang bertambah secara otomatis pada saat penyisipan (seperti di MySQL).

Example:
create table test
(
id number generated as identity PRIMARY KEY,
name varchar2(100),
email varchar2(100),
password varchar2(100)firstname varchar2(100)lastname varchar2(100)
);

Urutan sebagai Nilai Default
Dengan Oracle Database 12c, kita dapat langsung menetapkan sequence nextval sebagai nilai default untuk sebuah kolom, Jadi Anda tidak perlu lagi membuat trigger untuk mengisi kolom dengan nilai urutan berikutnya, Anda hanya perlu mendeklarasikannya dengan definisi tabel. Ini adalah semacam fitur penambahan otomatis untuk kolom di Oracle seperti MySQL

Example:
create sequence tech_test_seq start with 1 increment by 1 nocycle;
create table test
(
id number default tech_test_seq.nextval primary key
name varchar(30)
);

cara mengganti nama kunci utama di oracle

Kita dapat dengan mudah mengganti nama batasan kunci utama menggunakan tabel ubah ubah nama sql. Ini tidak memengaruhi pemrosesan dan kunci asing

CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date
     );
alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr);
Table altered.

select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT_MASTER' and constraint_type = 'P';
CONSTRAINT_NAME
-------------
DEPT_MASTER_ID

ALTER TABLE DEPT_MASTER RENAME CONSTRAINT DEPT_MASTER_ID TO DEPT_MASTER_ID_PK;

select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT_MASTER' and constraint_type = 'P';
CONSTRAINT_NAME
-------------
DEPT_MASTER_ID_PK


I hope you like the content on  primary key and it clear all doubts about the Primary Key concept. Please do provide the feedback and what else can be added in this post 

Juga Dibaca
Check Constraint di Oracle :Oracle Check Constraint digunakan untuk menegakkan aturan integritas berdasarkan ekspresi logika, seperti perbandingan. Kondisi pemeriksaan harus mengembalikan true atau false
Not Null constraint di Oracle:
fungsi NVL2 di Oracle:Pelajari cara menggunakan fungsi NVL2 di Oracle dengan contoh
ubah tabel, ubah kolom, oracle
https://en.wikipedia.org/wiki/Primary_key

Kursus yang Direkomendasikan

Berikut adalah Kursus Udemy yang bagus untuk Oracle SQL
Oracle-Sql-Step-by-step :Kursus ini mencakup sql dasar, bergabung, Membuat Tabel dan memodifikasi strukturnya, Membuat Tampilan, Union, Union -semua dan banyak hal lainnya . Kursus yang bagus dan kursus yang harus dimiliki untuk pemula SQL
Kursus Sertifikasi Oracle SQL Lengkap :Ini adalah kursus yang bagus untuk siapa saja yang ingin siap kerja untuk keterampilan pengembang SQL. Kursus yang dijelaskan dengan baik
Pengembang Oracle SQL:Esensi, Kiat, dan Trik :Alat pengembang Oracle Sql sedang digunakan oleh banyak pengembang. Kursus ini memberi kita trik dan pelajaran tentang cara menggunakannya secara efektif dan menjadi pengembang sql yang produktif
Oracle SQL Performance Tuning Masterclass 2020 :Penyetelan kinerja adalah salah satu keterampilan penting dan paling dicari. Ini adalah kursus yang bagus untuk mempelajarinya dan mulai melakukan penyetelan kinerja sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OracleDataSource vs. Oracle UCP PoolDataSource

  2. Cara menanyakan kolom CLOB di Oracle

  3. Bagaimana cara menghapus duplikat dari daftar yang dipisahkan ruang oleh Oracle regexp_replace?

  4. Statistik Dinamis Adaptif Membunuh Performa di 12.1.0.2 RAC

  5. Driver Oracle alternatif untuk .net