Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Qu'est-ce que le nom de contrainte par défaut dans SQL Server ?

Problème :

Vous souhaitez connaître les noms par défaut des contraintes dans la base de données SQL Server.

Exemple :

Dans notre base de données, nous créons deux tables, country et student , avec les contraintes suivantes :PRIMARY KEY (la colonne id dans les tableaux country et student ), FOREIGN KEY (la colonne country_id dans le tableau student ), DEFAULT (la colonne name dans le tableau student ), UNIQUE (la colonne name dans le tableau country et la colonne personal_number dans le tableau student ), et CHECK (la colonne age dans le tableau student ).

Solution :

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)
);

Montrons comment SQL Server nomme les contraintes de ces tables par défaut. Utilisez cette requête pour les voir :

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

Voici le résultat :

TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
pays CLÉ PRIMAIRE PK__pays__3213E83F7EFD826D
pays UNIQUE UQ__pays__72E12F1BB69A1D8C
étudiant CLÉ PRIMAIRE PK__étudiant__3213E83F357C7D1D
étudiant UNIQUE UQ__étudiant__24E2EDD2AC2A7D87
étudiant VÉRIFIER CK__student__age__4E88ABD4
étudiant CLÉ ÉTRANGÈRE FK__student__country__4F7CD00D

Discussion :

Lorsque nous créons nos tables, nous définissons des contraintes pour certaines colonnes. Cependant, nous ne spécifions pas les noms de ces contraintes, elles sont donc nommées par défaut. Comment les noms par défaut des contraintes sont-ils générés ?

Dans SQL Server, les noms de contraintes par défaut commencent par des préfixes spécifiques :PK , UQ , CK , ou FK .

Le nom par défaut d'une PRIMARY KEY la contrainte commence par 'PK ', suivi de traits de soulignement ('__ '), le nom de la table, plus des traits de soulignement ('__ ’) et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, PK__country__3213E83F7EFD826D est le nom par défaut de la contrainte de clé primaire dans la table country et PK__student__3213E83F357C7D1D est le nom par défaut de la contrainte de clé primaire dans la table student .

Le nom par défaut d'une FOREIGN KEY la contrainte commence par 'FK ', suivi de traits de soulignement ('__ '), le nom de la table, plus des traits de soulignement ('__ ’), le nom de la table associée et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, FK__student__country__4F7CD00D est le nom par défaut de la contrainte de clé étrangère dans la table student qui équivaut à la colonne id dans le tableau country .

Le nom par défaut pour un UNIQUE la contrainte est 'UQ ', souligne ('__ '), le nom de la table, plus des traits de soulignement ('__ ’) et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, UQ__country__72E12F1BB69A1D8C est le nom par défaut de la contrainte unique pour le nom de la colonne dans la table country , et UQ__student__24E2EDD2AC2A7D87 de l'UNIQUE contrainte pour le nom de la colonne de la table student . UNIQUE les contraintes avec plusieurs colonnes sont nommées dans un modèle similaire.

Le nom par défaut pour un CHECK la contrainte est 'CK ', souligne ('__ '), le nom de la table, plus des traits de soulignement ('__ '), le nom de la colonne, d'autres traits de soulignement ('__') et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, CK__student__age__4E88ABD4 est le nom par défaut du CHECK contrainte pour la colonne age du tableau student .