Gunakan kekangan unik untuk menghalang rekod pendua
Dalam operasi pangkalan data, selalunya perlu memastikan keunikan gabungan lajur tertentu. Sebagai contoh, pertimbangkan jadual berikut:
<code>ID | Name | Active | PersonNumber</code>
Anda mungkin perlu menguatkuasakan kekangan unik untuk mengelakkan pendua berdasarkan gabungan PersonNumber dan Active = 1. Ini memastikan bahawa tiada dua baris mempunyai status PersonNumber dan Active yang sama.
Tambahkan kekangan unik pada jadual sedia ada
Untuk menambah kekangan unik pada jadual sedia ada, anda boleh menggunakan salah satu kaedah berikut:
1. ALTER JADUAL menggunakan kekangan unik
<code>ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
2. Cipta indeks unik
<code>CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
Gunakan pencetus untuk mengelakkan sisipan berulang
Jika anda ingin menghalang kemasukan berulang tanpa bergantung pada pengecualian, anda boleh menggunakan pencetus BUKANNYA. Pencetus ini memintas percubaan memasukkan dan hanya membenarkan baris disisipkan jika ia tidak melanggar kekangan unik:
<code class="language-sql">CREATE TRIGGER dbo.BlockDuplicatesYourTable ON dbo.YourTable INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON; IF NOT EXISTS ( SELECT 1 FROM inserted AS i INNER JOIN dbo.YourTable AS t ON i.column1 = t.column1 AND i.column2 = t.column2 ) BEGIN INSERT dbo.YourTable(column1, column2, ...) SELECT column1, column2, ... FROM inserted; END ELSE BEGIN PRINT '未执行任何操作。'; -- 更友好的提示信息 END END; GO</code>
Contoh: Menguatkuasakan keunikan pada PersonNumber dan Active
Contoh berikut menunjukkan cara menambah kekangan unik pada gabungan PersonNumber dan Active dalam jadual Person:
<code class="language-sql">USE tempdb; GO CREATE TABLE dbo.Person ( ID INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(32), Active BIT, PersonNumber INT ); GO ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active); GO</code>
Sebarang percubaan memasukkan yang melanggar kekangan unik kini akan gagal dengan mesej ralat, memastikan tiada rekod pendua dengan status PersonNumber dan Aktif yang sama. Pernyataan PRINT '未执行任何操作。'
menggantikan PRINT 'Did nothing.'
dalam teks asal, menjadikannya lebih mudah untuk difahami.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Rekod Pangkalan Data Pendua Menggunakan Kekangan dan Pencetus Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!