7. Tulis pernyataan SQL untuk menambahkan kunci utama untuk kombinasi kolom location_id dan country_id
Berikut adalah struktur lokasi tabel
postgres=# \d locations Column | Type | Modifiers ----------------+-----------------------+----------- location_id | numeric[4,0] | street_address | character varying[40] | postal_code | character varying[12] | city | character varying[30] | state_province | character varying[25] | country_id | character varying[2] |
Sekarang jalankan pernyataan berikut
Contoh Solusi
Kode
ALTER TABLE locations
ADD PRIMARY KEY[location_id,country_id];
_Keluaran
Sekarang lihat struktur lokasi tabel setelah diubah
postgres=# \d locations
Column | Type | Modifiers
----------------+-----------------------+-----------
location_id | numeric[4,0] | not null
street_address | character varying[40] |
postal_code | character varying[12] |
city | character varying[30] |
state_province | character varying[25] |
country_id | character varying[2] | not null
Indexes:
"locations_pkey" PRIMARY KEY, btree [location_id, country_id]
Punya cara lain untuk menyelesaikan solusi ini?
Sebelumnya. Tulis pernyataan SQL untuk menambahkan kunci utama ke kolom location_id di tabel lokasi
Lanjut. Tulis pernyataan SQL untuk menghapus primer yang ada dari lokasi tabel pada kombinasi kolom location_id dan country_id
Berapa tingkat kesulitan latihan ini?
Mudah Sedang KerasIkuti kami di Facebook dan Twitter untuk pembaruan terbaru.
- Tren Mingguan
- Latihan Pemrograman Dasar Java
- Subkueri SQL
- Latihan Database Adventureworks
- Latihan Dasar C# Sharp
- SQL COUNT[] dengan perbedaan
- Latihan String JavaScript
- Validasi Formulir JavaScript HTML
- Latihan Pengumpulan Java
- fungsi SQL COUNT[]
- Gabung Dalam SQL
- Latihan fungsi JavaScript
- Tutorial Python
- Latihan Array Python
- Gabung Silang SQL
- Latihan C# Sharp Array
Saya mencoba melempar beberapa SQL yang tidak valid ke PostgreSQL dan menemukan reaksinya
membingungkan
tes $ psql
psql [8. 4beta2]
Ketik "bantuan" untuk bantuan
test=# BUAT TABEL t1 [
tes[# serial id BUKAN NULL,
test[# nama teks NOT NULL,
uji[# KUNCI UTAMA [id]
tes[# ];
BUAT TABEL
test=# BUAT TABEL t2 [
test[# id int BUKAN REFERENSI NULL t1,
tes[# bahasa char[3] NULL,
tes[# txt teks BUKAN NULL,
tes[# KUNCI UTAMA [id, bahasa]
tes[# ];
BUAT TABEL
Inilah keluhan pertama saya. PostgreSQL menerima ini secara diam-diam alih-alih mengeluh
test=# INSERT INTO t1 [id, name] NILAI [1, 'teks 1'];
MASUKKAN 0 1
test=# INSERT INTO t2 [id, language, txt] NILAI [2, NULL, 'teks 1 tanpa bahasa'];
KESALAHAN. nilai null di kolom "bahasa" melanggar batasan not-null
Dan inilah keluhan kedua saya. meskipun PostgreSQL menolak dengan benar
INSERT itu hanya mengabaikan spesifikasi NULL saya
Kunci utama digunakan untuk mengidentifikasi baris secara unik dalam sebuah tabel. Itu bisa berupa satu kolom atau sekelompok kolom [komposit]. Kunci utama adalah salah satu batasan yang kami tentukan untuk membatasi input dan validasi data
Kunci utama adalah kombinasi dari
- Batasan BUKAN NULL
- Kendala UNIK
Menentukan kunci utama
Seperti yang kita lihat pada batasan di bagian sebelumnya, Dalam pernyataan CREATE TABLE
, Anda dapat menentukan kunci utama untuk kolom dengan menggunakan kata kunci PRIMARY KEY
terhadap kolom unik yang diperlukan atau kombinasi kolom
CopyDi sini kolom
id
_ ditandai sebagai kunci utamaMenambahkan kunci utama nanti
Jika Anda lupa menandai kolom apa pun sebagai kunci utama selama pembuatan tabel, kami juga dapat menambahkan kunci utama nanti dengan mengubah tabel menggunakan perintah berikut
Kunci utama komposit hanyalah kunci utama yang didasarkan pada dua atau lebih kolom. Ini berarti kunci asing terkait harus didasarkan pada jumlah kolom yang sama, agar cocok
Selain itu, karena kunci utama membuat batasan
INDEX
danUNIQUE
, memiliki kunci primer gabungan akan membuat indeks gabungan dan batasan unik gabunganJika Anda memiliki kunci primer 2 kolom, kolom terpisah tidak boleh unik. Demikian pula, tidak ada indeks untuk kedua kolom
Namun, Anda tidak akan dapat memiliki dua baris di mana kedua kumpulan kolom memiliki nilai yang sama. Juga, indeks akan dibuat untuk pasangan kolom
Katakanlah Anda memiliki tabel ini
Dan kemudian kita isi dengan data ini
account_numbersort_codeuser_name81795745090566Rolf Smith19876543232344Bob Smith19876543151617Anne Pun19876543909900Charlie Robert12345678005344Susan WilliamsIni tidak apa-apa, karena meskipun Bob, Anne, dan Charlie memiliki nomor rekening yang sama, kode sortir mereka berbeda [ini adalah nomor yang digunakan di perbankan Inggris untuk membedakan antara cabang bank yang memiliki rekening tersebut]
Namun ini tidak akan baik-baik saja
account_numbersort_codeuser_name19876543909900Anne Pun19876543909900Charlie RobertSekarang akunnya sama, dan ini tidak diizinkan di PostgreSQL
Anda secara alami dapat menambahkan lebih banyak kolom ke kunci utama komposit, untuk memasukkan nama misalnya. Tapi karena nama cukup unik, itu mungkin bukan pendekatan yang baik dalam situasi ini
Kunci asing komposit
Untuk mendefinisikan kunci asing komposit kita dapat melakukan hal serupa
Perhatikan bahwa karena kolom tabel referensi dan referensi memiliki nama yang sama [
account_number
dansort_code
], yang dapat disingkat menjadi iniPintasan itu juga dapat digunakan saat melakukan inline
REFERENCES
, sebagaimana dirinci dalam dokumentasi resmiBagaimana Anda menambahkan kunci primer komposit?
Kunci Utama Komposit .Langkah 1. Membuat Basis Data. .Pertanyaan. Buat sampel basis dataLangkah 2. Gunakan Basis Data. .Pertanyaan. Gunakan SampelLangkah 3. Pembuatan Tabel dengan komposit primer. .Pertanyaan. .Langkah 4. Setelah pembuatan tabel, kita dapat membenarkan tampilan dan metadata tabel dengan bantuan kueri di bawah ini. .PertanyaanBisakah kita membuat kunci primer komposit?
Dengan kata lain, kunci kombinasi juga dapat digambarkan sebagai kunci utama yang dibuat dengan menggunakan beberapa kolom. Namun, tipe data dari kolom yang berbeda dapat berbeda satu sama lain. Anda juga dapat menggabungkan semua kunci asing untuk membuat kunci komposit di SQL .