Можно ли структурировать запрос SQL для автоматического создания таблицы, если она еще не существует? - PullRequest
3 голосов
/ 19 июля 2010

Я новичок в SQL, и я пытаюсь выполнить следующее (псевдокод) с помощью одного запроса:

if (a table named "config_data" does not exist)
{ create a table named "config_data" }

if ("config_data" has no rows)
{ add a row to "config_data" with some default data }

return all rows in "config_data"

Как бы я поступил?Можно ли это сделать одним запросом?Я использую SQLite3, если это помогает.

Пока я знаю, как создать таблицу и вставить в нее данные:

CREATE TABLE config_data (key TEXT NOT NULL, value TEXT);
INSERT INTO config_data VALUES ("key_1", "value_1");
INSERT INTO config_data VALUES ("key_2", "value_2");

А также как получить все строки:

SELECT * FROM config_data;

Это причудливые комбинации, которые ускользают от меня :)

Ответы [ 3 ]

5 голосов
/ 19 июля 2010

Чтобы создать таблицу, если она еще не существует, вы можете использовать ЕСЛИ НЕ СУЩЕСТВУЕТ :

CREATE TABLE IF NOT EXISTS config_data (
    key TEXT NOT NULL, value TEXT,
    CONSTRAINT key_unique UNIQUE(key)
)

Для второй части вы можете использовать INSERT OR IGNORE ( подробнее здесь ), чтобы вставить значение, предполагая, что у вас есть уникальное ограничение, которое в противном случае было бы нарушено при вставке значение дважды (например, у вас может быть ограничение unqiue для столбца key):

INSERT OR IGNORE INTO config_data VALUES ("key_1", "def_value_1")
2 голосов
/ 19 июля 2010

Вы можете использовать CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ ...

Посмотрите здесь:

http://cookbooks.adobe.com/post_Easy_way_to_create_a_SQLite_connection-12846.html

Вы также можете использовать то, что показано в концеэтой страницы:

http://php.net/manual/en/book.sqlite.php

1 голос
/ 19 июля 2010

Также вы можете указать значение по умолчанию для каждого столбца в предложении CONSTRAINT.

CREATE TABLE IF NOT EXISTS config_data 
('someinteger' INTEGER, 'sometext' TEXT, CONSTRAINT sometext DEFAULT 'should be text but isn't yet')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...