sql >> Database >  >> RDS >> Mysql

Wat is de standaardnaam van de beperking in MySQL?

Probleem:

U wilt de standaardnamen van beperkingen in een tabel in MySQL weten.

Voorbeeld:

In onze database maken we twee tabellen, country en student , met de volgende beperkingen:PRIMARY KEY (de kolom-ID in de tabellen country en student ), FOREIGN KEY (de kolom country_id in de tabel student ), DEFAULT (de kolomnaam in de tabel student ), UNIQUE (de kolom name in de tabel country en de kolom personal_number in de tabel student ), en CHECK (de kolom age in de tabel student ).

Oplossing:

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(country_id) REFERENCES country(id)
);

Laten we laten zien hoe MySQL de beperkingen van deze tabellen standaard benoemt. Gebruik deze zoekopdracht om ze te bekijken:

SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME
FROM information_schema.table_constraints
WHERE table_name='country' OR table_name='student';

Hier is het resultaat:

TABLE_NAME CONSTRRAINT_TYPE CONSTRRAINT_NAME
land PRIMAIRE SLEUTEL PRIMAIR
land UNIEK naam
student PRIMAIRE SLEUTEL PRIMAIR
student UNIEK persoonlijk_nummer
student BUITENLANDSE SLEUTEL student_ibfk_1
student CONTROLEER student_chk_1

Discussie:

Wanneer we onze tabellen maken, stellen we beperkingen in voor sommige kolommen. We specificeren echter geen namen voor deze beperkingen, dus ze worden standaard genoemd in MySQL. In MySQL zijn de standaard typen beperkingen PRIMARY KEY , FOREIGN KEY , UNIQUE , en CHECK . Hoe worden de standaardnamen gegenereerd voor beperkingen?

De PRIMARY KEY constraint heet gewoon PRIMARY , omdat er altijd één primaire sleutel in een tabel is. Er zijn twee beperkingen genaamd PRIMARY in het bovenstaande resultaat, maar de tabellen waartoe ze behoren zijn anders.

Voor FOREIGN KEY , de naam volgt de conventie:de tabelnaam, een onderstrepingsteken ('_ ’), ‘ibfk ’, nog een onderstrepingsteken (‘_ ’), en een nummer. Voor ons voorbeeld is dit student_ibfk_1 in de tabel student .

De standaardnaam voor een CHECK beperking is vergelijkbaar met die van de externe sleutel. Het begint met de tabelnaam, een onderstrepingsteken ('_ ’), ‘chk ’, nog een onderstrepingsteken (‘_ ’), en een nummer. Voor ons voorbeeld is dit student_chk_1 in de tabel student .

De standaardnaam van een UNIQUE beperking is de naam van de kolom zelf. Voor ons voorbeeld is dit personal_number in de tabel student . Als er meerdere kolommen zijn met de UNIQUE beperking, het gebruikt de naam van de eerste kolom in de definitie van de beperking.


  1. MySQL utf8mb4, fouten bij het opslaan van emoji's

  2. MySQL-query voor invoegen werkt niet met WHERE-clausule

  3. Maak geneste JSON-arrays met FOR JSON PATH

  4. MySQL haalt variabele op uit opgeslagen procedure in PHP PDO