4 Solusi saat Batasan Unik Mencegah Anda Memasukkan Record Baru ke dalam SQL Server

Bagikan sekarang:

Jika Anda gagal memasukkan record baru ke dalam tabel karena kendala unik, jangan lewatkan untuk membaca artikel ini. Ini akan membantu Anda mengatasi masalah ini.

Pada artikel ini, kami akan memperkenalkan 4 metode untuk menyelesaikan masalah saat Anda gagal memasukkan rekaman baru karena melanggar batasan unik tabel di SQL Server.

Kasus Nyata:

Sekarang mari kita lihat kasus nyata. Kami memiliki database bernama "Produk" dan ada tabel bernama "DataNumenProduk ”dalam database. Ada dua field dalam tabel, yaitu “ProductId” dan “ProductName”, dengan tipe data masing-masing “int” dan “varchar”. Dan "ProductId" adalah kunci utama dengan batasan unik.

Saat ini terdapat beberapa record dalam tabel, seperti di bawah ini:Rekaman di Tabel "DataNumenProduk"

Gambar 1 Rekaman di Tabel “DataNumenProduk"

Dengan asumsi ada dua DBA untuk database, yaitu Jim dan Tom. Suatu hari, Jim menghapus catatan pertama dalam tabel, seperti di bawah ini:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Di hari kedua, Tom memasukkan record baru ke dalam tabel, yang memiliki kunci utama yang sama dengan record yang dihapus, seperti di bawah ini:

INSERT INTO DataNumenProduct
VALUES(1,'DataNumen OutLook Repair');

Jadi tabel kami memiliki catatan berikut, seperti di bawah ini:

Rekaman yang Diperbarui di Tabel “DataNumenProduk "

Gambar 2 Rekaman yang Diperbarui pada Tabel “DataNumenProduk "

Sekarang jika Jim ingin memulihkan catatan yang dihapus kembali ke tabel, itu akan melanggar batasan unik dari kunci utama "ProductId". Dalam kasus seperti itu, kita dapat menggunakan salah satu solusi di bawah ini untuk menyelesaikan masalah.

Solusi 1: Ubah Kunci Primer Rekaman Baru untuk Mencegah Konflik

Kita dapat memodifikasi kunci utama dari record untuk disisipkan ke nilai baru yang berbeda dari semua record yang ada di tabel. Ambil kasus di atas sebagai contoh, untuk record yang akan dimasukkan, kita dapat memodifikasi nilai primary key dari 1 menjadi 5. Kemudian kita dapat mengembalikan record yang baru dihasilkan kembali ke tabel, seperti di bawah ini:

INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');

Di bawah ini adalah catatan akhir dalam tabel:Rekor Akhir di Tabel “DataNumen Produk "

Gambar 3 Catatan Akhir di Tabel “DataNumen Produk "

Solusi 2: Ubah Kunci Utama dari Catatan yang Ada untuk Mencegah Konflik

  1. Pertama, kita perlu memperbarui nilai kunci utama dari catatan yang ada yang dapat menyebabkan konflik, seperti di bawah ini:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Di bawah ini adalah catatan yang diperbarui dalam tabel:

Rekaman yang Diperbarui di Tabel “DataNumen Produk "

Gambar 4 Rekaman yang Diperbarui pada Tabel “DataNumen Produk "

  1. Kemudian kita bisa mengembalikan record yang terhapus kembali ke tabel, seperti di bawah ini:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Sekarang mari kita lihat versi finalnya, seperti di bawah ini:

Catatan Akhir di Tabel “DataNumen Produk "

Gambar 5 Catatan Akhir di Tabel “DataNumen Produk "

Solusi alternatif 3: Nonaktifkan Batasan Unik untuk Sementara melalui SQL

  1. Untuk mengatasi masalah ini, kita dapat menghapus sementara batasan kunci utama “pk” pada tabel, seperti di bawah ini:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Kemudian kita dapat menambahkan kembali catatan yang dihapus ke tabel, seperti di bawah ini:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Sekarang mari kita lihat record di tabel:

Rekaman yang Diperbarui di Tabel “DataNumen Produk "

Gambar 6 Rekaman yang Diperbarui pada Tabel “DataNumen Produk "

  1. Kemudian karena dua catatan memiliki nilai kunci utama yang sama, kita perlu mengubah salah satunya untuk mencegah konflik, seperti di bawah ini:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Akhirnya, kami menambahkan kembali batasan kunci utama "pk" ke tabel, seperti di bawah ini:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Sekarang ada beberapa record di tabel, seperti di bawah ini:

Konten yang Diperbarui di Tabel “DataNumen Produk "

Gambar 7 Konten yang Diperbarui pada Tabel “DataNumen Produk "

Solusi alternatif 4: Nonaktifkan Batasan Unik untuk Sementara melalui SQL Server Studio Manajemen:

  1. Pertama-tama, kami menghapus batasan kunci utama "pk" dalam tabel melalui GUI, seperti di bawah ini:

Hapus Batasan Kunci Utama “pk” melalui GUI

Gambar 8 Hapus Batasan Kunci Utama “pk” melalui GUI

  1. Kemudian kami memasukkan catatan yang dihapus dalam kasus nyata ke dalam tabel, seperti di bawah ini.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Sekarang ada beberapa record di tabel, seperti di bawah ini:

Konten yang Diperbarui di Tabel "DataNumen Produk "

Gambar 9 Konten yang Diperbarui pada Tabel “DataNumen Produk "

  1. Kemudian kami mengubah nilai kunci utama dari catatan yang ada dalam tabel, seperti di bawah ini:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Akhirnya, kami menambahkan kembali batasan kunci utama "pk" ke tabel melalui GUI, seperti di bawah ini:Tambahkan Kembali Batasan Kunci Utama “pk” melalui GUI

Gambar 8 Menambahkan Kembali Batasan Kunci Utama “pk” melalui GUI

Memecahkan SQL Server Korupsi Database

Selain kendala Unik, SQL Server korupsi juga merupakan masalah yang sangat umum yang mengganggu DBA. Biasanya kita bisa menggunakan SQL Server perintah bawaan untuk mengatasi kerusakan. Namun, jika tidak berfungsi, kami dapat menggunakan pihak ketiga SQL Server alat pemulihan data.

Pengantar Penulis:

Jim Hu adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk Perbaikan akses ke dbf memperbaiki produk perangkat lunak. Untuk informasi lebih lanjut kunjungi www.datanumen.com

Bagikan sekarang:

Komentar ditutup.