Sqlite3, create table (створення таблиці)

PRIMARY KEY (column-list) [conflict-clause] |

UNIQUE (column-list) [conflict-clause] |

ON CONFLICT conflict-algorithm

У команді CREATE TABLE за ключовим словом "CREATE TABLE" зазвичай слідує ім'я таблиці і список визначень полів і умов. Ім'я таблиці може бути як ідентифікатором, так і рядком. Імена, що починаються з "sqlite_" зарезервовані для використання движком.

Кожне визначення поля таблиці складається з його імені, типу і одним або декількома додатковими умовами. Тип даних для поля, не обмежує розміщення в ньому даних. Для додаткової інформації дивіться Типи даних в SQLite версії 3. Обмеження UNIQUE викликає створення індексу на заданих полях. Оператор COLLATE визначає для функцію порівняння, яка буде використовуватися для цього поля. За замовчуванням застосовується вбудована функція BINARY.

Умова DEFAULT визначає значення за замовчуванням, яке використовується при вставці INSERT. Значення може бути NULL, строковою константою або числом. Починаючи з версії 3.1.0, значення за замовчуванням, може також приймати спеціальні ключові слова CURRENT_TIME, CURRENT_DATE або CURRENT_TIMESTAMP. Якщо значення NULL, рядок або число, воно вставляється без змін в поле, якщо в команді INSERT не визначене значення для цього поля. Якщо значення CURRENT_TIME, CURRENT_DATE або CURRENT_TIMESTAMP, тоді поточна UTC дата і / або час вставляються в поля. Для CURRENT_TIME, формат HH: MM: SS. Для CURRENT_DATE, YYYY-MM-DD. Формат для CURRENT_TIMESTAMP - "YYYY-MM-DD HH: MM: SS".

Визначення PRIMARY KEY зазвичай просто створює індекс UNIQUE на заданих полях. Однак, якщо первинний ключ на одному стовпці має тип INTEGER, тоді цей стовпець буде використовуватися всередині як реальний ключ для B-Дерева (B-Tree) таблиці. Це означає, що поле може містити тільки унікальне ціле значення. (Виняток в одному разі, SQLite ігнорує типи цих полів і дозволяє зберігати дані будь-якого типу, незалежно від їх опису.) Якщо таблиця не має поля з INTEGER PRIMARY KEY, тоді цілий ключ B-Дерева (B-Tree) буде створений автоматично. Доступ до ключу B-Tree записи завжди можна отримати, використовуючи спеціальні імена "ROWID", "OID", або "_ROWID_". Це вірно незалежно від наявності INTEGER PRIMARY KEY. Після INTEGER PRIMARY KEY також може містити ключове слово AUTOINCREMENT. Ключове слово AUTOINCREMENT змінює спосіб автоматичної генерації B-Tree. Додаткова інформація про автоматичної генерації B-Tree доступна окремо.

Відповідно до стандарту SQL, PRIMARY KEY увазі NOT NULL. На жаль, за давнім недогляд, це не так в разі SQLite. SQLite допускає значення NULL в стовпці PRIMARY KEY. Ми можемо змінити SQLite для відповідності стандарту (і можливо це буде зроблено в майбутньому), але за минулий час, SQLite отримав настільки широке поширення, що ми боїмося зробити помилковим код, який зараз коректний, якщо ми виправимо проблему. Тому зараз ми вирішили дозволити NULL в стовпці PRIMARY KEY. Розробники повинні пам'ятати, що ми можемо змінити SQLite відповідно до стандарту SQL в майбутньому і повинні розробляти нові програми відповідно до нього.

Якщо ключові слова "TEMP" або "TEMPORARY" використовуються між "CREATE" та "TABLE", тоді таблиця створюється тільки в рамках з'єднання з базою і автоматично видаляється при його закритті. Всі індекси, створені для тимчасової таблиці, також тимчасові. Тимчасові таблиці і індекси зберігаються з окремому файлі, відмінному від основного файлу бази даних.

якщо визначено, тоді таблиця створюється в зазначеній базі. Помилково вказувати одночасно обидва і ключове слово TEMP, якщо не «temp". Якщо ім'я бази не вказано і ключове слово TEMP не використовувати, таблиця створюється в поточній базі даних.

Обмеження CHECK підтримується з версії 3.3.0. До версії 3.3.0, CHECK міг вказуватися, але не дотримувався.

Немає явних обмежень по числу полів або кількості обмежень в таблиці. Загальний розмір даних в одному записі обмежений приблизно 1 мб в версії 2.8. У версії 3.0 немає жорсткого ліміту на обсяг даних в запису.

Форма визначення таблиці CREATE TABLE AS створює таблицю з результату запиту. Імена полів таблиці беруться іменами полів в результаті запиті.

Точний текст кожного запиту CREATE TABLE зберігається в таблиці sqlite_master. Кожен раз при відкритті бази, всі запити CREATE TABLE зчитуються з таблиці sqlite_master і використовуються для генерації внутрішнього уявлення SQLite. Якщо оригінальної командою була CREATE TABLE AS, тоді створюється її еквівалент CREATE TABLE, який зберігається в sqlite_master замість оригінального запиту. Текст CREATE TEMPORARY TABLE зберігається в таблиці sqlite_temp_master.

Якщо вказано опціональний оператор IF NOT EXISTS і вже є інша таблиця з таким ім'ям, то команда не виконується.