No MariaDB, você pode usar o
IF NOT EXISTS
cláusula do CREATE TABLE
para verificar se uma tabela com o mesmo nome já existe no banco de dados antes de criá-la. A tabela só será criada se já não houver uma com o mesmo nome.
Exemplo
Segue um exemplo para demonstrar:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Aqui,
t1
é o nome da tabela e tudo entre os parênteses é a definição da tabela (ou seja, colunas, etc). Nesse caso, a tabela só será criada se ainda não houver uma chamada
t1
. Verifique se a tabela já existe
Podemos consultar o
information_schema.tables
table para verificar se a tabela agora existe:SELECT EXISTS (
SELECT
TABLE_NAME
FROM
information_schema.tables
WHERE
TABLE_SCHEMA LIKE 'zap' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 't1'
);
Resultado:
1
Aqui,
zap
é o nome do banco de dados e t1
é o nome da tabela que estou verificando a existência. O
1
significa que a tabela existe. Se não existisse, teríamos 0
. Tente criar a tabela novamente
Agora, se tentarmos criar essa tabela novamente:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Não recebemos um erro:
Query OK, 0 rows affected, 1 warning (0.002 sec)
Mas recebemos um aviso.
Então vamos verificar o aviso:
SHOW WARNINGS;
Resultado:
+-------+------+---------------------------+ | Level | Code | Message | +-------+------+---------------------------+ | Note | 1050 | Table 't1' already exists | +-------+------+---------------------------+
Como esperado, ele nos diz que a tabela já existe.
Sem o IF NOT EXISTS
Cláusula
Veja o que acontece quando não usamos o
IF NOT EXISTS
cláusula ao tentar criar uma tabela que já existe:CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Desta vez recebemos um erro:
ERROR 1050 (42S01): Table 't1' already exists
Observe que o
IF NOT EXISTS
cláusula não verifica a estrutura/definição da tabela. Ele simplesmente verifica se não há nenhuma tabela existente com o mesmo nome que estamos tentando dar à tabela que estamos criando. Em outras palavras, só porque uma tabela com esse nome já existe, não significa que ela tenha a definição correta.