Некоторые интересные вещи из SQLite

Источник: «Some cool SQLite things»
SQLite не так прост, как кажется на первый взгляд и обладает рядом интересных возможностей.

Строгие таблицы

Для тех, кто не знает, SQLite — это как динамически-типизированный язык. В нем нет ограничений на то, что можно и что нельзя хранить в столбце.

Это означает, что если в таблице базы данных есть столбец INTEGER, ничто не мешает хранить в нём строку.

Именно в этом случае в дело вступают строгие таблицы. Вы можете включить «строгий режим» при создании таблицы, добавив ключевое слово strict к определению таблицы.

CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT,
age REAL
) strict;

Теперь все вставки будут проверяться на тип, что предотвратит вставку недопустимых типов данных в столбцы.

.import

Вам когда-нибудь требовалось импортировать CSV-файл в базу данных, но не хотелось возиться с написанием сценария импорта? SQLite в этом поможет!

Если вы откроете свою базу данных в интерфейсе командной строки SQLite, то сможете воспользоваться командой .import, чтобы импортировать CSV-файл непосредственно в таблицу базы данных.

sqlite> .import --csv /Users/ryan/Downloads/users.csv users

Это импортирует файл users.csv в таблицу users.

Расширения

Многие движки баз данных имеют некий API расширения, позволяющий добавлять новую функциональность в базу данных, не прибегая к ручной настройке.

SQLite не является исключением. Всё, что вам нужно сделать, — это найти расширение, которое хотите использовать, и загрузить объектный файл для вашей операционной системы.

Если не хотите возиться с загрузкой файлов, есть отличный менеджер пакетов sqlpkg, который позаботится о скучных вещах: https://github.com/nalgeon/sqlpkg-cli.

Если используется интерфейс командной строки для SQLite, то можно загрузить расширение с помощью команды .load.

sqlite> .load /Users/ryan/Downloads/uuid
sqlite> select uuid4();

Если требуется расширение для выполнения какой-либо задачи, попробуйте поискать его на https://sqlpkg.org!

Байткод

Большинство SQL-движков преобразуют SQL-запросы в некое внутреннее представление. Обычно это дерево узлов, описывающих выполняемые действия, и SQL-движок использует это дерево для выполнения операций.

В этом отношении SQLite действительно отличается. Вместо использования дерева для обработки выражений он преобразует всё в более плоскую последовательность инструкций, байткодов.

Это очень похоже на то, как выполняются интерпретируемые языки программирования, такие как PHP, JavaScript, Ruby и т. д.

Вы можете просмотреть байткод, генерируемый при добавлении EXPLAIN к SQL-запросам в интерфейсе командной строки!

sqlite> explain select * from users;
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 8 0 0 Start at 8
1 OpenRead 0 2 0 2 0 root=2 iDb=0; users
2 Rewind 0 7 0 0
3 Rowid 0 1 0 0 r[1]=users.rowid
4 Column 0 1 2 0 r[2]= cursor 0 column 1
5 ResultRow 1 2 0 0 output=r[1..2]
6 Next 0 3 0 1
7 Halt 0 0 0 0
8 Transaction 0 0 1 0 1 usesStmtJournal=0
9 Goto 0 1 0 0

Дополнительные материалы

Предыдущая Статья

MongoDB в Laravel: Краткое руководство для начинающих

Следующая Статья

Заблуждения о Специфичности CSS