SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Como criar uma tabela apenas se ela não existir no SQLite


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.