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
.