sql >> Databáze >  >> RDS >> Sqlserver

Jaký je výchozí název omezení v SQL Server?

Problém:

Chcete znát výchozí názvy omezení v databázi SQL Server.

Příklad:

V naší databázi vytvoříme dvě tabulky, country a student , s následujícími omezeními:PRIMARY KEY (sloupec id v tabulkách country a student ), FOREIGN KEY (sloupec country_id v tabulce student ), DEFAULT (sloupec name v tabulce student ), UNIQUE (sloupec name v tabulce country a sloupec personal_number v tabulce student ) a CHECK (sloupec age v tabulce student ).

Řešení:

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

Ukážeme si, jak SQL Server standardně pojmenovává omezení těchto tabulek. Chcete-li je zobrazit, použijte tento dotaz:

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

Zde je výsledek:

TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
země PRIMÁRNÍ KLÍČ PK__country__3213E83F7EFD826D
země JEDINEČNÉ UQ__country__72E12F1BB69A1D8C
student PRIMÁRNÍ KLÍČ PK__student__3213E83F357C7D1D
student JEDINEČNÉ UQ__student__24E2EDD2AC2A7D87
student ZKONTROLUJTE CK__student__age__4E88ABD4
student CIZI KLÍČ FK__student__country__4F7CD00D

Diskuse:

Když vytváříme naše tabulky, nastavujeme omezení pro některé sloupce. Neuvádíme však názvy těchto omezení, takže jsou pojmenovány ve výchozím nastavení. Jak se generují výchozí názvy pro omezení?

V SQL Server začínají výchozí názvy omezení konkrétními předponami:PK , UQ , CK nebo FK .

Výchozí název pro PRIMARY KEY omezení začíná „PK “, za nímž následují podtržítka („__ ’), název tabulky, další podtržítka („__ ’) a hexadecimální pořadové číslo vygenerované SQL Serverem. V našem příkladu PK__country__3213E83F7EFD826D je výchozí název pro omezení primárního klíče v tabulce country a PK__student__3213E83F357C7D1D je výchozí název pro omezení primárního klíče v tabulce student .

Výchozí název pro FOREIGN KEY omezení začíná „FK “, za nímž následují podtržítka („__ ’), název tabulky, další podtržítka („__ ’), název související tabulky a hexadecimální pořadové číslo vygenerované SQL Serverem. V našem příkladu FK__student__country__4F7CD00D je výchozí název pro omezení cizího klíče v tabulce student což je ekvivalentní sloupci id v tabulce country .

Výchozí název pro UNIQUE omezení je „UQ “, podtržítka („__ ’), název tabulky, další podtržítka („__ ’) a hexadecimální pořadové číslo vygenerované SQL Serverem. V našem příkladu UQ__country__72E12F1BB69A1D8C je výchozí název jedinečného omezení pro název sloupce v tabulce country a UQ__student__24E2EDD2AC2A7D87 z UNIQUE omezení pro název sloupce tabulky student . UNIQUE omezení s více sloupci jsou pojmenována podobně.

Výchozí název pro CHECK omezení je „CK “, podtržítka („__ ’), název tabulky, další podtržítka („__ ’), název sloupce, další podtržítka („__“) a hexadecimální pořadové číslo generované SQL Serverem. V našem příkladu CK__student__age__4E88ABD4 je výchozí název pro CHECK omezení pro sloupec age tabulky student .


  1. DateTime2 vs DateTime na SQL Server

  2. Jak otočit protokoly PgBouncer v Linuxu/Windows?

  3. DISTINCT pouze pro jeden sloupec

  4. MySQLi count(*) vždy vrátí 1