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.