No SQLite, você pode usar o
IF NOT EXISTS
cláusula do CREATE TABLE
para verificar se uma tabela ou exibição com o mesmo nome já existe no banco de dados antes de criá-la. A criação de uma tabela sem esta cláusula normalmente resultaria em um erro se uma tabela com o mesmo nome já existisse no banco de dados. Mas ao usar o
IF NOT EXISTS
cláusula, a instrução não tem efeito se já existir uma tabela 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 tabela ou visualização chamada
t1
. Verifique se a tabela já existe
Podemos consultar o
sqlite_schema
table para verificar se a tabela agora existe:SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
Resultado:
1
Neste caso, recebo
1
, o que significa que a tabela existe. Tente criar a tabela novamente
Se tentarmos criar essa tabela novamente:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Não recebemos um erro:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
Não recebemos nada.
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: 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 ou visualização existente com o mesmo nome que estamos tentando dar à tabela que estamos criando. Dito de outra forma, só porque uma tabela com esse nome já existe, não significa que ela tenha a definição correta.
Além disso, um erro ainda será retornado se a tabela não puder ser criada devido a um índice existente, mesmo se o
IF NOT EXISTS
cláusula é especificada.