Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il nome del vincolo predefinito in MySQL?

Problema:

Vuoi conoscere i nomi predefiniti dei vincoli in una tabella in MySQL.

Esempio:

Nel nostro database creiamo due tabelle, country e student , con i seguenti vincoli:PRIMARY KEY (l'id della colonna nelle tabelle country e student ), FOREIGN KEY (la colonna country_id nella tabella student ), DEFAULT (il nome della colonna nella tabella student ), UNIQUE (la colonna name nella tabella country e la colonna personal_number nella tabella student ), e CHECK (la colonna age nella tabella student ).

Soluzione:

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

Mostriamo come MySQL denomina i vincoli di queste tabelle per impostazione predefinita. Usa questa query per vederli:

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

Ecco il risultato:

TABLE_NAME TIPO_VINCENTE CONSTRAINT_NAME
paese CHIAVE PRIMARIA PRIMARIO
paese UNICO nome
studente CHIAVE PRIMARIA PRIMARIO
studente UNICO numero_personale
studente CHIAVE ESTERA studente_ibfk_1
studente CONTROLLA student_chk_1

Discussione:

Quando creiamo le nostre tabelle, impostiamo dei vincoli per alcune colonne. Tuttavia, non specifichiamo i nomi per questi vincoli, quindi sono nominati per impostazione predefinita in MySQL. In MySQL, i tipi di vincolo predefiniti sono PRIMARY KEY , FOREIGN KEY , UNIQUE e CHECK . Come vengono generati i nomi predefiniti per i vincoli?

Il PRIMARY KEY constraint si chiama semplicemente PRIMARY , perché in una tabella è sempre presente una chiave primaria. Ci sono due vincoli chiamati PRIMARY nel risultato sopra, ma le tabelle a cui appartengono sono diverse.

Per FOREIGN KEY , il nome segue la convenzione:il nome della tabella, un trattino basso ('_ '), 'ibfk ', un altro trattino basso ('_ '), e un numero. Per il nostro esempio, è student_ibfk_1 nella tabella student .

Il nome predefinito per un CHECK vincolo è simile a quello della chiave esterna. Inizia con il nome della tabella, un trattino basso ('_ '), 'chk ', un altro trattino basso ('_ '), e un numero. Per il nostro esempio, è student_chk_1 nella tabella student .

Il nome predefinito di un UNIQUE vincolo è il nome della colonna stessa. Per il nostro esempio, è personal_number nella tabella student . Quando sono presenti più colonne con UNIQUE vincolo, utilizza il nome della prima colonna nella definizione del vincolo.