PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apa Nama Batasan Default di PostgreSQL?

Masalah:

Anda ingin mengetahui nama default batasan dalam tabel di PostgreSQL.

Contoh:

Dalam database kami, kami membuat dua tabel, country dan student , dengan batasan berikut:PRIMARY KEY (kolom id di tabel country dan student ), FOREIGN KEY (kolom country_id dalam tabel student ), DEFAULT (kolom name dalam tabel student ), UNIQUE (kolom name dalam tabel country dan kolom personal_number dalam tabel student ), dan CHECK (kolom age dalam tabel student ).

Solusi:

CREATE TABLE country (
id int NOT NULL primary key,
name varchar(100) UNIQUE
);

CREATE TABLE student (
id int NOT NULL primary key,
name varchar(100) NOT NULL DEFAULT 'unknown',
personal_number varchar(100) UNIQUE,
age int CHECK(age>15),
country_id int,
FOREIGN KEY(country_id) references country(id)
);

Mari kita tampilkan bagaimana PostgreSQL menamai batasan tabel ini secara default. Gunakan kueri ini untuk melihatnya:

SELECT conname, contype
FROM pg_catalog.pg_constraint;

Ini hasilnya:

nama samaran konteks
country_pkey p
kunci_nama_negara u
pemeriksaan_usia_siswa c
mahasiswa_pkey p
kunci_nomor_pribadi_siswa u
siswa_negara_id_fkey f

Diskusi:

Saat kami membuat tabel kami, kami menetapkan batasan untuk beberapa kolom. Namun, kami tidak menentukan nama untuk batasan ini, sehingga diberi nama secara default di PostgreSQL. Bagaimana nama default untuk batasan dihasilkan?

Di PostgreSQL, tipe batasan default adalah p , f , u , dan c .

PRIMARY KEY diberi nama secara default dengan nama tabel, garis bawah (‘_ ’), dan ‘pkey '. Pada tabel hasil kami di atas, Anda dapat melihat dua PRIMARY KEY nama (ketik ‘p ’) – satu dengan nama country_pkey di country tabel dan lainnya dengan nama student_pkey di student tabel.

FOREIGN KEY ditunjukkan oleh jenis kendala 'f '. Namanya dihasilkan oleh nama tabel saat ini, garis bawah (‘_ ’), nama kolom, garis bawah lainnya (‘_ ’), dan ‘fkey '. Dalam contoh kita, nama batasan kunci asing adalah student_country_id_fkey , karena kolom country_id dalam tabel student adalah kunci asing.

Nama default untuk CHECK batasannya mirip dengan kunci asing, hanya saja batasannya bertipe ‘c '. Dalam contoh kita, kolom age dalam tabel student memiliki batasan ini, jadi nama batasan default adalah student_age_check .

Nama default untuk UNIQUE kendala (ketik 'u ’) adalah nama tabel, garis bawah (‘_ ’), nama kolom, garis bawah lainnya (‘_ ’), dan ‘key '. Dalam contoh kita, tabel student memiliki UNIQUE batasan bernama student_personal_number_key . Untuk beberapa kolom dalam batasan, namanya mengikuti konvensi yang sama tetapi berisi nama semua kolom dalam definisi batasan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan penurunan PostgreSQL dengan nama yang tidak dikenal

  2. Kelola Pengumpulan Koneksi di aplikasi web multi-penyewa dengan Spring, Hibernate, dan C3P0

  3. Pembuatan data dan kualitas perangkat keras

  4. Permata Ruby 'pg' menautkan ke salinan libpq.5.dylib yang salah (di OSX)

  5. pgAdmin III Mengapa hasil kueri dipersingkat?