SQLite
| SQLite | |||
|---|---|---|---|
| | |||
| | |||
| Тип | встраиваемая СУБД | ||
| Разработчик | Ричард Хипп[вд] | ||
| Написана на | Си[2] | ||
| Операционная система | кроссплатформенность | ||
| Дата выпуска | август 2000 | ||
| Последняя версия | |||
| Репозиторий | sqlite.org/src | ||
| |||
| |||
| Лицензия | Общественное достояние | ||
| Сайт | sqlite.org (англ.) | ||
SQLite (/ˌɛsˌkjuːˌɛlˈaɪt/,[3][4] /ˈsiːkwəˌlaɪt/[5]) — компактная встраиваемая СУБД. Исходный код библиотеки передан в общественное достояние. В 2005 году проект получил награду Google-O’Reilly Open Source Awards[6].
Устройство
Слово «встраиваемый» (англ. embedded) означает, что SQLite не использует парадигмы клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а представляет собой библиотеку, с которой программа компонуется, и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite. Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа. Простота реализации достигается за счёт того, что перед началом исполнения транзакции записи весь файл, хранящий базу данных, блокируется; ACID-функции достигаются в том числе за счёт создания файла журнала.
Несколько процессов или потоков могут одновременно без каких-либо проблем читать данные из одной базы. Запись в базу можно осуществить только в том случае, если никаких других запросов в данный момент не обслуживается; в противном случае попытка записи оканчивается неудачей, и в программу возвращается код ошибки. Другим вариантом развития событий является автоматическое повторение попыток записи в течение заданного интервала времени.

В комплекте поставки идёт также функциональная клиентская часть в виде исполняемого файла sqlite3, с помощью которого демонстрируется реализация функций основной библиотеки. Клиентская часть является кроссплатформенной утилитой командной строки.
SQLite возможно использовать как на встраиваемых системах, так и на выделенных машинах с гигабайтными массивами данных.
Типы данных
SQLite поддерживает динамическое типизирование данных. Возможные типы значений: INTEGER, REAL, TEXT и BLOB. Также поддерживается специальное значение NULL.[7]
Размеры значений типа TEXT и BLOB не ограничены ничем, кроме константы SQLITE_MAX_LENGTH в исходном коде SQLite, равной 1 ГБ[8].
Каждое значение в любом поле любой записи может быть любого из этих типов, независимо от типа, указанного при объявлении полей таблицы. Указанный при объявлении поля тип хранится для справки в его исходном написании, и используется в качестве основы для выбора предпочтений (так называемое type affinity — это подход, редко встречающийся в других СУБД) при выполнении неявных преобразований типов на основании похожести этого названия типа на что-либо, знакомое SQLite. В этот алгоритм зашит обширный перечень практикуемых в других СУБД вариантов названий типов данных. Если безопасного преобразования записываемого значения в предпочитаемый тип не получается, SQLite записывает значение в его исходном виде. Для получения значений из базы есть ряд функций для каждого из типов, и если тип хранимого значения не соответствует запрашиваемому, оно тоже, по возможности, преобразуется.[9]
Ограничения
Старые версии SQLite были спроектированы без каких-либо ограничений, единственным условием было то, чтобы база данных умещалась в памяти, в которой все вычисления производились при помощи 32-разрядных целых чисел. Это создавало определённые проблемы. Из-за того, что верхние пределы не были определены и соответственно должным образом протестированы, часто обнаруживались ошибки при использовании SQLite в достаточно экстремальных условиях. Поэтому в новых версиях SQLite были введены пределы, которые теперь проверяются вместе с общим набором тестов.
Во время компиляции библиотеки SQLite устанавливаются следующие ограничения, которые можно, при острой необходимости, увеличивать:
| Описание | Значение | Константа в исходном коде |
|---|---|---|
| Максимальная длина строки или BLOB-поля, байт | 1 000 000 000 | SQLITE_MAX_LENGTH |
| Максимальное количество колонок | 2 000 | SQLITE_MAX_COLUMN |
| Максимальная длина SQL-выражения | 1 000 000 000 | SQLITE_MAX_SQL_LENGTH |
| Максимальное количество таблиц в выражениях с JOIN | 64 | |
| Максимальная глубина дерева выражений | 1 000 | SQLITE_MAX_EXPR_DEPTH |
| Максимальное количество аргументов функции | 127 | SQLITE_MAX_FUNCTION_ARG |
| Максимальное количество термов в объединённом выражении с SELECT | 500 | SQLITE_MAX_COMPOUND_SELECT |
| Максимальная длина шаблона как аргумента операторов LIKE или GLOB | 50 000 | SQLITE_MAX_LIKE_PATTERN_LENGTH |
| Максимальное количество символов-заменителей в одном SQL-выражении | 999 | SQLITE_MAX_VARIABLE_NUMBER |
| Максимальная глубина рекурсии триггеров | 1 000 | SQLITE_MAX_TRIGGER_DEPTH |
| Максимальное количество присоединённых баз | 10 | SQLITE_MAX_ATTACHED |
| Максимальный размер страницы базы данных | 65 536 | SQLITE_MAX_PAGE_SIZE |
| Максимальное количество страниц в файле базы данных | 1 073 741 823 | SQLITE_MAX_PAGE_COUNT |
Для версии 3.37.0 значение SQLITE_MAX_PAGE_SIZE не может быть больше заданного по умолчанию, что прямо указано в исходном коде. Максимальное количество страниц в БД 4294967294. Таким образом, максимальный размер БД составляет 256 ТиБ.[10]
Некоторые ограничения можно менять в сторону уменьшения во время исполнения программы при помощи задания категории и соответствующего значения функции sqlite3_limit():
int sqlite3_limit(sqlite3*, int id, int newVal)
| Категория | Описание |
|---|---|
| SQLITE_LIMIT_LENGTH | Максимальная длина любой строки или BLOB-поля или ряда |
| SQLITE_LIMIT_SQL_LENGTH | Максимальная длина SQL-выражения |
| SQLITE_LIMIT_COLUMN | Максимальное количество колонок в определении таблицы или результате выборки, или индексе, или выражениях с операторами ORDER BY или GROUP BY |
| SQLITE_LIMIT_EXPR_DEPTH | Максимальная глубина разобранного дерева любого выражения |
| SQLITE_LIMIT_COMPOUND_SELECT | Максимальное количество термов в объединённом выражении с SELECT |
| SQLITE_LIMIT_VDBE_OP | Максимальное количество инструкций программы виртуальной машины выполняемого SQL-выражения |
| SQLITE_LIMIT_FUNCTION_ARG | Максимально количество аргументов функции |
| SQLITE_LIMIT_ATTACHED | Максимальное количество присоединённых баз |
| SQLITE_LIMIT_LIKE_PATTERN_LENGTH | Максимальная длина шаблона как аргумента операторов LIKE или GLOB |
| SQLITE_LIMIT_VARIABLE_NUMBER | Максимальное количество переменных в SQL-выражении, которые можно связать |
| SQLITE_LIMIT_TRIGGER_DEPTH | Максимальная глубина рекурсии триггеров |
Это может быть полезным, если SQLite используется в веб-приложениях, так как уменьшенные пределы могут предотвратить DoS-атаки со стороны недоверяемых внешних клиентов.
Использование
Сама библиотека SQLite написана на C; существует большое количество привязок к другим языкам программирования, в том числе Apple Swift, Delphi, C++, Java, Kotlin, C#, VB.NET, Python, Perl, Node.js, PHP, PureBasic[11], Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby, Haskell, Scheme, Smalltalk, Lua и Parser, а также ко многим другим. Полный список существующих средств размещён на странице проекта[12].
Простота и удобство встраивания SQLite привели к тому, что библиотека используется в браузерах, музыкальных плеерах и многих других программах.
В частности, SQLite используется в:
- Adobe Integrated Runtime — среда для запуска приложений (частично);
- Gears;
- Autoit;
- Фреймворк Qt;
- Платформа XUL на движке Gecko 1.9+, XULRunner 1.9+ и, потенциально, все приложения, основанные на этой платформе, в том числе:
- Mozilla Firefox (начиная с версии 3.0)
- Mozilla Thunderbird (начиная с версии 3.0)
- Songbird
- SQLite Manager[13].
- Skype[14];
- Viber;
- Некоторые модели GPS-навигаторов Garmin
Многие программы поддерживают SQLite в качестве формата хранения данных (особенно в Mac OS и iOS, Android), в том числе:
- 1С:Предприятие 7.7 (с помощью внешнего компонента[15]);
- 1С:Предприятие 8.3 (для хранения записей журнала регистрации[16]);
- Adobe Photoshop Lightroom;
- FlylinkDC++;
- AIMP;
- Banshee;
- Calibre;
- Eserv;
- F-Spot;
- Nextcloud;
- FAR Manager (начиная с версии 3.0);
- Gajim;
- Google Chrome;
- Miranda IM (с помощью плагина драйвера базы данных[17]);
- MyChat;
- Opera (начиная с версии 10.50);
- qutIM;
- QGIS;
- Safari;
- XnView;
- Garena.
См. также
Примечания
- ↑ SQLite Release 3.53.4 On 2026-07-24
- ↑ The sqlite Open Source Project on Open Hub: Languages Page — 2006.
- ↑ Why SQLite succeeded as a database — Richard Hipp, creator of SQLite. The Changelog. Episode 201. Отметка времени: 00:17:25. Архивировано 7 июля 2022. Дата обращения: 7 июля 2022.
How do I pronounce the name of the product? I say S-Q-L-ite, like a mineral.
. - ↑ D. Richard Hipp (presenter) (31 мая 2006). An Introduction to SQLite (video). Google Inc. Отметка времени: 00:01:14. Дата обращения: 23 марта 2010.
[...] ess-kju-ellite [...]
. - ↑ D. Richard Hipp (presenter) (31 мая 2006). An Introduction to SQLite. Google Inc. Отметка времени: 00:48:15. Дата обращения: 23 марта 2010.
[...] sequelite [...]
. - ↑ Google-O’Reilly Open Source Awards — Hall of Fame — Google Code. Дата обращения: 5 марта 2010. Архивировано 11 июля 2011 года.
- ↑ Архивированная копия (англ.). Дата обращения: 11 марта 2019. Архивировано из оригинала 13 февраля 2019 года.
- ↑ (англ.) Implementation Limits For SQLite. Дата обращения: 23 ноября 2018. (англ.) Архивировано 8 января 2019 года.
- ↑ Архивированная копия (англ.). Дата обращения: 11 марта 2019. Архивировано из оригинала 10 марта 2019 года.
- ↑ Implementation Limits For SQLite. Дата обращения: 8 декабря 2021. Архивировано 7 ноября 2021 года.
- ↑ Функция UseSQLiteDatabase(). Дата обращения: 28 сентября 2013. Архивировано 2 октября 2013 года.
- ↑ Список привязок SQLite для других языков. Дата обращения: 4 апреля 2007. Архивировано из оригинала 5 февраля 2009 года.
- ↑ sqlite-manager — Project Hosting on Google Code. Дата обращения: 5 марта 2010. Архивировано 9 февраля 2010 года.
- ↑ Skype client using SQLite? Дата обращения: 7 мая 2010. Архивировано из оригинала 28 сентября 2014 года.
- ↑ sqlite1c — Project Hosting on Google Code. Дата обращения: 5 августа 2008. Архивировано 12 апреля 2009 года.
- ↑ Как мы улучшили журнал регистрации. 1С (29 октября 2013). Дата обращения: 1 июля 2014. Архивировано 27 августа 2014 года.
- ↑ dbRW Database Driver 1.2 Архивировано 1 мая 2011 года.
Ссылки
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.