No MySQL, você pode usar o
IF NOT EXISTS
cláusula do CREATE TABLE
para verificar se já existe uma tabela com o mesmo nome no banco de dados. Se a tabela não existir, ela será criada. Se já existir, não será criado.
Exemplo
Fica assim:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Onde
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 usar o
sys.table_exists()
procedimento para verificar se a tabela agora existe:CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
Resultado:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Aqui,
test
é o nome do banco de dados e t1
é o nome da tabela que estou verificando a existência. Neste caso, o resultado é
BASE TABLE
o que significa que a tabela existe. Esta é apenas uma das muitas maneiras de verificar se existe uma tabela no MySQL.
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.00 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
É importante observar 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.