Sintaks
Berikut adalah sintaks pertanyaan 'Upsert' ON CONFLICT.
>> INSERT INTO table_name (column_list) VALUSE (value_list) ON CONFLICT tindakan sasaran;Lancarkan Shell Baris Perintah PostgreSQL
Untuk memulakan, lancarkan shell baris perintah PostgreSQL dari menu Aplikasi. Sambungkannya ke pelayan yang diperlukan. Masukkan nama pangkalan data yang ingin anda kerjakan. Untuk bekerja di port lain, taipkan nombor port dan nama pengguna yang ingin anda bekerjasama. Untuk meneruskan parameter lalai, tinggalkan spasi sebagaimana adanya dan tekan 'Enter' di setiap pilihan. Tambahkan kata laluan untuk nama pengguna yang dipilih, dan shell-command anda harus siap digunakan.
Contoh 1:
Sekarang, kita boleh memulakan dengan 'Upsert' dalam konflik. Katakan anda mempunyai jadual bertajuk 'orang' dalam pangkalan data yang dipilih dengan beberapa medan yang menunjukkan rekod orang yang berbeza. Catatan ini menunjukkan nama orang, usia mereka, dan bandar dan negara mereka. Jadual dipaparkan di bawah.
>> PILIH * DARI orang;
Penting untuk mengetahui bagaimana kesalahan atau konflik dapat timbul. Medan jadual 'id', yang juga merupakan kunci utama, mengandungi nilai dari 1 hingga 15. Apabila pengguna cuba memasukkan beberapa catatan pendua ke dalam jadual, konflik berlaku.
Mari kita cuba pernyataan INSERT berikut, memasukkan catatan ke dalam jadual 'orang'. Pertanyaan ini akan menyebabkan ralat kerana nilai '3' medan 'id' sudah ada dalam jadual.
>> INSERT INTO person (id, name, age, city, country) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan');
Contoh 2: Naik klausa dengan ON CONFLICT
Kami akan menggunakan klausa ON CONFLICT untuk mengelakkan pertanyaan INSERT yang menyebabkan ralat ini kerana memasukkan rekod pendua. Perintah ON CONFLICT hadir dengan dua frasa dengan penggunaan yang berbeza.
- LAKUKAN: Lakukan operasi untuk mengatasi konflik.
- TIDAK BUAT APA-APA: Elakkan konflik tanpa melakukan apa-apa.
Contoh 3: Ditambah dengan Klausa TIDAK ADA
Dalam contoh ini, kita akan melihat klausa DO NOTHING. Klausa ini menjelaskan bahawa tidak ada operasi yang akan dilakukan atas kesalahan atau konflik. Dengan kata lain, klausa ini hanya akan mengelakkan konflik atau kesalahan.
Oleh itu, marilah kita mencuba perintah INSERT yang sama seperti yang kita gunakan sebelumnya untuk menambahkan catatan pendua ke jadual 'orang', dengan beberapa perubahan ditambahkan. Kami telah menambahkan klausa ON CONFLICT, bersama dengan pernyataan TIDAK ADA dalam klausa ini. Klausa ON CONFLICT telah digunakan pada lajur 'id' yang unik. Ini bermaksud, apabila pengguna cuba memasukkan nilai pendua ke ruangan 'id', ia akan mengelakkan konflik dan tidak melakukan apa-apa. Seperti yang anda lihat dalam gambar di bawah, ia tidak akan memasukkan rekod baru ke dalam jadual, juga tidak akan mengemas kini rekod sebelumnya.
>> INSERT INTO person (id, name, age, city, country) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PADA KONFLIK (id) TIDAK ADA;
Mari kita periksa jadual 'orang' sekali lagi untuk kesahihan. Seperti yang anda lihat dalam gambar di bawah, tidak ada perubahan yang dibuat pada jadual.
>> PILIH * DARI orang;
Contoh 2: Ditambah dengan Klausa DO
Seterusnya, kita akan melihat klausa ON CONFLICT dan DO. Seperti namanya, klausa ___ akan melakukan tindakan atas kesalahan atau konflik ketika nilai pendua dimasukkan ke dalam tabel. Kami akan menggunakan arahan sisipan yang sama seperti yang kami gunakan sebelumnya untuk memasukkan catatan pendua dalam jadual 'orang', dengan sedikit perubahan. Kami telah menambahkan klausa ON CONFLICT dengan klausa DO di dalamnya. Apabila pengguna cuba memasukkan nilai yang tidak unik ke lajur 'id', ia akan melakukan tindakan untuk mengelakkan konflik. Kami telah menggunakan klausa UPDATE setelah klausa DO, yang menunjukkan kemas kini data dalam jadual 'orang'. Kata kunci SET digunakan untuk menetapkan nilai lajur 'nama' ke nilai baru, 'Habib,' menggunakan kata kunci yang DIKECUALIKAN di mana 'id' adalah '3' pada masa sekarang. Sekiranya anda menjalankan pertanyaan berikut, anda akan melihat bahawa pertanyaan telah dilakukan.
>> MASUKKAN KE DALAM orang (id, nama, umur, bandar, negara) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PADA KONFLIK (id) LAKUKAN SET nama = DILARANG.nama;
Rekod jadual 'orang' mesti diambil untuk melihat perubahan pada pertanyaan di atas. Sekiranya anda menjalankan pertanyaan berikut di shell baris perintah, anda akan melihat output selanjutnya.
>> PILIH * DARI orang;Seperti yang anda lihat dari output di bawah, nama orang tersebut telah dikemas kini menjadi 'Habib,' di mana 'id' adalah '3.'
Anda juga boleh mengemas kini rekod di lebih dari satu lajur dengan menggunakan kata kunci yang DIKECUALIKAN dalam klausa ON CONFLICT dari pertanyaan INSERT, seperti yang ditunjukkan di bawah.
>> MASUKKAN KE DALAM orang (id, nama, umur, bandar, negara) NILAI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PADA KONFLIK (id) LAKUKAN SET nama = DILARANG.nama, bandar = DIKECUALIKAN.bandar;
Perubahan ditunjukkan di bawah.
>> PILIH * DARI orang;
Kesimpulannya
Artikel ini menunjukkan kepada anda cara menggunakan PostgreSQL 'Upsert' dengan klausa ON CONFLICT, bersama dengan tindakan DO dan DO NOTHING. Setelah membaca artikel ini, kami harap anda lebih mudah memahami cara menggunakan PostgreSQL 'Upsert.'