SQL Server UNIQUE Constraint

Samenvatting: In deze handleiding leert u hoe u de SQL Server UNIQUE constraint kunt gebruiken om de uniciteit van gegevens in een kolom of een groep kolommen te garanderen.

Inleiding tot SQL Server UNIQUE constraint

SQL Server UNIQUE constraints stellen u in staat ervoor te zorgen dat de gegevens die zijn opgeslagen in een kolom, of een groep kolommen, uniek zijn onder de rijen in een tabel.

Het volgende statement creëert een tabel waarvan de gegevens in de kolom email uniek zijn tussen de rijen in de tabel hr.persons:

CREATE SCHEMA hr;GOCREATE TABLE hr.persons( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE);
Code language: SQL (Structured Query Language) (sql)

In deze syntaxis definieert u de UNIQUE constraint als een kolom constraint. U kunt de UNIQUE constraint ook als een tabel constraint definiëren, zoals dit:

CREATE TABLE hr.persons( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), UNIQUE(email));
Code language: SQL (Structured Query Language) (sql)

achter de schermen maakt SQL Server automatisch een UNIQUE index om de uniciteit af te dwingen van gegevens die zijn opgeslagen in de kolommen die deelnemen aan de UNIQUE constraint. Daarom, als u probeert een dubbele rij in te voegen, weigert SQL Server de wijziging en geeft een foutmelding waarin staat dat de UNIQUE beperking is geschonden.

Het volgende statement voegt een nieuwe rij in de tabel hr.persons in:

INSERT INTO hr.persons(first_name, last_name, email)VALUES('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

Het statement werkt zoals verwacht. Het volgende statement mislukt echter vanwege de dubbele e-mail:

INSERT INTO hr.persons(first_name, last_name, email)VALUES('Jane','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

SQL Server geeft de volgende foutmelding:

Violation of UNIQUE KEY constraint 'UQ__persons__AB6E616417240E4E'. Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is ([email protected]).
Code language: Shell Session (shell)

Als u geen aparte naam opgeeft voor de UNIQUE constraint, zal SQL Server er automatisch een naam voor genereren. In dit voorbeeld is de naam van de constraint UQ__persons__AB6E616417240E4E, wat niet helemaal leesbaar is.

Om een bepaalde naam aan een UNIQUE constraint toe te kennen, gebruikt u het CONSTRAINT sleutelwoord als volgt:

CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), CONSTRAINT unique_email UNIQUE(email));
Code language: SQL (Structured Query Language) (sql)

De volgende zijn de voordelen van het toewijzen van een UNIQUE constraint een specifieke naam:

  • Het is eenvoudiger om de foutmelding te classificeren.
  • U kunt naar de constraint-naam verwijzen wanneer u deze wilt wijzigen.

UNIQUE constraint vs. PRIMARY KEY constraint

Hoewel zowel UNIQUE als PRIMARY KEY constraints de uniciteit van gegevens afdwingen, moet u de UNIQUE constraint gebruiken in plaats van de PRIMARY KEY constraint wanneer u de uniciteit van een kolom, of een groep kolommen, wilt afdwingen die niet de primaire sleutelkolommen zijn.

Verschillend van PRIMARY KEY constraints, UNIQUE constraints staan NULL toe. Bovendien behandelen UNIQUE constraints de NULL als een gewone waarde, daarom staat het slechts één NULL per kolom toe.

Het volgende statement voegt een rij in waarvan de waarde in de email kolom NULL is:

INSERT INTO hr.persons(first_name, last_name)VALUES('John','Smith');
Code language: SQL (Structured Query Language) (sql)

Nu, als u probeert nog een NULL in te voegen in de email kolom, krijgt u een foutmelding:

INSERT INTO hr.persons(first_name, last_name)VALUES('Lily','Bush');
Code language: SQL (Structured Query Language) (sql)

Hier is de uitvoer:

Violation of UNIQUE KEY constraint 'UQ__persons__AB6E616417240E4E'. Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is (<NULL>).
Code language: SQL (Structured Query Language) (sql)

UNIQUE constraints voor een groep kolommen

Om een UNIQUE constraint voor een groep kolommen te definiëren, schrijf je deze als een tabel constraint met kolomnamen gescheiden door komma’s, als volgt:

CREATE TABLE table_name ( key_column data_type PRIMARY KEY, column1 data_type, column2 data_type, column3 data_type, ..., UNIQUE (column1,column2));
Code language: SQL (Structured Query Language) (sql)

Het volgende voorbeeld maakt een UNIQUE constraint die bestaat uit twee kolommen person_id en skill_id:

CREATE TABLE hr.person_skills ( id INT IDENTITY PRIMARY KEY, person_id int, skill_id int, updated_at DATETIME, UNIQUE (person_id, skill_id));
Code language: SQL (Structured Query Language) (sql)

UNIQUE constraints toevoegen aan bestaande kolommen

Wanneer u een UNIQUE constraint toevoegt aan een bestaande kolom of een groep kolommen in een tabel, onderzoekt SQL Server eerst de bestaande gegevens in deze kolommen om er zeker van te zijn dat alle waarden uniek zijn. Als SQL Server dubbele waarden vindt, geeft hij een foutmelding en wordt de UNIQUE constraint niet toegevoegd.

Het volgende toont de syntaxis voor het toevoegen van een UNIQUE constraint aan een tabel:

ALTER TABLE table_nameADD CONSTRAINT constraint_name UNIQUE(column1, column2,...);
Code language: SQL (Structured Query Language) (sql)

Voorstel dat u de volgende hr.persons tabel hebt:

CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), phone VARCHAR(20),);
Code language: SQL (Structured Query Language) (sql)

Het volgende statement voegt een UNIQUE constraint toe aan de email kolom:

ALTER TABLE hr.personsADD CONSTRAINT unique_email UNIQUE(email);
Code language: SQL (Structured Query Language) (sql)

Op dezelfde manier voegt het volgende statement een UNIQUE constraint toe aan de kolom Telefoon:

ALTER TABLE hr.personsADD CONSTRAINT unique_phone UNIQUE(phone);
Code language: SQL (Structured Query Language) (sql)

Verwijder UNIQUE constraints

Om een UNIQUE constraint te definiëren, gebruikt u het ALTER TABLE DROP CONSTRAINT statement als volgt:

ALTER TABLE table_nameDROP CONSTRAINT constraint_name;
Code language: SQL (Structured Query Language) (sql)

Het volgende statement verwijdert de unique_phone constraint uit de hr.person tabel:

ALTER TABLE hr.personsDROP CONSTRAINT unique_phone;
Code language: SQL (Structured Query Language) (sql)

Vernieuwen UNIQUE constraints

SQL Server heeft geen direct statement om een UNIQUE constraint te wijzigen, daarom moet u de constraint eerst verwijderen en opnieuw maken als u de constraint wilt wijzigen.

In deze tutorial hebt u geleerd hoe u de SQL Server UNIQUE constraint kunt gebruiken om ervoor te zorgen dat de gegevens in een kolom of een groep kolommen uniek zijn.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *