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

Come verificare se una tabella esiste già prima di crearla in MySQL

In MySQL, puoi usare IF NOT EXISTS clausola del CREATE TABLE istruzione per verificare se esiste già una tabella con lo stesso nome nel database.

Se la tabella non esiste, verrà creata. Se esiste già, non verrà creato.

Esempio

Funziona così:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Dove t1 è il nome della tabella e tutto ciò che è tra parentesi è la definizione della tabella (es. colonne, ecc.).

In tal caso, la tabella verrà creata solo se non ce n'è già una chiamata t1 .

Verifica che la tabella ora esista

Possiamo usare sys.table_exists() procedura per verificare se la tabella ora esiste:

CALL sys.table_exists('test', 't1', @table_type); 
SELECT @table_type;

Risultato:

+-------------+
| @table_type |
+-------------+
| BASE TABLE  |
+-------------+

Qui, test è il nome del database e t1 è il nome della tabella di cui sto verificando l'esistenza.

In questo caso, il risultato è BASE TABLE il che significa che la tabella esiste.

Questo è solo uno dei tanti modi per verificare se esiste una tabella in MySQL.

Prova a creare di nuovo la tabella

Ora, se proviamo a creare nuovamente quella tabella:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Non riceviamo un errore:

Query OK, 0 rows affected, 1 warning (0.00 sec)

Ma riceviamo un avviso.

Quindi controlliamo l'avviso:

SHOW WARNINGS;

Risultato:

+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 't1' already exists |
+-------+------+---------------------------+

Come previsto, ci dice che la tabella esiste già.

Senza il IF NOT EXISTS Clausola

Ecco cosa succede quando non utilizziamo il IF NOT EXISTS clausola quando si tenta di creare una tabella già esistente:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Questa volta riceviamo un errore:

ERROR 1050 (42S01): Table 't1' already exists

È importante notare che IF NOT EXISTS La clausola non controlla la struttura/definizione della tabella. Verifica semplicemente che non ci siano tabelle esistenti con lo stesso nome che stiamo cercando di assegnare alla tabella che stiamo creando.

In altre parole, solo perché esiste già una tabella con quel nome, non significa che abbia la definizione corretta.