Verwenden Sie eindeutige Einschränkungen, um doppelte Datensätze zu verhindern
Bei Datenbankoperationen ist es oft notwendig, die Eindeutigkeit einer bestimmten Spaltenkombination sicherzustellen. Betrachten Sie beispielsweise die folgende Tabelle:
<code>ID | Name | Active | PersonNumber</code>
Möglicherweise müssen Sie eine eindeutige Einschränkung erzwingen, um Duplikate basierend auf der Kombination von PersonNumber und Active = 1 zu verhindern. Dadurch wird sichergestellt, dass keine zwei Zeilen dieselbe PersonNumber und denselben aktiven Status haben.
Eindeutige Einschränkung zur vorhandenen Tabelle hinzufügen
Um einer vorhandenen Tabelle eine eindeutige Einschränkung hinzuzufügen, können Sie eine der folgenden Methoden verwenden:
1. ALTER TABLE mit eindeutigen Einschränkungen
<code>ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
2. Erstellen Sie einen eindeutigen Index
<code>CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
Verwenden Sie Auslöser, um wiederholte Einfügungen zu verhindern
Wenn Sie wiederholte Einfügungen verhindern möchten, ohne auf Ausnahmen angewiesen zu sein, können Sie den INSTEAD OF-Trigger verwenden. Dieser Trigger fängt Einfügeversuche ab und lässt das Einfügen von Zeilen nur zu, wenn sie nicht gegen die Eindeutigkeitsbeschränkung verstoßen:
<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>
Beispiel: Erzwingen der Eindeutigkeit von PersonNumber und Active
Das folgende Beispiel zeigt, wie man eine eindeutige Einschränkung für die Kombination von PersonNumber und Active in der Personentabelle hinzufügt:
<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>
Jeder Einfügeversuch, der gegen die Eindeutigkeitsbeschränkung verstößt, schlägt jetzt mit einer Fehlermeldung fehl. Dadurch wird sichergestellt, dass keine doppelten Datensätze mit derselben PersonNumber und demselben Aktivstatus vorhanden sind. Die PRINT '未执行任何操作。'
-Anweisung ersetzt die PRINT 'Did nothing.'
im Originaltext und erleichtert so das Verständnis.
Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Datenbankdatensätze verhindern, indem ich eindeutige Einschränkungen und Auslöser anhand von eindeutigen Einschränkungen und Auslöser verhindern kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!