Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist der Standard-Einschränkungsname in SQL Server?

Problem:

Sie möchten die Standardnamen von Einschränkungen in der SQL Server-Datenbank wissen.

Beispiel:

In unserer Datenbank erstellen wir zwei Tabellen, country und student , mit den folgenden Einschränkungen:PRIMARY KEY (die Spalte id in den Tabellen country und student ), FOREIGN KEY (die Spalte country_id in der Tabelle student ), DEFAULT (die Spalte name in der Tabelle student ), UNIQUE (die Spalte name in der Tabelle country und die Spalte personal_number in der Tabelle student ) und CHECK (die Spalte age in der Tabelle student ).

Lösung:

CREATE TABLE country (
id int NOT NULL primary key,
name varchar(100) UNIQUE
);

CREATE TABLE student (
id int NOT NULL primary key,
name varchar(100) NOT NULL DEFAULT 'unknown',
personal_number varchar(100) UNIQUE,
age int CHECK(age>15),
country_id int FOREIGN KEY references country(id)
);

Lassen Sie uns zeigen, wie SQL Server die Einschränkungen dieser Tabellen standardmäßig benennt. Verwenden Sie diese Abfrage, um sie anzuzeigen:

SELECT TABLE_CATALOG, TABLE_NAME,
       CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Hier ist das Ergebnis:

TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
Land PRIMÄRSCHLÜSSEL PK__country__3213E83F7EFD826D
Land EINZIGARTIG UQ__country__72E12F1BB69A1D8C
Schüler PRIMÄRSCHLÜSSEL PK__student__3213E83F357C7D1D
Schüler EINZIGARTIG UQ__student__24E2EDD2AC2A7D87
Schüler ÜBERPRÜFEN CK__Schüler__Alter__4E88ABD4
Schüler Fremdschlüssel FK__student__country__4F7CD00D

Diskussion:

Wenn wir unsere Tabellen erstellen, legen wir Einschränkungen für einige Spalten fest. Wir geben jedoch keine Namen für diese Einschränkungen an, daher werden sie standardmäßig benannt. Wie werden die Standardnamen für Einschränkungen generiert?

In SQL Server beginnen die Standardeinschränkungsnamen mit bestimmten Präfixen:PK , UQ , CK , oder FK .

Der Standardname für einen PRIMARY KEY Einschränkung beginnt mit „PK “, gefolgt von Unterstrichen („__ ’), der Tabellenname, weitere Unterstriche (‘__ ’) und eine von SQL Server generierte hexadezimale Sequenznummer. In unserem Beispiel PK__country__3213E83F7EFD826D ist der Standardname für die Primärschlüsseleinschränkung in der Tabelle country und PK__student__3213E83F357C7D1D ist der Standardname für die Primärschlüssel-Einschränkung in der Tabelle student .

Der Standardname für einen FOREIGN KEY Einschränkung beginnt mit „FK “, gefolgt von Unterstrichen („__ ’), der Tabellenname, weitere Unterstriche (‘__ ’), den Namen der zugehörigen Tabelle und eine von SQL Server generierte hexadezimale Sequenznummer. In unserem Beispiel FK__student__country__4F7CD00D ist der Standardname für die Fremdschlüsseleinschränkung in der Tabelle student was der Spalte id entspricht in der Tabelle country .

Der Standardname für einen UNIQUE Einschränkung ist ‘UQ “, Unterstriche („__ ’), der Tabellenname, weitere Unterstriche (‘__ ’) und eine von SQL Server generierte hexadezimale Sequenznummer. In unserem Beispiel UQ__country__72E12F1BB69A1D8C ist der Standardname der Eindeutigkeitsbeschränkung für den Spaltennamen in der Tabelle country , und UQ__student__24E2EDD2AC2A7D87 des UNIQUE Einschränkung für den Spaltennamen der Tabelle student . UNIQUE Beschränkungen mit mehreren Spalten werden in einem ähnlichen Muster benannt.

Der Standardname für einen CHECK Einschränkung ist ‘CK “, Unterstriche („__ ’), der Tabellenname, weitere Unterstriche (‘__ ’), der Spaltenname, weitere Unterstriche (‘__’) und eine von SQL Server generierte hexadezimale Sequenznummer. In unserem Beispiel CK__student__age__4E88ABD4 ist der Standardname für CHECK Einschränkung für die Spalte age der Tabelle student .