SQLite — Обзор
Эта глава поможет вам понять, что такое SQLite, чем он отличается от SQL, зачем он нужен и как он обрабатывает базу данных приложений.
SQLite — это программная библиотека, которая реализует автономный, безсерверный, транзакционный механизм базы данных SQL с нулевой конфигурацией. SQLite является одним из самых быстрорастущих механизмов баз данных, но он растет с точки зрения популярности, а не его размера. Исходный код для SQLite находится в открытом доступе.
Что такое SQLite?
SQLite — это внутрипроцессная библиотека, которая реализует автономный, безсерверный, транзакционный механизм базы данных SQL с нулевой конфигурацией. Это база данных с нулевой конфигурацией, что означает, что, как и другие базы данных, вам не нужно настраивать ее в вашей системе.
Движок SQLite не является автономным процессом, как другие базы данных, вы можете связать его статически или динамически в соответствии с вашими требованиями к вашему приложению. SQLite получает доступ к своим файлам хранения напрямую.
Почему SQLite?
-
SQLite не требует отдельного серверного процесса или системы для работы (без сервера).
-
SQLite поставляется с нулевой конфигурацией, что означает отсутствие необходимости в настройке или администрировании.
-
Полная база данных SQLite хранится в одном межплатформенном файле на диске.
-
SQLite очень маленький и легкий, менее 400 КБ полностью сконфигурирован или менее 250 КБ без дополнительных функций.
-
SQLite является автономным, что означает отсутствие внешних зависимостей.
-
Транзакции SQLite полностью совместимы с ACID, что обеспечивает безопасный доступ из нескольких процессов или потоков.
-
SQLite поддерживает большинство функций языка запросов, представленных в стандарте SQL92 (SQL2).
-
SQLite написан на ANSI-C и предоставляет простой и удобный API.
-
SQLite доступен в UNIX (Linux, Mac OS-X, Android, iOS) и Windows (Win32, WinCE, WinRT).
SQLite не требует отдельного серверного процесса или системы для работы (без сервера).
SQLite поставляется с нулевой конфигурацией, что означает отсутствие необходимости в настройке или администрировании.
Полная база данных SQLite хранится в одном межплатформенном файле на диске.
SQLite очень маленький и легкий, менее 400 КБ полностью сконфигурирован или менее 250 КБ без дополнительных функций.
SQLite является автономным, что означает отсутствие внешних зависимостей.
Транзакции SQLite полностью совместимы с ACID, что обеспечивает безопасный доступ из нескольких процессов или потоков.
SQLite поддерживает большинство функций языка запросов, представленных в стандарте SQL92 (SQL2).
SQLite написан на ANSI-C и предоставляет простой и удобный API.
SQLite доступен в UNIX (Linux, Mac OS-X, Android, iOS) и Windows (Win32, WinCE, WinRT).
SQLite Краткая история
-
2000 — Д. Ричард Хипп разработал SQLite для администрирования программы, не требующей администрирования.
-
2000 — В августе выпущен SQLite 1.0 с GNU Database Manager.
-
2011 — Hipp объявил о добавлении интерфейса UNQl к базе данных SQLite и разработке UNQLite (базы данных, ориентированной на документы).
2000 — Д. Ричард Хипп разработал SQLite для администрирования программы, не требующей администрирования.
2000 — В августе выпущен SQLite 1.0 с GNU Database Manager.
2011 — Hipp объявил о добавлении интерфейса UNQl к базе данных SQLite и разработке UNQLite (базы данных, ориентированной на документы).
SQLite Ограничения
В SQLite есть несколько неподдерживаемых функций SQL92, которые перечислены в следующей таблице.
Sr.No. | Характеристика и описание |
---|---|
1 |
ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ Реализовано только LEFT OUTER JOIN. |
2 |
ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ Реализовано только LEFT OUTER JOIN. |
3 |
ALTER TABLE Поддерживаются варианты RENAME TABLE и ADD COLUMN команды ALTER TABLE. DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT не поддерживаются. |
4 |
Поддержка триггеров Триггеры FOR EACH ROW поддерживаются, но не триггеры FOR EACH STATEMENT. |
5 |
Просмотры Представления в SQLite доступны только для чтения. Вы не можете выполнять операторы DELETE, INSERT или UPDATE в представлении. |
6 |
Грант и отозвать Единственные права доступа, которые могут быть применены, — это обычные права доступа к файлам базовой операционной системы. |
ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ
Реализовано только LEFT OUTER JOIN.
ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ
Реализовано только LEFT OUTER JOIN.
ALTER TABLE
Поддерживаются варианты RENAME TABLE и ADD COLUMN команды ALTER TABLE. DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT не поддерживаются.
Поддержка триггеров
Триггеры FOR EACH ROW поддерживаются, но не триггеры FOR EACH STATEMENT.
Просмотры
Представления в SQLite доступны только для чтения. Вы не можете выполнять операторы DELETE, INSERT или UPDATE в представлении.
Грант и отозвать
Единственные права доступа, которые могут быть применены, — это обычные права доступа к файлам базовой операционной системы.
Команды SQLite
Стандартные команды SQLite для взаимодействия с реляционными базами данных аналогичны SQL. Это CREATE, SELECT, INSERT, UPDATE, DELETE и DROP. Эти команды могут быть классифицированы на группы в зависимости от их операционной природы —
DDL — язык определения данных
Sr.No. | Команда и описание |
---|---|
1 |
СОЗДАЙТЕ Создает новую таблицу, представление таблицы или другой объект в базе данных. |
2 |
ALTER Изменяет существующий объект базы данных, например таблицу. |
3 |
DROP Удаляет всю таблицу, представление таблицы или другого объекта в базе данных. |
СОЗДАЙТЕ
Создает новую таблицу, представление таблицы или другой объект в базе данных.
ALTER
Изменяет существующий объект базы данных, например таблицу.
DROP
Удаляет всю таблицу, представление таблицы или другого объекта в базе данных.
DML — язык манипулирования данными
Sr.No. | Команда и описание |
---|---|
1 |
ВСТАВИТЬ Создает запись |
2 |
ОБНОВИТЬ Изменяет записи |
3 |
УДАЛЯТЬ Удаляет записи |
ВСТАВИТЬ
Создает запись
ОБНОВИТЬ
Изменяет записи
УДАЛЯТЬ
Удаляет записи
DQL — язык запросов данных
Sr.No. | Команда и описание |
---|---|
1 |
ВЫБРАТЬ Извлекает определенные записи из одной или нескольких таблиц |
ВЫБРАТЬ
Извлекает определенные записи из одной или нескольких таблиц
SQLite — Установка
SQLite славится своей отличной функцией нулевой конфигурации, что означает, что не требуется сложной настройки или администрирования. Эта глава проведет вас через процесс настройки SQLite в Windows, Linux и Mac OS X.
Установите SQLite на Windows
-
Шаг 1 — Перейдите на страницу загрузки SQLite и загрузите предварительно скомпилированные двоичные файлы из раздела Windows.
-
Шаг 2 — Загрузите архивы sqlite-shell-win32 — *. Zip и sqlite-dll-win32 — *. Zip.
-
Шаг 3 — Создайте папку C: \> sqlite и разархивируйте два выше заархивированных файла в этой папке, которые предоставят вам файлы sqlite3.def, sqlite3.dll и sqlite3.exe.
-
Шаг 4. Добавьте C: \> sqlite в переменную среды PATH и, наконец, перейдите в командную строку и введите команду sqlite3, которая должна отобразить следующий результат.
Шаг 1 — Перейдите на страницу загрузки SQLite и загрузите предварительно скомпилированные двоичные файлы из раздела Windows.
Шаг 2 — Загрузите архивы sqlite-shell-win32 — *. Zip и sqlite-dll-win32 — *. Zip.
Шаг 3 — Создайте папку C: \> sqlite и разархивируйте два выше заархивированных файла в этой папке, которые предоставят вам файлы sqlite3.def, sqlite3.dll и sqlite3.exe.
Шаг 4. Добавьте C: \> sqlite в переменную среды PATH и, наконец, перейдите в командную строку и введите команду sqlite3, которая должна отобразить следующий результат.
C:\>sqlite3 SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
Установите SQLite на Linux
Сегодня почти все версии ОС Linux поставляются с SQLite. Поэтому вы просто вводите следующую команду, чтобы проверить, установлен ли на вашем компьютере SQLite.
$sqlite3 SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
Если вы не видите приведенный выше результат, это означает, что на вашем компьютере с Linux не установлен SQLite. Ниже приведены следующие шаги для установки SQLite:
-
Шаг 1 — Перейдите на страницу загрузки SQLite и загрузите sqlite-autoconf — *. Tar.gz из раздела исходного кода.
-
Шаг 2 — Запустите следующую команду —
Шаг 1 — Перейдите на страницу загрузки SQLite и загрузите sqlite-autoconf — *. Tar.gz из раздела исходного кода.
Шаг 2 — Запустите следующую команду —
$tar xvfz sqlite-autoconf-3071502.tar.gz $cd sqlite-autoconf-3071502 $./configure --prefix=/usr/local $make $make install
Приведенная выше команда завершится установкой SQLite на вашем компьютере с Linux. Что вы можете проверить, как описано выше.
Установите SQLite на Mac OS X
Хотя последняя версия Mac OS X предустановлена с SQLite, но если у вас нет доступной установки, просто выполните следующие шаги:
-
Шаг 1 — Перейдите на страницу загрузки SQLite и загрузите sqlite-autoconf — *. Tar.gz из раздела исходного кода.
-
Шаг 2 — Запустите следующую команду —
Шаг 1 — Перейдите на страницу загрузки SQLite и загрузите sqlite-autoconf — *. Tar.gz из раздела исходного кода.
Шаг 2 — Запустите следующую команду —
$tar xvfz sqlite-autoconf-3071502.tar.gz $cd sqlite-autoconf-3071502 $./configure --prefix=/usr/local $make $make install
Описанная выше процедура завершится установкой SQLite на компьютер Mac OS X. Что вы можете проверить, введя следующую команду —
$sqlite3 SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
Наконец, у вас есть командная строка SQLite, где вы можете вводить команды SQLite для ваших упражнений.
SQLite — Команды
Эта глава проведет вас через простые и полезные команды, используемые программистами SQLite. Эти команды называются точечными командами SQLite, и исключением из этих команд является то, что они не должны заканчиваться точкой с запятой (;).
Начнем с ввода простой командной строки sqlite3 в командной строке, которая предоставит вам командную строку SQLite, где вы будете вводить различные команды SQLite.
$sqlite3 SQLite version 3.3.6 Enter ".help" for instructions sqlite>
Для получения списка доступных точечных команд вы можете в любое время ввести «.help». Например —
sqlite>.help
Приведенная выше команда отобразит список различных важных команд точек SQLite, которые перечислены в следующей таблице.
Sr.No. | Команда и описание |
---|---|
1 |
.backup? БД? ФАЙЛ Резервное копирование БД (по умолчанию «основное») в ФАЙЛ |
2 |
.Bail ON | OFF Остановитесь после ошибки. По умолчанию выключено |
3 |
.databases Список имен и файлов прикрепленных баз данных |
4 |
.dump? TABLE? Дамп базы данных в текстовом формате SQL. Если указан TABLE, только таблицы дампа, соответствующие шаблону LIKE TABLE |
5 |
.echo ON | OFF Включить или отключить команду echo |
6 |
.выход Выйти из SQLite |
7 |
.explain ON | OFF Включите или выключите режим вывода, подходящий для EXPLAIN. Без аргументов, он включает EXPLAIN |
8 |
.header ВКЛ | ВЫКЛ Включить или отключить отображение заголовков |
9 |
.Помогите Показать это сообщение |
10 |
.import ФАЙЛ Импортировать данные из ФАЙЛА в ТАБЛИЦУ |
11 |
.indices? ТАБЛИЦА? Показать названия всех индексов. Если указано TABLE, показывать индексы только для таблиц, соответствующих шаблону LIKE TABLE |
12 |
.load ФАЙЛ? ВХОД? Загрузить библиотеку расширений |
13 |
.log FILE | off Включите или выключите регистрацию. ФАЙЛ может быть stderr / stdout |
14 |
РЕЖИМ .mode Установите режим вывода, где MODE является одним из —
|
15 |
.nullvalue STRING Вывести STRING вместо значений NULL |
16 |
.имя выходного файла Отправить вывод на FILENAME |
17 |
.output stdout Отправить вывод на экран |
18 |
.print STRING … Печать буквального STRING |
19 |
.prompt ГЛАВНАЯ ПРОДОЛЖИТЬ Заменить стандартные подсказки |
20 |
.уволиться Выйти из SQLite |
21 |
.read FILENAME Выполнить SQL в FILENAME |
22 |
.schema? TABLE? Покажите заявления CREATE. Если указан TABLE, показывать только таблицы, соответствующие шаблону LIKE TABLE |
23 |
.separator STRING Изменить разделитель, используемый режимом вывода и .import |
24 |
.шоу Показать текущие значения для различных настроек |
25 |
.stats ON | OFF Включить или выключить статистику |
26 |
.tables? PATTERN? Перечислите имена таблиц, соответствующих шаблону LIKE |
27 |
.timeout MS Попробуйте открыть заблокированные таблицы за миллисекунды MS |
28 |
.width NUM NUM Установить ширину столбца для режима «столбец» |
29 |
.timer ON | OFF Включить или выключить измерение таймера ЦП |
.backup? БД? ФАЙЛ
Резервное копирование БД (по умолчанию «основное») в ФАЙЛ
.Bail ON | OFF
Остановитесь после ошибки. По умолчанию выключено
.databases
Список имен и файлов прикрепленных баз данных
.dump? TABLE?
Дамп базы данных в текстовом формате SQL. Если указан TABLE, только таблицы дампа, соответствующие шаблону LIKE TABLE
.echo ON | OFF
Включить или отключить команду echo
.выход
Выйти из SQLite
.explain ON | OFF
Включите или выключите режим вывода, подходящий для EXPLAIN. Без аргументов, он включает EXPLAIN
.header ВКЛ | ВЫКЛ
Включить или отключить отображение заголовков
.Помогите
Показать это сообщение
.import ФАЙЛ
Импортировать данные из ФАЙЛА в ТАБЛИЦУ
.indices? ТАБЛИЦА?
Показать названия всех индексов. Если указано TABLE, показывать индексы только для таблиц, соответствующих шаблону LIKE TABLE
.load ФАЙЛ? ВХОД?
Загрузить библиотеку расширений
.log FILE | off
Включите или выключите регистрацию. ФАЙЛ может быть stderr / stdout
РЕЖИМ .mode
Установите режим вывода, где MODE является одним из —
CSV — значения, разделенные запятыми
column — Выровненные по левому краю столбцы.
HTML — HTML <таблица> код
insert — операторы вставки SQL для TABLE
строка — одно значение в строке
list — значения, разделенные строкой .separator
вкладки — значения, разделенные табуляцией
tcl — элементы списка TCL
.nullvalue STRING
Вывести STRING вместо значений NULL
.имя выходного файла
Отправить вывод на FILENAME
.output stdout
Отправить вывод на экран
.print STRING …
Печать буквального STRING
.prompt ГЛАВНАЯ ПРОДОЛЖИТЬ
Заменить стандартные подсказки
.уволиться
Выйти из SQLite
.read FILENAME
Выполнить SQL в FILENAME
.schema? TABLE?
Покажите заявления CREATE. Если указан TABLE, показывать только таблицы, соответствующие шаблону LIKE TABLE
.separator STRING
Изменить разделитель, используемый режимом вывода и .import
.шоу
Показать текущие значения для различных настроек
.stats ON | OFF
Включить или выключить статистику
.tables? PATTERN?
Перечислите имена таблиц, соответствующих шаблону LIKE
.timeout MS
Попробуйте открыть заблокированные таблицы за миллисекунды MS
.width NUM NUM
Установить ширину столбца для режима «столбец»
.timer ON | OFF
Включить или выключить измерение таймера ЦП
Давайте попробуем команду .show, чтобы увидеть настройки по умолчанию для вашей командной строки SQLite.
sqlite>.show echo: off explain: off headers: off mode: column nullvalue: "" output: stdout separator: "|" width: sqlite>
Убедитесь, что между командой sqlite> prompt и dot нет пробела, иначе она не будет работать.
Форматирование вывода
Вы можете использовать следующую последовательность точечных команд для форматирования вывода.
sqlite>.header on sqlite>.mode column sqlite>.timer on sqlite>
Приведенная выше настройка произведет вывод в следующем формате.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 CPU Time: user 0.000000 sys 0.000000
Стол sqlite_master
Основная таблица содержит ключевую информацию о таблицах вашей базы данных и называется sqlite_master . Вы можете увидеть его схему следующим образом —
sqlite>.schema sqlite_master
Это даст следующий результат.
CREATE TABLE sqlite_master ( type text, name text, tbl_name text, rootpage integer, sql text );
SQLite — Синтаксис
За SQLite следует уникальный набор правил и рекомендаций, называемых синтаксисом. В этой главе перечислены все основные синтаксис SQLite.
Чувствительность к регистру
Важно отметить, что SQLite нечувствителен к регистру , но есть некоторые команды, которые чувствительны к регистру, например, GLOB и glob имеют разные значения в операторах SQLite.
Комментарии
Комментарии SQLite — это дополнительные примечания, которые вы можете добавить в свой код SQLite для повышения его читабельности, и они могут появляться где угодно; Пробелы могут возникать, в том числе внутри выражений и в середине других операторов SQL, но они не могут быть вложенными.
Комментарии SQL начинаются с двух последовательных символов «-» (ASCII 0x2d) и продолжаются вплоть до следующего символа новой строки (ASCII 0x0a) или до конца ввода, в зависимости от того, что произойдет раньше.
Вы также можете использовать комментарии в стиле C, которые начинаются с «/ *» и продолжаются вплоть до следующей пары символов «* /» включительно или до конца ввода, в зависимости от того, что наступит раньше. Комментарии в стиле C могут занимать несколько строк.
sqlite> .help -- This is a single line comment
SQLite заявления
Все операторы SQLite начинаются с любого из ключевых слов, таких как SELECT, INSERT, UPDATE, DELETE, ALTER, DROP и т. Д., И все операторы заканчиваются точкой с запятой (;).
SQLite ANALYZE Заявление
ANALYZE; or ANALYZE database_name; or ANALYZE database_name.table_name;
SQLite И / ИЛИ Предложение
SELECT column1, column2....columnN FROM table_name WHERE CONDITION-1 {AND|OR} CONDITION-2;
SQLite ALTER TABLE Заявление
ALTER TABLE table_name ADD COLUMN column_def...;
SQLite ALTER TABLE Statement (переименовать)
ALTER TABLE table_name RENAME TO new_table_name;
SQLite ATTACH DATABASE Заявление
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';
SQLite НАЧАЛО ОПЕРАЦИИ
BEGIN; or BEGIN EXCLUSIVE TRANSACTION;
SQLite между предложением
SELECT column1, column2....columnN FROM table_name WHERE column_name BETWEEN val-1 AND val-2;
SQLite COMMIT Заявление
COMMIT;
SQLite CREATE INDEX Заявление
CREATE INDEX index_name ON table_name ( column_name COLLATE NOCASE );
SQLite CREATE UNIQUE INDEX Заявление
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...columnN);
SQLite CREATE TABLE Заявление
CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( one or more columns ) );
SQLite CREATE TRIGGER Заявление
CREATE TRIGGER database_name.trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN stmt1; stmt2; .... END;
SQLite CREATE VIEW Заявление
CREATE VIEW database_name.view_name AS SELECT statement....;
SQLite CREATE VIRTUAL TABLE Заявление
CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log ); or CREATE VIRTUAL TABLE database_name.table_name USING fts3( );
Оператор транзакций SQLite
COMMIT;
SQLite COUNT Clause
SELECT COUNT(column_name) FROM table_name WHERE CONDITION;
SQLite DELETE Заявление
DELETE FROM table_name WHERE {CONDITION};
SQLite DETACH DATABASE Заявление
DETACH DATABASE 'Alias-Name';
SQLite DISTINCT предложение
SELECT DISTINCT column1, column2....columnN FROM table_name;
SQLite DROP INDEX Заявление
DROP INDEX database_name.index_name;
SQLite DROP TABLE Заявление
DROP TABLE database_name.table_name;
SQLite DROP VIEW
DROP INDEX database_name.view_name;
SQLite DROP TRIGGER Заявление
DROP INDEX database_name.trigger_name;
SQLite EXISTS пункт
SELECT column1, column2....columnN FROM table_name WHERE column_name EXISTS (SELECT * FROM table_name );
SQLite EXPLAIN Заявление
EXPLAIN INSERT statement...; or EXPLAIN QUERY PLAN SELECT statement...;
SQLite GLOB Clause
SELECT column1, column2....columnN FROM table_name WHERE column_name GLOB { PATTERN };
SQLite GROUP BY Предложение
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name;
SQLite HAVING пункт
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name HAVING (arithematic function condition);
SQLite INSERT INTO Заявление
INSERT INTO table_name( column1, column2....columnN) VALUES ( value1, value2....valueN);
SQLite IN Clause
SELECT column1, column2....columnN FROM table_name WHERE column_name IN (val-1, val-2,...val-N);
SQLite Like Clause
SELECT column1, column2....columnN FROM table_name WHERE column_name LIKE { PATTERN };
SQLite NOT IN
SELECT column1, column2....columnN FROM table_name WHERE column_name NOT IN (val-1, val-2,...val-N);
SQLite ORDER BY Предложение
SELECT column1, column2....columnN FROM table_name WHERE CONDITION ORDER BY column_name {ASC|DESC};
SQLite PRAGMA Заявление
PRAGMA pragma_name; For example: PRAGMA page_size; PRAGMA cache_size = 1024; PRAGMA table_info(table_name);
SQLite RELEASE SAVEPOINT Заявление
RELEASE savepoint_name;
SQLite REINDEX Заявление
REINDEX collation_name; REINDEX database_name.index_name; REINDEX database_name.table_name;
SQLite ROLLBACK Заявление
ROLLBACK; or ROLLBACK TO SAVEPOINT savepoint_name;
SQLite SAVEPOINT Заявление
SAVEPOINT savepoint_name;
SQLite оператор SELECT
SELECT column1, column2....columnN FROM table_name;
SQLite ОБНОВЛЕНИЕ Заявление
UPDATE table_name SET column1 = value1, column2 = value2....columnN=valueN [ WHERE CONDITION ];
SQLite VACUUM Заявление
VACUUM;
SQLite WHERE
SELECT column1, column2....columnN FROM table_name WHERE CONDITION;
SQLite — Тип данных
Тип данных SQLite — это атрибут, который определяет тип данных любого объекта. Каждый столбец, переменная и выражение имеют связанный тип данных в SQLite.
Вы будете использовать эти типы данных при создании таблиц. SQLite использует более общую систему динамических типов. В SQLite тип данных значения связан с самим значением, а не с его контейнером.
Классы хранения SQLite
Каждое значение, хранящееся в базе данных SQLite, имеет один из следующих классов хранения:
Sr.No. | Класс хранения и описание |
---|---|
1 |
НОЛЬ Значение является значением NULL. |
2 |
INTEGER Значение представляет собой целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения. |
3 |
РЕАЛЬНЫЙ Значение является значением с плавающей запятой, хранящимся как 8-байтовое число с плавающей запятой IEEE. |
4 |
ТЕКСТ Значение представляет собой текстовую строку, сохраненную с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE) |
5 |
большой двоичный объект Значение представляет собой блок данных, хранящийся в точности так, как он был введен. |
НОЛЬ
Значение является значением NULL.
INTEGER
Значение представляет собой целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.
РЕАЛЬНЫЙ
Значение является значением с плавающей запятой, хранящимся как 8-байтовое число с плавающей запятой IEEE.
ТЕКСТ
Значение представляет собой текстовую строку, сохраненную с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE)
большой двоичный объект
Значение представляет собой блок данных, хранящийся в точности так, как он был введен.
Класс хранения SQLite немного более общий, чем тип данных. Например, класс хранения INTEGER включает в себя 6 различных типов целочисленных типов данных различной длины.
Тип близости SQLite
SQLite поддерживает концепцию соответствия типов для столбцов. В любом столбце могут храниться данные любого типа, но предпочтительный класс хранения для столбца называется его сродством . Каждому столбцу таблицы в базе данных SQLite3 назначается одно из следующих сходств типов:
Sr.No. | Сходство и описание |
---|---|
1 |
ТЕКСТ В этом столбце хранятся все данные с использованием классов хранения NULL, TEXT или BLOB. |
2 |
NUMERIC Этот столбец может содержать значения, используя все пять классов хранения. |
3 |
INTEGER Ведет себя так же, как столбец со сходством NUMERIC, за исключением выражения CAST. |
4 |
РЕАЛЬНЫЙ Ведет себя как столбец с NUMERIC сходством, за исключением того, что он приводит целочисленные значения к представлению с плавающей запятой. |
5 |
НИКТО Столбец со схожестью NONE не предпочитает один класс хранения другому, и не предпринимается никаких попыток привести данные из одного класса хранения в другой. |
ТЕКСТ
В этом столбце хранятся все данные с использованием классов хранения NULL, TEXT или BLOB.
NUMERIC
Этот столбец может содержать значения, используя все пять классов хранения.
INTEGER
Ведет себя так же, как столбец со сходством NUMERIC, за исключением выражения CAST.
РЕАЛЬНЫЙ
Ведет себя как столбец с NUMERIC сходством, за исключением того, что он приводит целочисленные значения к представлению с плавающей запятой.
НИКТО
Столбец со схожестью NONE не предпочитает один класс хранения другому, и не предпринимается никаких попыток привести данные из одного класса хранения в другой.
Сходство SQLite и имена типов
В следующей таблице перечислены различные имена типов данных, которые можно использовать при создании таблиц SQLite3 с соответствующей примененной привязкой.
Тип данных | близость |
---|---|
|
INTEGER |
|
ТЕКСТ |
|
НИКТО |
|
РЕАЛЬНЫЙ |
|
NUMERIC |
Логический тип данных
SQLite не имеет отдельного булева класса хранения. Вместо этого логические значения сохраняются как целые числа 0 (ложь) и 1 (истина).
Дата и время Тип данных
SQLite не имеет отдельного класса хранения для хранения дат и / или времени, но SQLite способен хранить даты и время в виде значений TEXT, REAL или INTEGER.
Sr.No. | Класс хранения и формат даты |
---|---|
1 |
ТЕКСТ Дата в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС» |
2 |
РЕАЛЬНЫЙ Количество дней с полудня в Гринвиче 24 ноября 4714 г. до н.э. |
3 |
INTEGER Количество секунд с 1970-01-01 00:00:00 UTC |
ТЕКСТ
Дата в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС»
РЕАЛЬНЫЙ
Количество дней с полудня в Гринвиче 24 ноября 4714 г. до н.э.
INTEGER
Количество секунд с 1970-01-01 00:00:00 UTC
Вы можете хранить даты и время в любом из этих форматов и свободно конвертировать между форматами, используя встроенные функции даты и времени.
SQLite — создание базы данных
В SQLite команда sqlite3 используется для создания новой базы данных SQLite. Вам не нужно иметь никаких особых привилегий для создания базы данных.
Синтаксис
Ниже приведен основной синтаксис команды sqlite3 для создания базы данных:
$sqlite3 DatabaseName.db
Всегда имя базы данных должно быть уникальным в СУБД.
пример
Если вы хотите создать новую базу данных <testDB.db>, оператор SQLITE3 будет выглядеть следующим образом:
$sqlite3 testDB.db SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
Приведенная выше команда создаст файл testDB.db в текущем каталоге. Этот файл будет использоваться в качестве базы данных движком SQLite. Если вы заметили это при создании базы данных, команда sqlite3 предоставит приглашение sqlite> после успешного создания файла базы данных.
После создания базы данных ее можно проверить в списке баз данных с помощью следующей команды SQLite .databases .
sqlite>.databases seq name file --- --------------- ---------------------- 0 main /home/sqlite/testDB.db
Вы будете использовать команду SQLite .quit, чтобы выйти из приглашения sqlite следующим образом:
sqlite>.quit $
Команда .dump
Вы можете использовать команду .dump dot для экспорта всей базы данных в текстовый файл, используя следующую команду SQLite в командной строке.
$sqlite3 testDB.db .dump > testDB.sql
Приведенная выше команда преобразует все содержимое базы данных testDB.db в операторы SQLite и помещает его в текстовый файл ASCII testDB.sql . Вы можете выполнить восстановление из сгенерированного testDB.sql простым способом:
$sqlite3 testDB.db < testDB.sql
В данный момент ваша база данных пуста, так что вы можете попробовать две выше процедуры, если у вас есть несколько таблиц и данных в вашей базе данных. А пока давайте перейдем к следующей главе.
SQLite — база данных ATTACH
Рассмотрим случай, когда у вас есть несколько доступных баз данных, и вы хотите использовать любую из них одновременно. Оператор SQLite ATTACH DATABASE используется для выбора конкретной базы данных, и после этой команды все операторы SQLite будут выполняться в присоединенной базе данных.
Синтаксис
Ниже приведен основной синтаксис оператора SQLite ATTACH DATABASE.
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';
Приведенная выше команда также создаст базу данных в случае, если база данных уже не создана, в противном случае она просто прикрепит имя файла базы данных с логической базой данных «Alias-Name».
пример
Если вы хотите присоединить существующую базу данных testDB.db , оператор ATTACH DATABASE будет выглядеть следующим образом:
sqlite> ATTACH DATABASE 'testDB.db' as 'TEST';
Используйте команду SQLite .database для отображения прикрепленной базы данных.
sqlite> .database seq name file --- --------------- ---------------------- 0 main /home/sqlite/testDB.db 2 test /home/sqlite/testDB.db
Имена базы данных main и temp зарезервированы для первичной базы данных и базы данных для хранения временных таблиц и других временных объектов данных. Оба эти имени базы данных существуют для каждого подключения к базе данных и не должны использоваться для вложения, в противном случае вы получите следующее предупреждающее сообщение.
sqlite> ATTACH DATABASE 'testDB.db' as 'TEMP'; Error: database TEMP is already in use sqlite> ATTACH DATABASE 'testDB.db' as 'main'; Error: database TEMP is already in use
SQLite — база данных DETACH
Оператор SQLite DETACH DATABASE используется для отсоединения и отсоединения именованной базы данных от соединения с базой данных, которое ранее было присоединено с помощью оператора ATTACH. Если один и тот же файл базы данных был присоединен с несколькими псевдонимами, команда DETACH отключит только указанное имя, а остальная часть вложения все равно продолжится. Вы не можете отсоединить основную или временную базы данных.
Если база данных является оперативной или временной, база данных будет уничтожена, а ее содержимое потеряно.
Синтаксис
Ниже приведен основной синтаксис оператора SQLite DETACH DATABASE «Alias-Name».
DETACH DATABASE 'Alias-Name';
Здесь «Alias-Name» — это тот же псевдоним, который вы использовали при подключении базы данных с помощью оператора ATTACH.
пример
Предположим, у вас есть база данных, которую вы создали в предыдущей главе и прикрепили к ней «test» и «currentDB», как мы видим с помощью команды .database .
sqlite>.databases seq name file --- --------------- ---------------------- 0 main /home/sqlite/testDB.db 2 test /home/sqlite/testDB.db 3 currentDB /home/sqlite/testDB.db
Давайте попробуем отсоединить currentDB от testDB.db, используя следующую команду.
sqlite> DETACH DATABASE 'currentDB';
Теперь, если вы проверите текущее вложение, вы обнаружите, что testDB.db по-прежнему связан с «test» и «main».
sqlite>.databases seq name file --- --------------- ---------------------- 0 main /home/sqlite/testDB.db 2 test /home/sqlite/testDB.db
SQLite — создать таблицу
Оператор SQLite CREATE TABLE используется для создания новой таблицы в любой из заданных баз данных. Создание базовой таблицы включает в себя наименование таблицы и определение ее столбцов и типа данных каждого столбца.
Синтаксис
Ниже приведен основной синтаксис оператора CREATE TABLE.
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype, column3 datatype, ..... columnN datatype );
CREATE TABLE — это ключевое слово, указывающее системе базы данных создать новую таблицу. Уникальное имя или идентификатор таблицы следует за оператором CREATE TABLE. При желании вы можете указать имя_базы_данных вместе с именем_таблицы .
пример
Ниже приведен пример, который создает таблицу COMPANY с ID в качестве первичного ключа, а NOT NULL — это ограничения, показывающие, что эти поля не могут иметь значение NULL при создании записей в этой таблице.
sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Давайте создадим еще одну таблицу, которую мы будем использовать в наших упражнениях в последующих главах.
sqlite> CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL );
Вы можете проверить, была ли ваша таблица создана успешно, с помощью команды SQLite .tables , которая будет использоваться для вывода списка всех таблиц в присоединенной базе данных.
sqlite>.tables COMPANY DEPARTMENT
Здесь вы можете дважды увидеть таблицу COMPANY, потому что она показывает таблицу COMPANY для основной базы данных и таблицу test.COMPANY для псевдонима ‘test’, созданного для вашего testDB.db. Вы можете получить полную информацию о таблице, используя следующую команду SQLite .schema .
sqlite>.schema COMPANY CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
SQLite — DROP Table
Оператор SQLite DROP TABLE используется для удаления определения таблицы и всех связанных данных, индексов, триггеров, ограничений и спецификаций разрешений для этой таблицы.
Вы должны быть осторожны при использовании этой команды, потому что после удаления таблицы вся доступная в ней информация также будет потеряна навсегда.
Синтаксис
Ниже приведен основной синтаксис оператора DROP TABLE. При желании вы можете указать имя базы данных вместе с именем таблицы следующим образом:
DROP TABLE database_name.table_name;
пример
Давайте сначала проверим таблицу COMPANY, а затем удалим ее из базы данных.
sqlite>.tables COMPANY test.COMPANY
Это означает, что таблица COMPANY доступна в базе данных, поэтому давайте отбросим ее следующим образом:
sqlite>DROP TABLE COMPANY; sqlite>
Теперь, если вы попробуете команду .TABLES, то вы больше не найдете таблицу COMPANY.
sqlite>.tables sqlite>
Он не показывает ничего, что означает, что таблица из вашей базы данных была успешно удалена.
SQLite — INSERT Query
SQLite INSERT INTO Statement используется для добавления новых строк данных в таблицу в базе данных.
Синтаксис
Ниже приведены два основных синтаксиса оператора INSERT INTO.
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN);
Здесь column1, column2, … columnN — это имена столбцов в таблице, в которую вы хотите вставить данные.
Вам может не потребоваться указывать имя столбца (-ов) в запросе SQLite, если вы добавляете значения для всех столбцов таблицы. Однако убедитесь, что порядок значений соответствует порядку столбцов в таблице. Синтаксис SQLite INSERT INTO будет выглядеть следующим образом:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
пример
Предположим, что вы уже создали таблицу COMPANY в своем testDB.db следующим образом:
sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Теперь следующие операторы создадут шесть записей в таблице COMPANY.
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (5, 'David', 27, 'Texas', 85000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
Вы можете создать запись в таблице COMPANY, используя второй синтаксис:
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
Все вышеперечисленные утверждения создадут следующие записи в таблице COMPANY. В следующей главе вы узнаете, как отображать все эти записи из таблицы.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Заполните одну таблицу, используя другую таблицу
Вы можете заполнить данные в таблице с помощью оператора select для другой таблицы, при условии, что в другой таблице есть набор полей, которые необходимы для заполнения первой таблицы. Вот синтаксис —
INSERT INTO first_table_name [(column1, column2, ... columnN)] SELECT column1, column2, ...columnN FROM second_table_name [WHERE condition];
Пока вы можете пропустить приведенное выше утверждение. Сначала давайте изучим предложения SELECT и WHERE, которые будут рассмотрены в следующих главах.
SQLite — SELECT Query
Оператор SQLite SELECT используется для извлечения данных из таблицы базы данных SQLite, которая возвращает данные в форме таблицы результатов. Эти таблицы результатов также называются наборами результатов .
Синтаксис
Ниже приведен основной синтаксис оператора SQLite SELECT.
SELECT column1, column2, columnN FROM table_name;
Здесь column1, column2 … это поля таблицы, значения которых вы хотите получить. Если вы хотите получить все поля, доступные в этом поле, вы можете использовать следующий синтаксис:
SELECT * FROM table_name;
пример
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример для извлечения и отображения всех этих записей с помощью инструкции SELECT. Здесь первые три команды были использованы для установки правильно отформатированного вывода.
sqlite>.header on sqlite>.mode column sqlite> SELECT * FROM COMPANY;
Наконец, вы получите следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Если вы хотите получить только выбранные поля таблицы COMPANY, используйте следующий запрос —
sqlite> SELECT ID, NAME, SALARY FROM COMPANY;
Приведенный выше запрос даст следующий результат.
ID NAME SALARY ---------- ---------- ---------- 1 Paul 20000.0 2 Allen 15000.0 3 Teddy 20000.0 4 Mark 65000.0 5 David 85000.0 6 Kim 45000.0 7 James 10000.0
Настройка ширины выходного столбца
Иногда вы сталкиваетесь с проблемой, связанной с усеченным выводом в случае столбца .mode, который возникает из-за ширины отображаемого столбца по умолчанию. Что вы можете сделать, так это установить ширину отображаемого столбца с помощью команды .width num, num …. следующим образом:
sqlite>.width 10, 20, 10 sqlite>SELECT * FROM COMPANY;
Приведенная выше команда .width устанавливает ширину первого столбца равной 10, ширину второго столбца равным 20, а ширину третьего столбца равным 10. Наконец, вышеприведенный оператор SELECT даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- -------------------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Схема Информация
Поскольку все точечные команды доступны в приглашении SQLite, следовательно, при программировании с SQLite вы будете использовать следующую инструкцию SELECT с таблицей sqlite_master, чтобы перечислить все таблицы, созданные в вашей базе данных.
sqlite> SELECT tbl_name FROM sqlite_master WHERE type = 'table';
Предполагая, что в вашем testDB.db есть только таблица COMPANY, это даст следующий результат.
tbl_name ---------- COMPANY
Вы можете перечислить полную информацию о таблице КОМПАНИИ следующим образом —
sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';
Предполагая, что в вашем testDB.db есть только таблица COMPANY, это даст следующий результат.
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL )
SQLite — Операторы
Что такое оператор в SQLite?
Оператор — это зарезервированное слово или символ, используемый в основном в предложении WHERE оператора SQLite для выполнения операций, таких как сравнения и арифметические операции.
Операторы используются для указания условий в операторе SQLite и в качестве союзов для нескольких условий в операторе.
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Битовые операторы
SQLite Арифметические Операторы
Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда арифметические операторы SQLite будут использоваться следующим образом:
оператор | Описание | пример |
---|---|---|
+ (Дополнение) | Добавляет значения по обе стороны от оператора | а + б даст 30 |
— (вычитание) | Вычитает правый операнд из левого операнда | а — б даст -10 |
* (Умножение) | Умножает значения по обе стороны от оператора | а * б даст 200 |
/ (Отдел) | Делит левый операнд на правый операнд | б / у даст 2 |
% (Модуль) | Делит левый операнд на правый и возвращает остаток | б% а даст 0 |
Операторы сравнения SQLite
Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда операторы сравнения SQLite будут использоваться следующим образом
оператор | Описание | пример |
---|---|---|
== | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (a == b) не соответствует действительности. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (а = б) не соответствует действительности. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если значения не равны, то условие становится истинным. | (a! = b) верно. |
<> | Проверяет, равны ли значения двух операндов или нет, если значения не равны, то условие становится истинным. | (а <> б) верно. |
> | Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, то условие становится истинным. | (а> б) не соответствует действительности. |
< | Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, то условие становится истинным. | (а <б) верно. |
> = | Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, то условие становится истинным. | (a> = b) не соответствует действительности. |
<= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. | (a <= b) верно. |
<! | Проверяет, является ли значение левого операнда не меньше значения правого операнда, если да, тогда условие становится истинным. | (a! <b) ложно. |
!> | Проверяет, не превышает ли значение левого операнда значение правого операнда, и если да, то условие становится истинным. | (а!> б) это правда. |
SQLite логические операторы
Вот список всех логических операторов, доступных в SQLite.
Sr.No. | Оператор и описание |
---|---|
1 |
А ТАКЖЕ Оператор AND допускает существование нескольких условий в предложении WHERE оператора SQL. |
2 |
МЕЖДУ Оператор BETWEEN используется для поиска значений, которые находятся в пределах набора значений, учитывая минимальное значение и максимальное значение. |
3 |
СУЩЕСТВУЕТ Оператор EXISTS используется для поиска наличия строки в указанной таблице, которая соответствует определенным критериям. |
4 |
В Оператор IN используется для сравнения значения со списком литеральных значений, которые были указаны. |
5 |
НЕ В Оператор отрицания IN, который используется для сравнения значения со списком литеральных значений, которые были указаны. |
6 |
ЛАЙК Оператор LIKE используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов. |
7 |
GLOB Оператор GLOB используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов. Кроме того, GLOB чувствителен к регистру, в отличие от LIKE. |
8 |
НЕ Оператор NOT меняет значение логического оператора, с которым он используется. Например. НЕ СУЩЕСТВУЕТ, НЕ МЕЖДУ, НЕ ВНУТРИ и т. Д. Это оператор отрицания. |
9 |
ИЛИ ЖЕ Оператор OR используется для объединения нескольких условий в предложении WHERE оператора SQL. |
10 |
НУЛЕВОЙ Оператор NULL используется для сравнения значения со значением NULL. |
11 |
ЯВЛЯЕТСЯ Оператор IS работает как = |
12 |
НЕ ЯВЛЯЕТСЯ Оператор IS работает как! = |
13 |
|| Добавляет две разные строки и создает новую. |
14 |
УНИКАЛЬНАЯ Оператор UNIQUE ищет в каждой строке указанной таблицы уникальность (без дубликатов). |
А ТАКЖЕ
Оператор AND допускает существование нескольких условий в предложении WHERE оператора SQL.
МЕЖДУ
Оператор BETWEEN используется для поиска значений, которые находятся в пределах набора значений, учитывая минимальное значение и максимальное значение.
СУЩЕСТВУЕТ
Оператор EXISTS используется для поиска наличия строки в указанной таблице, которая соответствует определенным критериям.
В
Оператор IN используется для сравнения значения со списком литеральных значений, которые были указаны.
НЕ В
Оператор отрицания IN, который используется для сравнения значения со списком литеральных значений, которые были указаны.
ЛАЙК
Оператор LIKE используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов.
GLOB
Оператор GLOB используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов. Кроме того, GLOB чувствителен к регистру, в отличие от LIKE.
НЕ
Оператор NOT меняет значение логического оператора, с которым он используется. Например. НЕ СУЩЕСТВУЕТ, НЕ МЕЖДУ, НЕ ВНУТРИ и т. Д. Это оператор отрицания.
ИЛИ ЖЕ
Оператор OR используется для объединения нескольких условий в предложении WHERE оператора SQL.
НУЛЕВОЙ
Оператор NULL используется для сравнения значения со значением NULL.
ЯВЛЯЕТСЯ
Оператор IS работает как =
НЕ ЯВЛЯЕТСЯ
Оператор IS работает как! =
||
Добавляет две разные строки и создает новую.
УНИКАЛЬНАЯ
Оператор UNIQUE ищет в каждой строке указанной таблицы уникальность (без дубликатов).
Битовые операторы SQLite
Побитовый оператор работает с битами и выполняет побитовую операцию. Ниже приведена таблица истинности для & и | ,
п | Q | P & Q | р | Q |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
Предположим, если А = 60; и B = 13, то в двоичном формате они будут выглядеть следующим образом —
A = 0011 1100
B = 0000 1101
——————
A & B = 0000 1100
A | B = 0011 1101
~ A = 1100 0011
Побитовые операторы, поддерживаемые языком SQLite, перечислены в следующей таблице. Предположим, что переменная A содержит 60, а переменная B содержит 13, тогда —
оператор | Описание | пример |
---|---|---|
& | Двоичный оператор AND немного копирует результат, если он существует в обоих операндах. | (A & B) даст 12, что 0000 1100 |
| | Оператор двоичного ИЛИ копирует немного, если он существует в любом из операндов. | (A | B) даст 61, что составляет 0011 1101 |
~ | Оператор дополнения двоичных единиц является унарным и имеет эффект «переворачивания» битов. | (~ A) даст -61, что составляет 1100 0011 в форме дополнения 2 из-за двоичного числа со знаком |
<< | Двоичный оператор левого сдвига. Значение левого операнда перемещается влево на количество битов, указанное правым операндом. | << 2 даст 240, что составляет 1111 0000 |
>> | Оператор двоичного правого сдвига. Значение левого операнда перемещается вправо на количество битов, указанное правым операндом. | A >> 2 даст 15, что 0000 1111 |
SQLite — выражения
Выражение представляет собой комбинацию одного или нескольких значений, операторов и функций SQL, которые оценивают значение.
Выражения SQL похожи на формулы и написаны на языке запросов. Вы также можете использовать для запроса базы данных для определенного набора данных.
Синтаксис
Рассмотрим основной синтаксис оператора SELECT следующим образом:
SELECT column1, column2, columnN FROM table_name WHERE [CONDITION | EXPRESSION];
Ниже приведены различные типы выражений SQLite.
SQLite — логические выражения
Булевы выражения SQLite извлекают данные на основе сопоставления одного значения. Ниже приводится синтаксис —
SELECT column1, column2, columnN FROM table_name WHERE SINGLE VALUE MATCHTING EXPRESSION;
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведены простые примеры, показывающие использование логических выражений SQLite:
sqlite> SELECT * FROM COMPANY WHERE SALARY = 10000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 James 24 Houston 10000.0
SQLite — Числовое выражение
Эти выражения используются для выполнения любой математической операции в любом запросе. Ниже приводится синтаксис —
SELECT numerical_expression as OPERATION_NAME [FROM table_name WHERE CONDITION] ;
Здесь числовое выражение используется для математического выражения или любой формулы. Ниже приведен простой пример использования числовых выражений SQLite.
sqlite> SELECT (15 + 6) AS ADDITION ADDITION = 21
Существует несколько встроенных функций, таких как avg (), sum (), count () и т. Д., Для выполнения так называемых вычислений агрегированных данных по таблице или конкретному столбцу таблицы.
sqlite> SELECT COUNT(*) AS "RECORDS" FROM COMPANY; RECORDS = 7
SQLite — выражения даты
Выражения даты возвращают текущие системные значения даты и времени. Эти выражения используются в различных манипуляциях с данными.
sqlite> SELECT CURRENT_TIMESTAMP; CURRENT_TIMESTAMP = 2013-03-17 10:43:35
SQLite — предложение WHERE
Предложение SQLite WHERE используется для указания условия при извлечении данных из одной или нескольких таблиц.
Если данное условие выполнено, значит true, тогда оно возвращает конкретное значение из таблицы. Вам придется использовать предложение WHERE для фильтрации записей и выборки только необходимых записей.
Предложение WHERE не только используется в операторе SELECT, но также используется в операторе UPDATE, DELETE и т. Д., Которые будут рассмотрены в последующих главах.
Синтаксис
Ниже приведен основной синтаксис оператора SQLite SELECT с предложением WHERE.
SELECT column1, column2, columnN FROM table_name WHERE [condition]
пример
Вы можете указать условие, используя Сравнение или Логические операторы, такие как>, <, =, LIKE, NOT и т. Д. Рассмотрим таблицу COMPANY со следующими записями:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведены простые примеры, показывающие использование логических операторов SQLite. В следующем операторе SELECT перечислены все записи, в которых AGE больше или равно 25 И зарплата больше или равна 65000,00.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
В следующем операторе SELECT перечислены все записи, где AGE больше или равно 25 ИЛИ оклад больше или равен 65000.00.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
После инструкции SELECT перечисляются все записи, где AGE не равно NULL, что означает все записи, поскольку ни одна из записей не имеет AGE, равный NULL.
sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
После инструкции SELECT перечисляются все записи, где NAME начинается с «Ki», не имеет значения, что следует за «Ki».
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
После инструкции SELECT перечисляются все записи, где NAME начинается с «Ki», не имеет значения, что следует за «Ki».
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
После оператора SELECT перечисляются все записи, где значение AGE равно 25 или 27.
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 ); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
После инструкции SELECT перечисляются все записи, где значение AGE не равно ни 25, ни 27.
sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 ); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
В следующем операторе SELECT перечислены все записи, в которых значение AGE находится между 25 и 27.
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
В следующем операторе SELECT используется подзапрос SQL, где подзапрос находит все записи с полем AGE, имеющим SALARY> 65000 и более поздних, с помощью оператора WHERE вместе с оператором EXISTS для вывода списка всех записей, где существует AGE из внешнего запроса. в результате, возвращаемом подзапросом —
sqlite> SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); AGE ---------- 32 25 23 25 27 22 24
В следующем операторе SELECT используется подзапрос SQL, в котором подзапрос находит все записи с полем AGE, имеющим SALARY> 65000 и более поздних, с помощью оператора WHERE вместе с оператором> для вывода списка всех записей, где AGE из внешнего запроса больше. чем возраст в результате, возвращаемом подзапросом.
sqlite> SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0
SQLite — И & ИЛИ Операторы
Операторы SQLite И & ИЛИ используются для компиляции нескольких условий для сужения выбранных данных в операторе SQLite. Эти два оператора называются конъюнктивными операторами .
Эти операторы предоставляют возможность сделать несколько сравнений с разными операторами в одном и том же операторе SQLite.
Оператор AND
Оператор AND допускает существование нескольких условий в предложении WHERE оператора SQLite. При использовании оператора AND полное условие будет считаться истинным, если все условия выполняются. Например, [условие1] И [условие2] будет истинным, только когда оба условия1 и условие2 будут истинными.
Синтаксис
Ниже приведен основной синтаксис оператора AND с предложением WHERE.
SELECT column1, column2, columnN FROM table_name WHERE [condition1] AND [condition2]...AND [conditionN];
Вы можете объединить N условий с помощью оператора AND. Для действия, выполняемого оператором SQLite, будь то транзакция или запрос, все условия, разделенные AND, должны быть ИСТИНА.
пример
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
В следующем операторе SELECT перечислены все записи, в которых AGE больше или равно 25 И зарплата больше или равна 65000,00.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Оператор ИЛИ
Оператор OR также используется для объединения нескольких условий в предложении WHERE оператора SQLite. При использовании оператора ИЛИ полное условие будет считаться истинным, если хотя бы одно из условий является истинным. Например, [условие1] ИЛИ [условие2] будет истинным, если условие 1 или условие 2 истинно.
Синтаксис
Ниже приведен основной синтаксис оператора OR с предложением WHERE.
SELECT column1, column2, columnN FROM table_name WHERE [condition1] OR [condition2]...OR [conditionN]
Вы можете объединить N условий с помощью оператора ИЛИ. Для действия, выполняемого оператором SQLite, будь то транзакция или запрос, только ОДИН из условий, разделенных ИЛИ, должно быть ИСТИНА.
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
В следующем операторе SELECT перечислены все записи, где AGE больше или равно 25 ИЛИ оклад больше или равен 65000.00.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
SQLite — ОБНОВЛЕНИЕ запроса
SQLite UPDATE Query используется для изменения существующих записей в таблице. Вы можете использовать предложение WHERE с запросом UPDATE для обновления выбранных строк, в противном случае все строки будут обновлены.
Синтаксис
Ниже приведен основной синтаксис запроса UPDATE с предложением WHERE.
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
Вы можете объединить N условий с помощью операторов И или ИЛИ.
пример
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который обновит АДРЕС для клиента с идентификатором 6.
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
Теперь таблица COMPANY будет иметь следующие записи.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 Texas 45000.0 7 James 24 Houston 10000.0
Если вы хотите изменить все значения столбцов ADDRESS и SALARY в таблице COMPANY, вам не нужно использовать предложение WHERE, а запрос UPDATE будет выглядеть следующим образом:
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
Теперь таблица COMPANY будет иметь следующие записи —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 Texas 20000.0 2 Allen 25 Texas 20000.0 3 Teddy 23 Texas 20000.0 4 Mark 25 Texas 20000.0 5 David 27 Texas 20000.0 6 Kim 22 Texas 20000.0 7 James 24 Texas 20000.0
SQLite — УДАЛИТЬ запрос
SQLite DELETE Query используется для удаления существующих записей из таблицы. Вы можете использовать предложение WHERE с запросом DELETE, чтобы удалить выбранные строки, в противном случае все записи будут удалены.
Синтаксис
Ниже приведен основной синтаксис запроса DELETE с предложением WHERE.
DELETE FROM table_name WHERE [condition];
Вы можете объединить N условий с помощью операторов И или ИЛИ.
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который удалит клиента с идентификатором 7.
sqlite> DELETE FROM COMPANY WHERE ID = 7;
Теперь таблица COMPANY будет иметь следующие записи.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0
Если вы хотите УДАЛИТЬ все записи из таблицы COMPANY, вам не нужно использовать предложение WHERE с запросом DELETE, которое будет выглядеть следующим образом:
sqlite> DELETE FROM COMPANY;
Теперь в таблице COMPANY нет записей, так как все записи были удалены оператором DELETE.
SQLite — как предложение
Оператор SQLite LIKE используется для сопоставления текстовых значений с шаблоном с использованием подстановочных знаков. Если поисковое выражение можно сопоставить с выражением шаблона, оператор LIKE вернет значение true, равное 1. В сочетании с оператором LIKE используются две маски
- Знак процента (%)
- Подчеркивание (_)
Знак процента представляет собой ноль, один или несколько чисел или символов. Подчеркивание представляет собой одно число или символ. Эти символы могут использоваться в комбинациях.
Синтаксис
Ниже приведен основной синтаксис% и _.
SELECT FROM table_name WHERE column LIKE 'XXXX%' or SELECT FROM table_name WHERE column LIKE '%XXXX%' or SELECT FROM table_name WHERE column LIKE 'XXXX_' or SELECT FROM table_name WHERE column LIKE '_XXXX' or SELECT FROM table_name WHERE column LIKE '_XXXX_'
Вы можете объединить N условий с помощью операторов И или ИЛИ. Здесь XXXX может быть любым числовым или строковым значением.
пример
В следующей таблице приведен ряд примеров, показывающих, где часть WHERE имеет другое предложение LIKE с операторами «%» и «_».
Sr.No. | Заявление и описание |
---|---|
1 |
Где заработная плата, как «200%» Находит любые значения, которые начинаются с 200 |
2 |
ГДЕ НАЛОГОВАЯ НРАВИТСЯ «% 200%» Находит любые значения, которые имеют 200 в любой позиции |
3 |
ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_00%’ Находит любые значения, которые имеют 00 во второй и третьей позиции |
4 |
ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘2 _% _%’ Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов |
5 |
ГДЕ НАГРАДНАЯ НРАВИТСЯ ‘% 2’ Находит любые значения, которые заканчиваются на 2 |
6 |
ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_2% 3’ Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3 |
7 |
Где заработная плата, как «2___3» Находит любые значения в пятизначном числе, которое начинается с 2 и заканчивается на 3 |
Где заработная плата, как «200%»
Находит любые значения, которые начинаются с 200
ГДЕ НАЛОГОВАЯ НРАВИТСЯ «% 200%»
Находит любые значения, которые имеют 200 в любой позиции
ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_00%’
Находит любые значения, которые имеют 00 во второй и третьей позиции
ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘2 _% _%’
Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов
ГДЕ НАГРАДНАЯ НРАВИТСЯ ‘% 2’
Находит любые значения, которые заканчиваются на 2
ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_2% 3’
Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3
Где заработная плата, как «2___3»
Находит любые значения в пятизначном числе, которое начинается с 2 и заканчивается на 3
Давайте возьмем реальный пример, рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который будет отображать все записи из таблицы COMPANY, где AGE начинается с 2.
sqlite> SELECT * FROM COMPANY WHERE AGE LIKE '2%';
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, в котором будут отображаться все записи из таблицы COMPANY, где в тексте ADDRESS будет стоять дефис (-).
sqlite> SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 6 Kim 22 South-Hall 45000.0
SQLite — предложение GLOB
Оператор SQLite GLOB используется для сопоставления только текстовых значений с шаблоном с использованием подстановочных знаков. Если поисковое выражение может быть сопоставлено с выражением шаблона, оператор GLOB вернет true, которое равно 1. В отличие от оператора LIKE, GLOB чувствителен к регистру и соответствует синтаксису UNIX для указания следующих подстановочных знаков.
- Знак звездочки (*)
- Знак вопроса (?)
Знак звездочки (*) представляет ноль или несколько цифр или символов. Знак вопроса (?) Представляет одно число или символ.
Синтаксис
Ниже приведен основной синтаксис * и ? ,
SELECT FROM table_name WHERE column GLOB 'XXXX*' or SELECT FROM table_name WHERE column GLOB '*XXXX*' or SELECT FROM table_name WHERE column GLOB 'XXXX?' or SELECT FROM table_name WHERE column GLOB '?XXXX' or SELECT FROM table_name WHERE column GLOB '?XXXX?' or SELECT FROM table_name WHERE column GLOB '????'
Вы можете объединить N условий с помощью операторов И или ИЛИ. Здесь XXXX может быть любым числовым или строковым значением.
пример
В следующей таблице приведен ряд примеров, показывающих, где часть WHERE имеет различные предложения LIKE с ‘*’ и ‘?’ операторы.
Sr.No. | Заявление и описание |
---|---|
1 |
ГДЕ ЗНАКОМНАЯ ГЛОБ ‘200 *’ Находит любые значения, которые начинаются с 200 |
2 |
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘* 200 *’ Находит любые значения, которые имеют 200 в любой позиции |
3 |
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘? 00 *’ Находит любые значения, которые имеют 00 во второй и третьей позиции |
4 |
Где заработная плата GLOB ‘2 ??’ Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов |
5 |
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘* 2’ Находит любые значения, которые заканчиваются на 2 |
6 |
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘? 2 * 3’ Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3 |
7 |
ГДЕ ЗНАЧИТЕЛЬНЫЙ ГЛОБ ‘2 ??? 3’ Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3 |
ГДЕ ЗНАКОМНАЯ ГЛОБ ‘200 *’
Находит любые значения, которые начинаются с 200
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘* 200 *’
Находит любые значения, которые имеют 200 в любой позиции
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘? 00 *’
Находит любые значения, которые имеют 00 во второй и третьей позиции
Где заработная плата GLOB ‘2 ??’
Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘* 2’
Находит любые значения, которые заканчиваются на 2
ГДЕ ГЛОБАЛЬНАЯ ПЛАТА ‘? 2 * 3’
Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3
ГДЕ ЗНАЧИТЕЛЬНЫЙ ГЛОБ ‘2 ??? 3’
Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3
Давайте возьмем реальный пример, рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который будет отображать все записи из таблицы COMPANY, где AGE начинается с 2.
sqlite> SELECT * FROM COMPANY WHERE AGE GLOB '2*';
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который будет отображать все записи из таблицы COMPANY, в которых в тексте ADDRESS будет стоять дефис (-) —
sqlite> SELECT * FROM COMPANY WHERE ADDRESS GLOB '*-*';
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 6 Kim 22 South-Hall 45000.0
SQLite — предложение LIMIT
Предложение SQLite LIMIT используется для ограничения объема данных, возвращаемых оператором SELECT.
Синтаксис
Ниже приведен основной синтаксис оператора SELECT с предложением LIMIT.
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows]
Ниже приводится синтаксис предложения LIMIT, когда он используется вместе с предложением OFFSET.
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows] OFFSET [row num]
Движок SQLite будет возвращать строки, начиная со следующей строки, до заданного смещения, как показано ниже в последнем примере.
пример
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который ограничивает строку в таблице в соответствии с количеством строк, которые вы хотите извлечь из таблицы.
sqlite> SELECT * FROM COMPANY LIMIT 6;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0
Однако в определенных ситуациях вам может потребоваться подобрать набор записей из определенного смещения. Вот пример, который собирает 3 записи, начиная с 3- й позиции.
sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
SQLite — предложение ORDER BY
Предложение SQLite ORDER BY используется для сортировки данных в порядке возрастания или убывания по одному или нескольким столбцам.
Синтаксис
Ниже приведен основной синтаксис предложения ORDER BY.
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
Вы можете использовать более одного столбца в предложении ORDER BY. Убедитесь, что любой столбец, который вы используете для сортировки, должен быть доступен в списке столбцов.
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример, который отсортирует результат в порядке убывания по SALARY.
sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 7 James 24 Houston 10000.0 2 Allen 25 Texas 15000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Ниже приведен пример, который отсортирует результат в порядке убывания по ИМЯ и ЗАПИСЬ.
sqlite> SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 5 David 27 Texas 85000.0 7 James 24 Houston 10000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0
Ниже приведен пример, который отсортирует результат в порядке убывания по ИМЯ.
sqlite> SELECT * FROM COMPANY ORDER BY NAME DESC;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 3 Teddy 23 Norway 20000.0 1 Paul 32 California 20000.0 4 Mark 25 Rich-Mond 65000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 5 David 27 Texas 85000.0 2 Allen 25 Texas 15000.0
SQLite — предложение GROUP BY
Предложение SQLite GROUP BY используется в сотрудничестве с оператором SELECT для объединения идентичных данных в группы.
Предложение GROUP BY следует за предложением WHERE в инструкции SELECT и предшествует предложению ORDER BY.
Синтаксис
Ниже приведен основной синтаксис предложения GROUP BY. Предложение GROUP BY должно соответствовать условиям в предложении WHERE и должно предшествовать предложению ORDER BY, если оно используется.
SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
Вы можете использовать более одного столбца в предложении GROUP BY. Убедитесь, что какой столбец вы используете для группировки, этот столбец должен быть доступен в списке столбцов.
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Если вы хотите узнать общую сумму зарплаты на каждого клиента, то запрос GROUP BY будет выглядеть следующим образом —
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
Это даст следующий результат —
NAME SUM(SALARY) ---------- ----------- Allen 15000.0 David 85000.0 James 10000.0 Kim 45000.0 Mark 65000.0 Paul 20000.0 Teddy 20000.0
Теперь давайте создадим еще три записи в таблице COMPANY, используя следующие операторы INSERT.
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00 ); INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00 ); INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00 );
Теперь в нашей таблице есть следующие записи с повторяющимися именами.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 8 Paul 24 Houston 20000.0 9 James 44 Norway 5000.0 10 James 45 Texas 5000.0
Опять же, давайте используем один и тот же оператор для группировки всех записей с использованием столбца NAME следующим образом:
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
Это даст следующий результат.
NAME SUM(SALARY) ---------- ----------- Allen 15000 David 85000 James 20000 Kim 45000 Mark 65000 Paul 40000 Teddy 20000
Давайте использовать предложение ORDER BY вместе с предложением GROUP BY следующим образом:
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
Это даст следующий результат.
NAME SUM(SALARY) ---------- ----------- Teddy 20000 Paul 40000 Mark 65000 Kim 45000 James 20000 David 85000 Allen 15000
SQLite — предложение HAVING
Предложение HAVING позволяет указать условия, которые фильтруют, какие групповые результаты появляются в окончательных результатах.
Предложение WHERE помещает условия в выбранные столбцы, тогда как предложение HAVING помещает условия в группы, созданные предложением GROUP BY.
Синтаксис
Ниже приведена позиция предложения HAVING в запросе SELECT.
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Предложение HAVING должно следовать за предложением GROUP BY в запросе, а также должно предшествовать предложению ORDER BY, если оно используется. Ниже приведен синтаксис оператора SELECT, включая предложение HAVING.
SELECT column1, column2 FROM table1, table2 WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 8 Paul 24 Houston 20000.0 9 James 44 Norway 5000.0 10 James 45 Texas 5000.0
Ниже приведен пример, в котором будет отображена запись, для которой количество имен меньше 2.
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000 5 David 27 Texas 85000 6 Kim 22 South-Hall 45000 4 Mark 25 Rich-Mond 65000 3 Teddy 23 Norway 20000
Ниже приведен пример, в котором будет отображена запись, для которой количество имен превышает 2.
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 10 James 45 Texas 5000
SQLite — ключевое слово DISTINCT
Ключевое слово SQLite DISTINCT используется вместе с оператором SELECT, чтобы исключить все дублирующиеся записи и извлечь только уникальные записи.
Может возникнуть ситуация, когда в таблице несколько повторяющихся записей. При получении таких записей имеет смысл выбирать только уникальные записи, а не дублировать записи.
Синтаксис
Ниже приведен основной синтаксис ключевого слова DISTINCT для устранения дублирующихся записей.
SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition]
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 8 Paul 24 Houston 20000.0 9 James 44 Norway 5000.0 10 James 45 Texas 5000.0
Во-первых, давайте посмотрим, как следующий запрос SELECT возвращает дубликаты записей заработной платы.
sqlite> SELECT name FROM COMPANY;
Это даст следующий результат.
NAME ---------- Paul Allen Teddy Mark David Kim James Paul James James
Теперь давайте воспользуемся ключевым словом DISTINCT с вышеупомянутым запросом SELECT и увидим результат.
sqlite> SELECT DISTINCT name FROM COMPANY;
Это приведет к следующему результату, где нет повторяющейся записи.
NAME ---------- Paul Allen Teddy Mark David Kim James
SQLite — PRAGMA
Команда SQLite PRAGMA — это специальная команда, которая используется для управления различными переменными среды и флагами состояния в среде SQLite. Значение PRAGMA может быть прочитано, и оно также может быть установлено на основе требований.
Синтаксис
Чтобы запросить текущее значение PRAGMA, просто укажите имя прагмы.
PRAGMA pragma_name;
Чтобы установить новое значение для PRAGMA, используйте следующий синтаксис.
PRAGMA pragma_name = value;
Заданный режим может быть либо именем, либо целочисленным эквивалентом, но возвращаемое значение всегда будет целым числом.
auto_vacuum Pragma
Прагма auto_vacuum получает или устанавливает режим автоматического вакуума. Ниже приводится простой синтаксис.
PRAGMA [database.]auto_vacuum; PRAGMA [database.]auto_vacuum = mode;
Где режим может быть любым из следующих —
Sr.No. | Прагма Значение и описание |
---|---|
1 |
0 или НЕТ Авто-вакуум отключен. Это режим по умолчанию, который означает, что размер файла базы данных никогда не уменьшится, если он не будет очищен вручную с помощью команды VACUUM. |
2 |
1 или ПОЛНЫЙ Авто-вакуум включен и полностью автоматический, что позволяет сжать файл базы данных при удалении данных из базы данных. |
3 |
2 или ДОПОЛНИТЕЛЬНО Авто-вакуум включен, но должен быть активирован вручную. В этом режиме справочные данные сохраняются, но свободные страницы просто помещаются в свободный список. Эти страницы могут быть восстановлены с помощью прагмы incremental_vacuum в любое время. |
0 или НЕТ
Авто-вакуум отключен. Это режим по умолчанию, который означает, что размер файла базы данных никогда не уменьшится, если он не будет очищен вручную с помощью команды VACUUM.
1 или ПОЛНЫЙ
Авто-вакуум включен и полностью автоматический, что позволяет сжать файл базы данных при удалении данных из базы данных.
2 или ДОПОЛНИТЕЛЬНО
Авто-вакуум включен, но должен быть активирован вручную. В этом режиме справочные данные сохраняются, но свободные страницы просто помещаются в свободный список. Эти страницы могут быть восстановлены с помощью прагмы incremental_vacuum в любое время.
cache_size Pragma
Прагма cache_size может получить или временно установить максимальный размер кэша страниц в памяти. Ниже приводится простой синтаксис.
PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = pages;
Значение страниц представляет количество страниц в кэше. Встроенный кэш страниц имеет размер по умолчанию 2000 страниц и минимальный размер 10 страниц.
case_sensitive_like Pragma
Прагма case_sensitive_like управляет чувствительностью к регистру встроенного выражения LIKE. По умолчанию эта прагма имеет значение false, что означает, что встроенный оператор LIKE игнорирует регистр букв. Ниже приводится простой синтаксис.
PRAGMA case_sensitive_like = [true|false];
Нет способа запросить текущее состояние этой прагмы.
count_changes Pragma
Прагма count_changes получает или устанавливает возвращаемое значение операторов манипулирования данными, таких как INSERT, UPDATE и DELETE. Ниже приводится простой синтаксис.
PRAGMA count_changes; PRAGMA count_changes = [true|false];
По умолчанию эта прагма является ложной, и эти утверждения ничего не возвращают. Если установлено значение true, каждый из упомянутых операторов будет возвращать таблицу из одной строки в одну строку, состоящую из единственного целочисленного значения, указывающего на затронутые строки операцией.
база данных_Pragma
Прагма database_list будет использоваться для перечисления всех прикрепленных баз данных. Ниже приводится простой синтаксис.
PRAGMA database_list;
Эта прагма возвращает таблицу из трех столбцов с одной строкой на открытую или присоединенную базу данных, в которой указан порядковый номер базы данных, ее имя и связанный файл.
кодировка прагма
Прагма кодирования управляет тем, как строки кодируются и хранятся в файле базы данных. Ниже приводится простой синтаксис.
PRAGMA encoding; PRAGMA encoding = format;
Значение формата может быть одним из UTF-8, UTF-16le или UTF-16be .
freelist_count Pragma
Прагма freelist_count возвращает одно целое число, указывающее, сколько страниц базы данных в настоящее время помечены как свободные и доступные. Ниже приводится простой синтаксис.
PRAGMA [database.]freelist_count;
Значение формата может быть одним из UTF-8, UTF-16le или UTF-16be .
index_info Прагма
Прагма index_info возвращает информацию об индексе базы данных. Ниже приводится простой синтаксис.
PRAGMA [database.]index_info( index_name );
Результирующий набор будет содержать одну строку для каждого столбца, содержащегося в индексе с указанием последовательности столбцов, индекса столбца без таблицы и имени столбца.
index_list Прагма
Прагма index_list перечисляет все индексы, связанные с таблицей. Ниже приводится простой синтаксис.
PRAGMA [database.]index_list( table_name );
Результирующий набор будет содержать по одной строке для каждого индекса с указанием последовательности индекса, имени индекса и флага, указывающего, является ли индекс уникальным или нет.
journal_mode Pragma
Прагма journal_mode получает или задает режим журнала, который управляет хранением и обработкой файла журнала. Ниже приводится простой синтаксис.
PRAGMA journal_mode; PRAGMA journal_mode = mode; PRAGMA database.journal_mode; PRAGMA database.journal_mode = mode;
Существует пять поддерживаемых режимов журнала, перечисленных в следующей таблице.
Sr.No. | Прагма Значение и описание |
---|---|
1 |
УДАЛЯТЬ Это режим «по умолчанию». Здесь при заключении транзакции файл журнала удаляется. |
2 |
TRUNCATE Файл журнала усекается до длины нулевых байтов. |
3 |
PERSIST Файл журнала остается на месте, но заголовок перезаписывается, чтобы указать, что журнал больше не действителен. |
4 |
ОБЪЕМ ПАМЯТИ Запись журнала хранится в памяти, а не на диске. |
5 |
OFF Нет записей в журнале. |
УДАЛЯТЬ
Это режим «по умолчанию». Здесь при заключении транзакции файл журнала удаляется.
TRUNCATE
Файл журнала усекается до длины нулевых байтов.
PERSIST
Файл журнала остается на месте, но заголовок перезаписывается, чтобы указать, что журнал больше не действителен.
ОБЪЕМ ПАМЯТИ
Запись журнала хранится в памяти, а не на диске.
OFF
Нет записей в журнале.
max_page_count Pragma
Прагма max_page_count получает или устанавливает максимально допустимое количество страниц для базы данных. Ниже приводится простой синтаксис.
PRAGMA [database.]max_page_count; PRAGMA [database.]max_page_count = max_page;
Значение по умолчанию — 1 073 741 823, что составляет одну гигастраницу, что означает, что если размер страницы по умолчанию составляет 1 КБ, это позволяет базам данных расти до одного терабайта.
page_count Pragma
Прагма page_count возвращает текущее количество страниц в базе данных. Ниже приводится простой синтаксис —
PRAGMA [database.]page_count;
Размер файла базы данных должен быть page_count * page_size.
page_size Pragma
Прагма page_size получает или устанавливает размер страниц базы данных. Ниже приводится простой синтаксис.
PRAGMA [database.]page_size; PRAGMA [database.]page_size = bytes;
По умолчанию допустимые размеры составляют 512, 1024, 2048, 4096, 8192, 16384 и 32768 байт. Единственный способ изменить размер страницы в существующей базе данных — это установить размер страницы, а затем сразу же VACUUM базы данных.
parser_trace Pragma
Прагма parser_trace управляет печатью состояния отладки при анализе команд SQL. Ниже приводится простой синтаксис.
PRAGMA parser_trace = [true|false];
По умолчанию для него установлено значение false, но при включении, установив его в значение true, анализатор SQL будет печатать свое состояние при анализе команд SQL.
recursive_triggers Pragma
Прагма recursive_triggers получает или устанавливает функциональность рекурсивного триггера. Если рекурсивные триггеры не включены, действие триггера не будет запускать другой триггер. Ниже приводится простой синтаксис.
PRAGMA recursive_triggers; PRAGMA recursive_triggers = [true|false];
schema_version Pragma
Прагма schema_version получает или устанавливает значение версии схемы, которое хранится в заголовке базы данных. Ниже приводится простой синтаксис.
PRAGMA [database.]schema_version; PRAGMA [database.]schema_version = number;
Это 32-разрядное целое число со знаком, которое отслеживает изменения схемы. Всякий раз, когда выполняется команда изменения схемы (например, CREATE … или DROP …), это значение увеличивается.
secure_delete Pragma
Прагма secure_delete используется для управления тем, как контент удаляется из базы данных. Ниже приводится простой синтаксис.
PRAGMA secure_delete; PRAGMA secure_delete = [true|false]; PRAGMA database.secure_delete; PRAGMA database.secure_delete = [true|false];
Значение по умолчанию для флага безопасного удаления обычно отключено, но его можно изменить с помощью параметра сборки SQLITE_SECURE_DELETE.
sql_trace Pragma
Прагма sql_trace используется для вывода результатов трассировки SQL на экран. Ниже приводится простой синтаксис.
PRAGMA sql_trace; PRAGMA sql_trace = [true|false];
SQLite должен быть скомпилирован с директивой SQLITE_DEBUG для включения этой прагмы.
синхронная прагма
Синхронная прагма получает или устанавливает текущий режим синхронизации диска, который контролирует, насколько агрессивно SQLite будет записывать данные в физическое хранилище. Ниже приводится простой синтаксис.
PRAGMA [database.]synchronous; PRAGMA [database.]synchronous = mode;
SQLite поддерживает следующие режимы синхронизации, перечисленные в таблице.
Sr.No. | Прагма Значение и описание |
---|---|
1 |
0 или ВЫКЛ Нет синхронизации вообще |
2 |
1 или НОРМАЛЬНЫЙ Синхронизация после каждой последовательности критических операций с диском |
3 |
2 или ПОЛНЫЙ Синхронизировать после каждой критической операции с диском |
0 или ВЫКЛ
Нет синхронизации вообще
1 или НОРМАЛЬНЫЙ
Синхронизация после каждой последовательности критических операций с диском
2 или ПОЛНЫЙ
Синхронизировать после каждой критической операции с диском
Temp_store Pragma
Прагма temp_store получает или устанавливает режим хранения, используемый временными файлами базы данных. Ниже приводится простой синтаксис.
PRAGMA temp_store; PRAGMA temp_store = mode;
SQLite поддерживает следующие режимы хранения.
Sr.No. | Прагма Значение и описание |
---|---|
1 |
0 или ПО УМОЛЧАНИЮ Используйте время компиляции по умолчанию. Обычно ФАЙЛ. |
2 |
1 или ФАЙЛ Используйте файловое хранилище. |
3 |
2 или ПАМЯТЬ Используйте память на основе памяти. |
0 или ПО УМОЛЧАНИЮ
Используйте время компиляции по умолчанию. Обычно ФАЙЛ.
1 или ФАЙЛ
Используйте файловое хранилище.
2 или ПАМЯТЬ
Используйте память на основе памяти.
Temp_store_directory Прагма
Прагма temp_store_directory получает или задает расположение, используемое для временных файлов базы данных. Ниже приводится простой синтаксис.
PRAGMA temp_store_directory; PRAGMA temp_store_directory = 'directory_path';
user_version Pragma
Прагма user_version получает или задает пользовательское значение версии, которое хранится в заголовке базы данных. Ниже приводится простой синтаксис.
PRAGMA [database.]user_version; PRAGMA [database.]user_version = number;
Это 32-разрядное целое число со знаком, которое может быть установлено разработчиком для отслеживания версий.
Writable_schema Pragma
Прагма writable_schema получает или устанавливает возможность изменения системных таблиц. Ниже приводится простой синтаксис.
PRAGMA writable_schema; PRAGMA writable_schema = [true|false];
Если эта прагма установлена, таблицы, начинающиеся с sqlite_, могут быть созданы и изменены, включая таблицу sqlite_master. Будьте осторожны при использовании прагмы, потому что это может привести к полному повреждению базы данных.
SQLite — Ограничения
Ограничения — это правила, применяемые к столбцам данных в таблице. Они используются для ограничения типа данных, которые могут попадать в таблицу. Это обеспечивает точность и достоверность данных в базе данных.
Ограничения могут быть на уровне столбца или таблицы. Ограничения уровня столбца применяются только к одному столбцу, тогда как ограничения уровня таблицы применяются ко всей таблице.
Ниже приведены часто используемые ограничения, доступные в SQLite.
-
NOT NULL Ограничение — Гарантирует, что столбец не может иметь значение NULL.
-
DEFAULT Constraint — Предоставляет значение по умолчанию для столбца, когда ни один не указан.
-
UNIQUE Constraint — гарантирует, что все значения в столбце разные.
-
PRIMARY Key — уникально идентифицирует каждую строку / запись в таблице базы данных.
-
CHECK Constraint — Гарантирует, что все значения в столбце удовлетворяют определенным условиям.
NOT NULL Ограничение — Гарантирует, что столбец не может иметь значение NULL.
DEFAULT Constraint — Предоставляет значение по умолчанию для столбца, когда ни один не указан.
UNIQUE Constraint — гарантирует, что все значения в столбце разные.
PRIMARY Key — уникально идентифицирует каждую строку / запись в таблице базы данных.
CHECK Constraint — Гарантирует, что все значения в столбце удовлетворяют определенным условиям.
NOT NULL Ограничение
По умолчанию столбец может содержать значения NULL. Если вы не хотите, чтобы столбец имел значение NULL, вам необходимо определить такое ограничение для этого столбца, указав, что NULL теперь не разрешен для этого столбца.
NULL — это не то же самое, что отсутствие данных, скорее, он представляет неизвестные данные.
пример
Например, следующий оператор SQLite создает новую таблицу с именем COMPANY и добавляет пять столбцов, три из которых, ID и NAME и AGE, указывают, что они не должны принимать значения NULL.
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Ограничение по умолчанию
Ограничение DEFAULT предоставляет значение по умолчанию для столбца, когда инструкция INSERT INTO не предоставляет конкретного значения.
пример
Например, следующий оператор SQLite создает новую таблицу с именем COMPANY и добавляет пять столбцов. Здесь для столбца SALARY по умолчанию установлено значение 5000,00, поэтому в случае, если инструкция INSERT INTO не предоставляет значение для этого столбца, по умолчанию для этого столбца будет задано значение 5000,00.
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
Уникальное ограничение
Уникальное ограничение не позволяет двум записям иметь одинаковые значения в определенном столбце. Например, в таблице COMPANY вы можете запретить двум или более людям одинаковый возраст.
пример
Например, следующий оператор SQLite создает новую таблицу с именем COMPANY и добавляет пять столбцов. Здесь столбец AGE имеет значение UNIQUE, поэтому у вас не может быть двух записей одного возраста —
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
ПЕРВИЧНЫЙ КЛЮЧ Ограничение
Ограничение PRIMARY KEY однозначно идентифицирует каждую запись в таблице базы данных. Может быть больше УНИКАЛЬНЫХ столбцов, но только один первичный ключ в таблице. Первичные ключи важны при разработке таблиц базы данных. Первичные ключи — это уникальные идентификаторы.
Мы используем их для ссылки на строки таблицы. Первичные ключи становятся внешними ключами в других таблицах при создании связей между таблицами. Из-за «давнего надзора за кодированием» первичные ключи могут иметь значение NULL в SQLite. Это не относится к другим базам данных.
Первичный ключ — это поле в таблице, которое однозначно идентифицирует каждую строку / запись в таблице базы данных. Первичные ключи должны содержать уникальные значения. Столбец первичного ключа не может иметь значения NULL.
Таблица может иметь только один первичный ключ, который может состоять из одного или нескольких полей. Когда несколько полей используются в качестве первичного ключа, они называются составным ключом .
Если у таблицы есть первичный ключ, определенный для любого поля (полей), то у вас не может быть двух записей, имеющих одинаковое значение этого поля (полей).
пример
Вы уже видели различные примеры выше, где мы создали таблицу COMPANY с ID в качестве первичного ключа.
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
ПРОВЕРЬТЕ Ограничение
Ограничение CHECK позволяет условию проверять значение, вводимое в запись. Если условие оценивается как ложное, запись нарушает ограничение и не заносится в таблицу.
пример
Например, следующий SQLite создает новую таблицу с именем COMPANY и добавляет пять столбцов. Здесь мы добавляем столбец CHECK with SALARY, чтобы вы не могли иметь нулевой SALARY.
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL CHECK(SALARY > 0) );
Отбрасывание ограничения
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы.
SQLite — СОЕДИНЯЕТСЯ
Предложение SQLite Joins используется для объединения записей из двух или более таблиц в базе данных. JOIN — это средство для объединения полей из двух таблиц с использованием значений, общих для каждой.
SQL определяет три основных типа соединений:
- CROSS JOIN
- ВНУТРЕННЕЕ СОЕДИНЕНИЕ
- НАРУЖНОЕ СОЕДИНЕНИЕ
Прежде чем мы продолжим, давайте рассмотрим две таблицы КОМПАНИИ и ОТДЕЛЕНИЯ. Мы уже видели операторы INSERT для заполнения таблицы COMPANY. Итак, давайте предположим список записей, доступных в таблице COMPANY —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Другая таблица — ОТДЕЛ со следующим определением —
CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL );
Вот список операторов INSERT для заполнения таблицы DEPARTMENT —
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (1, 'IT Billing', 1 ); INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (2, 'Engineering', 2 ); INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (3, 'Finance', 7 );
Наконец, у нас есть следующий список записей, доступных в таблице ОТДЕЛ —
ID DEPT EMP_ID ---------- ---------- ---------- 1 IT Billing 1 2 Engineering 2 3 Finance 7
CROSS JOIN
CROSS JOIN сопоставляет каждую строку первой таблицы с каждой строкой второй таблицы. Если входные таблицы имеют строки x и y соответственно, результирующая таблица будет иметь строку x * y. Поскольку CROSS JOINs могут генерировать очень большие таблицы, необходимо соблюдать осторожность, чтобы использовать их только тогда, когда это необходимо.
Ниже приводится синтаксис CROSS JOIN —
SELECT ... FROM table1 CROSS JOIN table2 ...
На основании приведенных выше таблиц вы можете написать CROSS JOIN следующим образом:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
Приведенный выше запрос даст следующий результат —
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Paul Engineering 7 Paul Finance 1 Allen IT Billing 2 Allen Engineering 7 Allen Finance 1 Teddy IT Billing 2 Teddy Engineering 7 Teddy Finance 1 Mark IT Billing 2 Mark Engineering 7 Mark Finance 1 David IT Billing 2 David Engineering 7 David Finance 1 Kim IT Billing 2 Kim Engineering 7 Kim Finance 1 James IT Billing 2 James Engineering 7 James Finance
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
INNER JOIN создает новую таблицу результатов, комбинируя значения столбцов двух таблиц (table1 и table2) на основе предиката соединения. Запрос сравнивает каждую строку таблицы table1 с каждой строкой таблицы table2, чтобы найти все пары строк, которые удовлетворяют предикату соединения. Когда предикат соединения удовлетворяется, значения столбцов для каждой соответствующей пары строк A и B объединяются в результирующую строку.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ является наиболее распространенным типом объединения по умолчанию. При желании вы можете использовать ключевое слово INNER.
Ниже приводится синтаксис INNER JOIN —
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
Чтобы избежать избыточности и сохранить сокращение фразы, условия INNER JOIN могут быть объявлены с помощью выражения USING . Это выражение указывает список из одного или нескольких столбцов.
SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
NATURAL JOIN похож на JOIN … USING , только он автоматически проверяет равенство значений каждого столбца в обеих таблицах —
SELECT ... FROM table1 NATURAL JOIN table2...
Исходя из приведенных выше таблиц, вы можете написать INNER JOIN следующим образом:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
Приведенный выше запрос даст следующий результат —
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Allen Engineering 7 James Finance
НАРУЖНОЕ СОЕДИНЕНИЕ
OUTER JOIN — это расширение INNER JOIN. Хотя стандарт SQL определяет три типа OUTER JOIN: LEFT, RIGHT и FULL, SQLite поддерживает только LEFT OUTER JOIN .
У ВНЕШНИХ СОЕДИНЕНИЙ есть условие, идентичное ВНУТРЕННЫМ СОЕДИНЕНИЯМ, выраженное с помощью ключевого слова ON, USING или NATURAL. Исходная таблица результатов рассчитывается аналогично. Как только основной JOIN рассчитан, OUTER JOIN возьмет все несоединенные строки из одной или обеих таблиц, дополнит их значениями NULL и добавит их в результирующую таблицу.
Ниже приведен синтаксис LEFT OUTER JOIN —
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
Чтобы избежать избыточности и сохранить сокращение фразы, условия OUTER JOIN могут быть объявлены с помощью выражения USING. Это выражение указывает список из одного или нескольких столбцов.
SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...
На основании приведенных выше таблиц вы можете написать внутреннее соединение следующим образом:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
Приведенный выше запрос даст следующий результат —
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Allen Engineering Teddy Mark David Kim 7 James Finance
SQLite — предложение UNION
Предложение / оператор SQLite UNION используется для объединения результатов двух или более операторов SELECT без возврата повторяющихся строк.
Чтобы использовать UNION, каждый SELECT должен иметь одинаковое количество выбранных столбцов, одинаковое количество выражений столбцов, одинаковый тип данных и иметь их в одинаковом порядке, но они не обязательно должны быть одинаковой длины.
Синтаксис
Ниже приведен основной синтаксис UNION .
SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
Здесь данное условие может быть любым выражением, основанным на вашем требовании.
пример
Рассмотрим следующие две таблицы: (а) таблицу КОМПАНИИ следующим образом:
sqlite> select * from COMPANY; ID NAME AGE ADDRESS SALARY ---------- -------------------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
(б) Другая таблица — это ОТДЕЛ следующего содержания:
ID DEPT EMP_ID ---------- -------------------- ---------- 1 IT Billing 1 2 Engineering 2 3 Finance 7 4 Engineering 3 5 Finance 4 6 Engineering 5 7 Finance 6
Теперь давайте объединим эти две таблицы, используя инструкцию SELECT вместе с предложением UNION следующим образом:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID UNION SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
Это даст следующий результат.
EMP_ID NAME DEPT ---------- -------------------- ---------- 1 Paul IT Billing 2 Allen Engineering 3 Teddy Engineering 4 Mark Finance 5 David Engineering 6 Kim Finance 7 James Finance
СОЮЗ ВСЕ Статья
Оператор UNION ALL используется для объединения результатов двух операторов SELECT, включая повторяющиеся строки.
Те же правила, которые применяются к UNION, применяются и к оператору UNION ALL.
Синтаксис
Ниже приведен основной синтаксис UNION ALL .
SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION ALL SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
Здесь данное условие может быть любым выражением, основанным на вашем требовании.
пример
Теперь давайте объединим две вышеупомянутые таблицы в нашем операторе SELECT следующим образом:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID UNION ALL SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
Это даст следующий результат.
EMP_ID NAME DEPT ---------- -------------------- ---------- 1 Paul IT Billing 2 Allen Engineering 3 Teddy Engineering 4 Mark Finance 5 David Engineering 6 Kim Finance 7 James Finance 1 Paul IT Billing 2 Allen Engineering 3 Teddy Engineering 4 Mark Finance 5 David Engineering 6 Kim Finance 7 James Finance
SQLite — значения NULL
SQLite NULL — это термин, используемый для обозначения пропущенного значения. Значение NULL в таблице — это значение в поле, которое кажется пустым.
Поле со значением NULL является полем без значения. Очень важно понимать, что значение NULL отличается от нулевого значения или поля, которое содержит пробелы.
Синтаксис
Ниже приведен основной синтаксис использования NULL при создании таблицы.
SQLite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Здесь NOT NULL означает, что столбец всегда должен принимать явное значение данного типа данных. Есть два столбца, в которых мы не использовали NOT NULL, что означает, что эти столбцы могут быть NULL.
Поле со значением NULL — это поле, которое было оставлено пустым при создании записи.
пример
Значение NULL может вызвать проблемы при выборе данных, поскольку при сравнении неизвестного значения с любым другим значением результат всегда неизвестен и не включается в окончательные результаты. Рассмотрим следующую таблицу КОМПАНИЯ со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Давайте использовать оператор UPDATE, чтобы установить несколько значений NULL в NULL следующим образом:
sqlite> UPDATE COMPANY SET ADDRESS = NULL, SALARY = NULL where ID IN(6,7);
Теперь таблица COMPANY будет иметь следующие записи.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 7 James 24
Далее, давайте посмотрим на использование оператора IS NOT NULL, чтобы перечислить все записи, где SALARY не равен NULL.
sqlite> SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY WHERE SALARY IS NOT NULL;
Приведенный выше оператор SQLite даст следующий результат:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Далее следует использование оператора IS NULL , который перечислит все записи, где SALARY равен NULL.
sqlite> SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY WHERE SALARY IS NULL;
Приведенный выше оператор SQLite даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 7 James 24
SQLite — Синтаксис ALIAS
Вы можете временно переименовать таблицу или столбец, указав другое имя, известное как ALIAS . Использование псевдонимов таблиц означает переименование таблицы в конкретном операторе SQLite. Переименование является временным изменением, и фактическое имя таблицы не изменяется в базе данных.
Псевдонимы столбцов используются для переименования столбцов таблицы с целью конкретного запроса SQLite.
Синтаксис
Ниже приведен основной синтаксис псевдонима таблицы .
SELECT column1, column2.... FROM table_name AS alias_name WHERE [condition];
Ниже приведен основной синтаксис псевдонима столбца .
SELECT column_name AS alias_name FROM table_name WHERE [condition];
пример
Рассмотрим следующие две таблицы: (а) Таблица КОМПАНИИ выглядит следующим образом —
sqlite> select * from COMPANY; ID NAME AGE ADDRESS SALARY ---------- -------------------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
(б) Другая таблица — это ОТДЕЛ следующего содержания:
ID DEPT EMP_ID ---------- -------------------- ---------- 1 IT Billing 1 2 Engineering 2 3 Finance 7 4 Engineering 3 5 Finance 4 6 Engineering 5 7 Finance 6
Далее следует использование TABLE ALIAS, где мы используем C и D в качестве псевдонимов для таблиц COMPANY и DEPARTMENT соответственно —
sqlite> SELECT C.ID, C.NAME, C.AGE, D.DEPT FROM COMPANY AS C, DEPARTMENT AS D WHERE C.ID = D.EMP_ID;
Приведенный выше оператор SQLite даст следующий результат:
ID NAME AGE DEPT ---------- ---------- ---------- ---------- 1 Paul 32 IT Billing 2 Allen 25 Engineering 3 Teddy 23 Engineering 4 Mark 25 Finance 5 David 27 Engineering 6 Kim 22 Finance 7 James 24 Finance
Рассмотрим пример использования COLUMN ALIAS, где COMPANY_ID — это столбец псевдонима идентификатора, а COMPANY_NAME — столбец псевдонима имени.
sqlite> SELECT C.ID AS COMPANY_ID, C.NAME AS COMPANY_NAME, C.AGE, D.DEPT FROM COMPANY AS C, DEPARTMENT AS D WHERE C.ID = D.EMP_ID;
Приведенный выше оператор SQLite даст следующий результат:
COMPANY_ID COMPANY_NAME AGE DEPT ---------- ------------ ---------- ---------- 1 Paul 32 IT Billing 2 Allen 25 Engineering 3 Teddy 23 Engineering 4 Mark 25 Finance 5 David 27 Engineering 6 Kim 22 Finance 7 James 24 Finance
SQLite — Триггеры
Триггеры SQLite — это функции обратного вызова базы данных, которые автоматически выполняются / запускаются, когда происходит указанное событие базы данных. Ниже приведены важные моменты, касающиеся триггеров SQLite.
-
Триггер SQLite может быть задан для запуска всякий раз, когда происходит УДАЛЕНИЕ, ВСТАВКА или ОБНОВЛЕНИЕ определенной таблицы базы данных или когда ОБНОВЛЕНИЕ происходит в одном или нескольких указанных столбцах таблицы.
-
В настоящее время SQLite поддерживает только триггеры FOR EACH ROW, но не триггеры FOR EACH STATEMENT. Следовательно, явно указывать FOR EACH ROW необязательно.
-
Предложение WHEN и действия триггера могут обращаться к элементам вставляемой, удаляемой или обновляемой строки, используя ссылки в форме NEW.column-name и OLD.column-name , где column-name — это имя столбца из таблица, с которой связан триггер.
-
Если указано предложение WHEN, указанные операторы SQL выполняются только для тех строк, для которых предложение WHEN является истинным. Если предложение WHEN не указано, операторы SQL выполняются для всех строк.
-
Ключевое слово BEFORE или AFTER определяет, когда действия триггера будут выполнены относительно вставки, изменения или удаления связанной строки.
-
Триггеры автоматически удаляются при удалении таблицы, с которой они связаны.
-
Изменяемая таблица должна существовать в той же базе данных, что и таблица или представление, к которому присоединен триггер, и необходимо использовать только имя таблицы, а не database.tablename .
-
Специальная функция SQL RAISE () может использоваться в программе-триггере для вызова исключения.
Триггер SQLite может быть задан для запуска всякий раз, когда происходит УДАЛЕНИЕ, ВСТАВКА или ОБНОВЛЕНИЕ определенной таблицы базы данных или когда ОБНОВЛЕНИЕ происходит в одном или нескольких указанных столбцах таблицы.
В настоящее время SQLite поддерживает только триггеры FOR EACH ROW, но не триггеры FOR EACH STATEMENT. Следовательно, явно указывать FOR EACH ROW необязательно.
Предложение WHEN и действия триггера могут обращаться к элементам вставляемой, удаляемой или обновляемой строки, используя ссылки в форме NEW.column-name и OLD.column-name , где column-name — это имя столбца из таблица, с которой связан триггер.
Если указано предложение WHEN, указанные операторы SQL выполняются только для тех строк, для которых предложение WHEN является истинным. Если предложение WHEN не указано, операторы SQL выполняются для всех строк.
Ключевое слово BEFORE или AFTER определяет, когда действия триггера будут выполнены относительно вставки, изменения или удаления связанной строки.
Триггеры автоматически удаляются при удалении таблицы, с которой они связаны.
Изменяемая таблица должна существовать в той же базе данных, что и таблица или представление, к которому присоединен триггер, и необходимо использовать только имя таблицы, а не database.tablename .
Специальная функция SQL RAISE () может использоваться в программе-триггере для вызова исключения.
Синтаксис
Ниже приведен основной синтаксис создания триггера .
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- Trigger logic goes here.... END;
Здесь, event_name может быть операцией INSERT, DELETE и UPDATE над упомянутой таблицей table_name . При желании вы можете указать FOR EACH ROW после имени таблицы.
Ниже приведен синтаксис создания триггера для операции UPDATE в одном или нескольких указанных столбцах таблицы.
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN -- Trigger logic goes here.... END;
пример
Давайте рассмотрим случай, когда мы хотим сохранить аудиторскую проверку для каждой записи, вставляемой в таблицу COMPANY, которую мы создаем заново следующим образом (удалите таблицу COMPANY, если она у вас уже есть).
sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Чтобы продолжить аудит, мы создадим новую таблицу с именем AUDIT, куда будут вставляться сообщения журнала всякий раз, когда в таблице COMPANY есть запись для новой записи.
sqlite> CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL );
Здесь ID — это идентификатор записи AUDIT, а EMP_ID — это идентификатор, который будет получен из таблицы COMPANY, а DATE сохранит временную метку, когда запись будет создана в таблице COMPANY. Теперь давайте создадим триггер для таблицы COMPANY следующим образом:
sqlite> CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END;
Теперь мы приступим к фактической работе. Давайте начнем вставлять запись в таблицу COMPANY, что должно привести к созданию записи журнала аудита в таблице AUDIT. Создайте одну запись в таблице COMPANY следующим образом:
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
Это создаст одну запись в таблице COMPANY, которая выглядит следующим образом:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0
Одновременно в таблице AUDIT будет создана одна запись. Эта запись является результатом триггера, который мы создали для операции INSERT в таблице COMPANY. Точно так же вы можете создавать свои триггеры для операций UPDATE и DELETE в соответствии с вашими требованиями.
EMP_ID ENTRY_DATE ---------- ------------------- 1 2013-04-05 06:26:00
Триггеры листинга
Вы можете перечислить все триггеры из таблицы sqlite_master следующим образом:
sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger';
Приведенный выше оператор SQLite перечислит только одну запись следующим образом:
name ---------- audit_log
Если вы хотите перечислить триггеры в определенной таблице, используйте предложение AND с именем таблицы следующим образом:
sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'COMPANY';
Приведенный выше оператор SQLite также перечислит только одну запись следующим образом:
name ---------- audit_log
Триггеры сброса
Ниже приведена команда DROP, с помощью которой можно удалить существующий триггер.
sqlite> DROP TRIGGER trigger_name;
SQLite — индексы
Индексы — это специальные таблицы поиска, которые поисковая система базы данных может использовать для ускорения поиска данных. Проще говоря, индекс — это указатель на данные в таблице. Индекс в базе данных очень похож на индекс в конце книги.
Например, если вы хотите сослаться на все страницы в книге, в которых обсуждается определенная тема, вы сначала обращаетесь к указателю, который перечисляет все темы в алфавитном порядке, а затем ссылается на один или несколько конкретных номеров страниц.
Индекс помогает ускорить запросы SELECT и предложения WHERE, но замедляет ввод данных с помощью операторов UPDATE и INSERT. Индексы могут быть созданы или удалены без влияния на данные.
Создание индекса включает в себя инструкцию CREATE INDEX, которая позволяет указать имя индекса, указать таблицу и столбцы или столбцы для индексации, а также указать, находится ли индекс в порядке возрастания или убывания.
Индексы также могут быть уникальными, подобно ограничению UNIQUE, в том смысле, что индекс предотвращает дублирование записей в столбце или комбинации столбцов, для которых существует индекс.
Команда CREATE INDEX
Ниже приведен основной синтаксис CREATE INDEX .
CREATE INDEX index_name ON table_name;
Одноколонные индексы
Индекс с одним столбцом — это индекс, который создается на основе только одного столбца таблицы. Основной синтаксис выглядит следующим образом —
CREATE INDEX index_name ON table_name (column_name);
Уникальные индексы
Уникальные индексы используются не только для производительности, но и для целостности данных. Уникальный индекс не позволяет вставлять повторяющиеся значения в таблицу. Основной синтаксис выглядит следующим образом —
CREATE UNIQUE INDEX index_name on table_name (column_name);
Композитные индексы
Составной индекс — это индекс двух или более столбцов таблицы. Основной синтаксис выглядит следующим образом —
CREATE INDEX index_name on table_name (column1, column2);
Независимо от того, хотите ли вы создать индекс из одного столбца или составной индекс, примите во внимание столбцы, которые вы можете использовать очень часто в предложении WHERE запроса в качестве условий фильтра.
Если используется только один столбец, то должен быть выбран индекс из одного столбца. Если в предложении WHERE в качестве фильтров часто используются два или более столбца, наилучшим выбором будет составной индекс.
Неявные индексы
Неявные индексы — это индексы, которые автоматически создаются сервером базы данных при создании объекта. Индексы автоматически создаются для ограничений первичного ключа и уникальных ограничений.
пример
Ниже приведен пример, где мы создадим индекс в таблице COMPANY для столбца зарплаты —
sqlite> CREATE INDEX salary_index ON COMPANY (salary);
Теперь давайте перечислим все индексы, доступные в таблице COMPANY, с помощью команды .indices следующим образом:
sqlite> .indices COMPANY
Это приведет к следующему результату, где sqlite_autoindex_COMPANY_1 является неявным индексом, который был создан при создании самой таблицы.
salary_index sqlite_autoindex_COMPANY_1
Вы можете перечислить всю базу данных индексов следующим образом:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';
Команда DROP INDEX
Индекс можно удалить с помощью команды SQLite DROP . При отбрасывании индекса следует соблюдать осторожность, поскольку производительность может быть замедлена или улучшена.
Ниже приведен основной синтаксис:
DROP INDEX index_name;
Вы можете использовать следующую инструкцию для удаления ранее созданного индекса.
sqlite> DROP INDEX salary_index;
Когда следует избегать индексов?
Хотя индексы предназначены для повышения производительности базы данных, бывают случаи, когда их следует избегать. Следующие рекомендации указывают, когда следует пересмотреть использование индекса.
Индексы не должны использоваться в —
- Маленькие столики.
- Таблицы с частыми, крупными пакетными обновлениями или операциями вставки.
- Столбцы, содержащие большое количество значений NULL.
- Колонны, которыми часто манипулируют.
SQLite — предложение INDEXED BY
Предложение «INDEXED BY index-name» указывает, что именованный индекс должен использоваться для поиска значений в предыдущей таблице.
Если index-name не существует или не может быть использовано для запроса, подготовка оператора SQLite завершится неудачно.
Предложение «НЕ УКАЗАНО» указывает, что при доступе к предыдущей таблице не должен использоваться индекс, включая подразумеваемые индексы, созданные ограничениями UNIQUE и PRIMARY KEY.
Тем не менее, INTEGER PRIMARY KEY можно по-прежнему использовать для поиска записей, даже если указано «NOT INDEXED».
Синтаксис
Ниже приведен синтаксис предложения INDEXED BY, и его можно использовать с инструкциями DELETE, UPDATE или SELECT.
SELECT|DELETE|UPDATE column1, column2... INDEXED BY (index_name) table_name WHERE (CONDITION);
пример
Рассмотрим таблицу COMPANY. Мы создадим индекс и используем его для выполнения операции INDEXED BY.
sqlite> CREATE INDEX salary_index ON COMPANY(salary); sqlite>
Теперь, выбирая данные из таблицы COMPANY, вы можете использовать предложение INDEXED BY следующим образом:
sqlite> SELECT * FROM COMPANY INDEXED BY salary_index WHERE salary > 5000;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 7 James 24 Houston 10000.0 2 Allen 25 Texas 15000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
SQLite — команда ALTER TABLE
Команда SQLite ALTER TABLE изменяет существующую таблицу, не выполняя полный дамп и перезагрузку данных. Вы можете переименовать таблицу, используя инструкцию ALTER TABLE, а дополнительные столбцы можно добавить в существующую таблицу, используя инструкцию ALTER TABLE.
В SQLite не поддерживается никакая другая операция, поддерживаемая командой ALTER TABLE, кроме переименования таблицы и добавления столбца в существующую таблицу.
Синтаксис
Ниже приведен основной синтаксис команды ALTER TABLE для переименования существующей таблицы.
ALTER TABLE database_name.table_name RENAME TO new_table_name;
Ниже приведен основной синтаксис ALTER TABLE для добавления нового столбца в существующую таблицу.
ALTER TABLE database_name.table_name ADD COLUMN column_def...;
пример
Рассмотрим таблицу COMPANY со следующими записями:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Теперь давайте попробуем переименовать эту таблицу с помощью инструкции ALTER TABLE следующим образом:
sqlite> ALTER TABLE COMPANY RENAME TO OLD_COMPANY;
Приведенный выше оператор SQLite переименует таблицу COMPANY в OLD_COMPANY. Теперь давайте попробуем добавить новый столбец в таблицу OLD_COMPANY следующим образом:
sqlite> ALTER TABLE OLD_COMPANY ADD COLUMN SEX char(1);
Таблица COMPANY теперь изменена, и следующая будет выводом из инструкции SELECT.
ID NAME AGE ADDRESS SALARY SEX ---------- ---------- ---------- ---------- ---------- --- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Следует отметить, что вновь добавленный столбец заполнен значениями NULL.
SQLite — команда TRUNCATE TABLE
К сожалению, у нас нет команды TRUNCATE TABLE в SQLite, но вы можете использовать команду SQLite DELETE для удаления полных данных из существующей таблицы, хотя рекомендуется использовать команду DROP TABLE, чтобы удалить полную таблицу и заново создать ее.
Синтаксис
Ниже приведен основной синтаксис команды DELETE.
sqlite> DELETE FROM table_name;
Ниже приведен основной синтаксис DROP TABLE.
sqlite> DROP TABLE table_name;
Если вы используете команду DELETE TABLE для удаления всех записей, рекомендуется использовать команду VACUUM для очистки неиспользуемого пространства.
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример усечения таблицы выше.
SQLite> DELETE FROM COMPANY; SQLite> VACUUM;
Теперь таблица COMPANY полностью усекается и ничего не будет выводиться из оператора SELECT.
SQLite — Представления
Представление — это не что иное, как оператор SQLite, который хранится в базе данных со связанным именем. На самом деле это состав таблицы в форме предопределенного запроса SQLite.
Представление может содержать все строки таблицы или выбранные строки из одной или нескольких таблиц. Представление может быть создано из одной или нескольких таблиц, которые зависят от написанного запроса SQLite для создания представления.
Представления, которые являются своего рода виртуальными таблицами, позволяют пользователям —
-
Структурируйте данные так, чтобы пользователи или классы пользователей находили естественные или интуитивно понятные.
-
Ограничьте доступ к данным таким образом, чтобы пользователь мог видеть только ограниченные данные вместо полной таблицы.
-
Суммируйте данные из различных таблиц, которые можно использовать для создания отчетов.
Структурируйте данные так, чтобы пользователи или классы пользователей находили естественные или интуитивно понятные.
Ограничьте доступ к данным таким образом, чтобы пользователь мог видеть только ограниченные данные вместо полной таблицы.
Суммируйте данные из различных таблиц, которые можно использовать для создания отчетов.
Представления SQLite доступны только для чтения, и поэтому вы не сможете выполнить оператор DELETE, INSERT или UPDATE для представления. Однако вы можете создать триггер в представлении, которое запускается при попытке УДАЛИТЬ, ВСТАВИТЬ или ОБНОВИТЬ представление и делать то, что вам нужно, в теле триггера.
Создание видов
Представления SQLite создаются с помощью оператора CREATE VIEW . Представления SQLite могут быть созданы из одной таблицы, нескольких таблиц или другого представления.
Ниже приведен основной синтаксис CREATE VIEW.
CREATE [TEMP | TEMPORARY] VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
Вы можете включить несколько таблиц в свой оператор SELECT таким же образом, как вы используете их в обычном запросе SQL SELECT. Если присутствует необязательное ключевое слово TEMP или TEMPORARY, представление будет создано во временной базе данных.
пример
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ниже приведен пример создания представления из таблицы COMPANY. Это представление будет использоваться только для нескольких столбцов из таблицы COMPANY.
sqlite> CREATE VIEW COMPANY_VIEW AS SELECT ID, NAME, AGE FROM COMPANY;
Теперь вы можете запрашивать COMPANY_VIEW аналогично запросу реальной таблицы. Ниже приведен пример —
sqlite> SELECT * FROM COMPANY_VIEW;
Это даст следующий результат.
ID NAME AGE ---------- ---------- ---------- 1 Paul 32 2 Allen 25 3 Teddy 23 4 Mark 25 5 David 27 6 Kim 22 7 James 24
Отбрасывание просмотров
Чтобы отбросить представление, просто используйте оператор DROP VIEW с view_name . Основной синтаксис DROP VIEW выглядит следующим образом:
sqlite> DROP VIEW view_name;
Следующая команда удалит представление COMPANY_VIEW, которое мы создали в последнем разделе.
sqlite> DROP VIEW COMPANY_VIEW;
SQLite — Транзакции
Транзакция — это единица работы, выполняемая с базой данных. Транзакции — это единицы или последовательности работы, выполняемые в логическом порядке, либо вручную пользователем, либо автоматически какой-либо программой базы данных.
Транзакция — это распространение одного или нескольких изменений в базе данных. Например, если вы создаете, обновляете или удаляете запись из таблицы, вы выполняете транзакцию для таблицы. Важно контролировать транзакции для обеспечения целостности данных и обработки ошибок базы данных.
Практически вы объедините множество SQLite-запросов в группу и выполните их все вместе как часть транзакции.
Свойства сделок
Транзакции имеют следующие четыре стандартных свойства, на которые обычно ссылается аббревиатура ACID.
-
Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.
-
Согласованность — Гарантирует, что база данных корректно меняет состояния при успешной фиксации транзакции.
-
Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.
-
Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.
Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.
Согласованность — Гарантирует, что база данных корректно меняет состояния при успешной фиксации транзакции.
Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.
Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.
Контроль транзакций
Ниже приведены следующие команды, используемые для управления транзакциями:
-
BEGIN TRANSACTION — начать транзакцию.
-
COMMIT — для сохранения изменений вы также можете использовать команду END TRANSACTION .
-
ROLLBACK — для отката изменений.
BEGIN TRANSACTION — начать транзакцию.
COMMIT — для сохранения изменений вы также можете использовать команду END TRANSACTION .
ROLLBACK — для отката изменений.
Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, поскольку эти операции автоматически фиксируются в базе данных.
Команда НАЧАЛО СДЕЛКИ
Транзакции могут быть начаты с использованием BEGIN TRANSACTION или просто BEGIN. Такие транзакции обычно сохраняются до следующей команды COMMIT или ROLLBACK. Тем не менее, транзакция также будет ROLLBACK, если база данных закрыта или если произошла ошибка. Ниже приведен простой синтаксис для запуска транзакции.
BEGIN; or BEGIN TRANSACTION;
Команда COMMIT
Команда COMMIT — это команда транзакций, используемая для сохранения изменений, вызванных транзакцией, в базу данных.
Команда COMMIT сохраняет все транзакции в базе данных с момента последней команды COMMIT или ROLLBACK.
Ниже приведен синтаксис команды COMMIT.
COMMIT; or END TRANSACTION;
Команда ROLLBACK
Команда ROLLBACK — это команда транзакций, используемая для отмены транзакций, которые еще не были сохранены в базе данных.
Команду ROLLBACK можно использовать только для отмены транзакций с момента выполнения последней команды COMMIT или ROLLBACK.
Ниже приведен синтаксис команды ROLLBACK.
ROLLBACK;
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Теперь давайте начнем транзакцию и удалим записи из таблицы, имеющие возраст = 25. Затем с помощью команды ROLLBACK отмените все изменения.
sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> ROLLBACK;
Теперь, если вы проверите таблицу COMPANY, она все еще имеет следующие записи —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Давайте запустим еще одну транзакцию и удалим записи из таблицы, имеющие возраст = 25, и, наконец, мы используем команду COMMIT, чтобы зафиксировать все изменения.
sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> COMMIT;
Если вы сейчас проверите таблицу КОМПАНИИ по-прежнему имеет следующие записи —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
SQLite — подзапросы
Подзапрос или Внутренний запрос или Вложенный запрос — это запрос в другом запросе SQLite, встроенный в предложение WHERE.
Подзапрос используется для возврата данных, которые будут использоваться в основном запросе в качестве условия для дальнейшего ограничения данных, подлежащих извлечению.
Подзапросы могут использоваться с операторами SELECT, INSERT, UPDATE и DELETE вместе с такими операторами, как =, <,>,> =, <=, IN, BETWEEN и т. Д.
Есть несколько правил, которым должны следовать подзапросы —
-
Подзапросы должны быть заключены в круглые скобки.
-
У подзапроса может быть только один столбец в предложении SELECT, если в основном запросе нет нескольких столбцов для подзапроса для сравнения его выбранных столбцов.
-
ORDER BY нельзя использовать в подзапросе, хотя основной запрос может использовать ORDER BY. GROUP BY может использоваться для выполнения той же функции, что и ORDER BY в подзапросе.
-
Подзапросы, которые возвращают более одной строки, могут использоваться только с несколькими операторами значений, такими как оператор IN.
-
Оператор МЕЖДУ не может использоваться с подзапросом; тем не менее, МЕЖДУ можно использовать в подзапросе.
Подзапросы должны быть заключены в круглые скобки.
У подзапроса может быть только один столбец в предложении SELECT, если в основном запросе нет нескольких столбцов для подзапроса для сравнения его выбранных столбцов.
ORDER BY нельзя использовать в подзапросе, хотя основной запрос может использовать ORDER BY. GROUP BY может использоваться для выполнения той же функции, что и ORDER BY в подзапросе.
Подзапросы, которые возвращают более одной строки, могут использоваться только с несколькими операторами значений, такими как оператор IN.
Оператор МЕЖДУ не может использоваться с подзапросом; тем не менее, МЕЖДУ можно использовать в подзапросе.
Подзапросы с оператором SELECT
Подзапросы чаще всего используются с оператором SELECT. Основной синтаксис выглядит следующим образом —
SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])
пример
Рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Теперь давайте проверим следующий подзапрос с оператором SELECT.
sqlite> SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000) ;
Это даст следующий результат.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Подзапросы с оператором INSERT
Подзапросы также могут использоваться с операторами INSERT. Оператор INSERT использует данные, возвращенные из подзапроса, для вставки в другую таблицу. Выбранные данные в подзапросе могут быть изменены с помощью любой символьной, даты или числовой функции.
Ниже приведен основной синтаксис:
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
пример
Рассмотрим таблицу COMPANY_BKP с такой же структурой, что и таблица COMPANY, и ее можно создать, используя тот же CREATE TABLE, используя COMPANY_BKP, что и имя таблицы. Чтобы скопировать полную таблицу COMPANY в COMPANY_BKP, следующий синтаксис —
sqlite> INSERT INTO COMPANY_BKP SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY) ;
Подзапросы с оператором UPDATE
Подзапрос может использоваться вместе с оператором UPDATE. Можно использовать один или несколько столбцов в таблице при использовании подзапроса с оператором UPDATE.
Ниже приведен основной синтаксис:
UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
пример
Предполагая, что у нас есть таблица COMPANY_BKP, которая является резервной копией таблицы COMPANY.
В следующем примере значение SALARY обновляется в 0,5 раза в таблице COMPANY для всех клиентов, возраст которых больше или равен 27.
sqlite> UPDATE COMPANY SET SALARY = SALARY * 0.50 WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE >= 27 );
Это повлияет на две строки, и, наконец, таблица COMPANY будет иметь следующие записи:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 10000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 42500.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Подзапросы с оператором DELETE
Подзапрос может использоваться вместе с оператором DELETE, как и любые другие операторы, упомянутые выше.
Ниже приведен основной синтаксис:
DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
пример
Предполагая, что у нас есть таблица COMPANY_BKP, которая является резервной копией таблицы COMPANY.
В следующем примере удаляются записи из таблицы COMPANY для всех клиентов, чей возраст больше или равен 27.
sqlite> DELETE FROM COMPANY WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE > 27 );
Это повлияет на две строки, и, наконец, таблица COMPANY будет иметь следующие записи:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 42500.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
SQLite — AUTOINCREMENT
SQLite AUTOINCREMENT — это ключевое слово, используемое для автоматического увеличения значения поля в таблице. Мы можем автоматически увеличивать значение поля, используя ключевое слово AUTOINCREMENT при создании таблицы с определенным именем столбца для автоматического увеличения.
Ключевое слово AUTOINCREMENT может использоваться только с полем INTEGER.
Синтаксис
Основное использование ключевого слова AUTOINCREMENT следующее:
CREATE TABLE table_name( column1 INTEGER AUTOINCREMENT, column2 datatype, column3 datatype, ..... columnN datatype, );
пример
Рассмотрим таблицу COMPANY, которая будет создана следующим образом:
sqlite> CREATE TABLE COMPANY( ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Теперь вставьте следующие записи в таблицу COMPANY —
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ('Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ('Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 ); INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'David', 27, 'Texas', 85000.00 ); INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Kim', 22, 'South-Hall', 45000.00 ); INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'James', 24, 'Houston', 10000.00 );
Это вставит 7 кортежей в таблицу COMPANY, и COMPANY будет иметь следующие записи:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
SQLite — Инъекция
Если вы берете пользовательский ввод через веб-страницу и вставляете его в базу данных SQLite, есть вероятность, что вы широко открыли для себя проблему безопасности, известную как SQL-инъекция. В этой главе вы узнаете, как предотвратить это и защитить ваши сценарии и операторы SQLite.
Инъекция обычно происходит, когда вы запрашиваете ввод данных у пользователя, например, его имя, и вместо имени они дают вам оператор SQLite, который вы будете бессознательно выполнять в своей базе данных.
Никогда не доверяйте предоставленным пользователем данным, обрабатывайте эти данные только после проверки; как правило, это делается путем сопоставления с образцом. В следующем примере имя пользователя ограничено буквенно-цифровыми символами с подчеркиванием и длиной от 8 до 20 символов — при необходимости измените эти правила.
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)){ $db = new SQLiteDatabase('filename'); $result = @$db->query("SELECT * FROM users WHERE username = $matches[0]"); } else { echo "username not accepted"; }
Чтобы продемонстрировать проблему, рассмотрим этот отрывок —
$name = "Qadir'; DELETE FROM users;"; @$db->query("SELECT * FROM users WHERE username = '{$name}'");
Предполагается, что вызов функции извлекает запись из таблицы пользователей, где столбец имени соответствует имени, указанному пользователем. В обычных условиях $ name будет содержать только буквенно-цифровые символы и, возможно, пробелы, такие как строка ilia. Однако в этом случае, добавив совершенно новый запрос к $ name, вызов к базе данных превращается в катастрофу: введенный запрос DELETE удаляет все записи у пользователей.
Существуют интерфейсы баз данных, которые не разрешают укладку запросов или выполнение нескольких запросов за один вызов функции. Если вы попытаетесь сложить запросы, вызов завершится неудачно, но SQLite и PostgreSQL с радостью выполнят сложенные запросы, выполнив все запросы, представленные в одной строке, и создадут серьезную проблему безопасности.
Предотвращение SQL-инъекций
Вы можете грамотно обрабатывать все escape-символы на языках сценариев, таких как PERL и PHP. Язык программирования PHP предоставляет функцию string sqlite_escape_string () для экранирования входных символов, специфичных для SQLite.
if (get_magic_quotes_gpc()) { $name = sqlite_escape_string($name); } $result = @$db->query("SELECT * FROM users WHERE username = '{$name}'");
Несмотря на то, что кодировка делает вставку данных безопасной, она сделает простые текстовые сравнения и предложения LIKE в ваших запросах непригодными для столбцов, содержащих двоичные данные.
Примечание — addlashes () НЕ должен использоваться для цитирования ваших строк для запросов SQLite; это приведет к странным результатам при получении ваших данных.
SQLite — ОБЪЯСНИТЬ
Оператору SQLite может предшествовать ключевое слово «EXPLAIN» или фраза «EXPLAIN QUERY PLAN», используемая для описания деталей таблицы.
Любая модификация приводит к тому, что оператор SQLite ведет себя как запрос и возвращает информацию о том, как работал бы оператор SQLite, если бы ключевое слово или фраза EXPLAIN были опущены.
-
Выходные данные из EXPLAIN и EXPLAIN QUERY PLAN предназначены только для интерактивного анализа и устранения неполадок.
-
Детали формата вывода могут быть изменены с одного выпуска SQLite на следующий.
-
Приложения не должны использовать EXPLAIN или EXPLAIN QUERY PLAN, поскольку их точное поведение является переменным и только частично документировано.
Выходные данные из EXPLAIN и EXPLAIN QUERY PLAN предназначены только для интерактивного анализа и устранения неполадок.
Детали формата вывода могут быть изменены с одного выпуска SQLite на следующий.
Приложения не должны использовать EXPLAIN или EXPLAIN QUERY PLAN, поскольку их точное поведение является переменным и только частично документировано.
Синтаксис
синтаксис для EXPLAIN выглядит следующим образом —
EXPLAIN [SQLite Query]
Синтаксис для EXPLAIN QUERY PLAN выглядит следующим образом:
EXPLAIN QUERY PLAN [SQLite Query]
пример
Рассмотрим таблицу COMPANY со следующими записями —
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Теперь давайте проверим следующий подзапрос с оператором SELECT —
sqlite> EXPLAIN SELECT * FROM COMPANY WHERE Salary >= 20000;
Это даст следующий результат.
addr opcode p1 p2 p3 ---------- ---------- ---------- ---------- ---------- 0 Goto 0 19 1 Integer 0 0 2 OpenRead 0 8 3 SetNumColu 0 5 4 Rewind 0 17 5 Column 0 4 6 RealAffini 0 0 7 Integer 20000 0 8 Lt 357 16 collseq(BI 9 Rowid 0 0 10 Column 0 1 11 Column 0 2 12 Column 0 3 13 Column 0 4 14 RealAffini 0 0 15 Callback 5 0 16 Next 0 5 17 Close 0 0 18 Halt 0 0 19 Transactio 0 0 20 VerifyCook 0 38 21 Goto 0 1 22 Noop 0 0
Теперь давайте проверим следующий план объяснения запроса с помощью инструкции SELECT:
SQLite> EXPLAIN QUERY PLAN SELECT * FROM COMPANY WHERE Salary >= 20000; order from detail ---------- ---------- ------------- 0 0 TABLE COMPANY
SQLite — ВАКУУМ
Команда VACUUM очищает основную базу данных путем копирования ее содержимого во временный файл базы данных и перезагрузки исходного файла базы данных из копии. Это устраняет свободные страницы, выравнивает данные таблицы, чтобы они были смежными, и в противном случае очищает структуру файла базы данных.
Команда VACUUM может изменить ROWID записей в таблицах, которые не имеют явного INTEGER PRIMARY KEY. Команда VACUUM работает только в основной базе данных. Невозможно VACUUM прикрепленный файл базы данных.
Команда VACUUM не будет выполнена, если есть активная транзакция. Команда VACUUM не предназначена для баз данных в памяти. Поскольку команда VACUUM восстанавливает файл базы данных с нуля, VACUUM также можно использовать для изменения многих параметров конфигурации, специфичных для базы данных.
Ручной ВАКУУМ
Ниже приведен простой синтаксис для выдачи команды VACUUM для всей базы данных из командной строки:
$sqlite3 database_name "VACUUM;"
Вы можете запустить VACUUM из командной строки SQLite, а также:
sqlite> VACUUM;
Вы также можете запустить VACUUM для определенной таблицы следующим образом:
sqlite> VACUUM table_name;
Авто-VACCUM
SQLite Auto-VACUUM не делает то же самое, что VACUUM, а лишь перемещает свободные страницы в конец базы данных, тем самым уменьшая размер базы данных. Таким образом он может существенно фрагментировать базу данных, а VACUUM обеспечивает дефрагментацию. Следовательно, Auto-VACUUM просто сохраняет базу данных маленькой.
Вы можете включить / отключить автоочистку SQLite с помощью следующих прагм, запущенных в командной строке SQLite:
sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum sqlite> PRAGMA auto_vacuum = FULL; -- 1 means enable full auto vacuum sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 2 means enable incremental vacuum
Вы можете выполнить следующую команду из командной строки, чтобы проверить настройку автоматического вакуума —
$sqlite3 database_name "PRAGMA auto_vacuum;"
SQLite — дата и время
SQLite поддерживает пять функций даты и времени следующим образом:
Sr.No. | функция | пример |
---|---|---|
1 | дата (временная строка, модификаторы …) | Возвращает дату в следующем формате: ГГГГ-ММ-ДД |
2 | время (временная строка, модификаторы …) | Это возвращает время как ЧЧ: ММ: СС |
3 | datetime (временная строка, модификаторы …) | Возвращает ГГГГ-ММ-ДД ЧЧ: ММ: СС |
4 | julianday (временные ряды, модификаторы …) | Возвращает количество дней с полудня в Гринвиче 24 ноября 4714 г. до н.э. |
5 | strftime (временная строка, модификаторы …) | Это возвращает дату, отформатированную в соответствии со строкой форматирования, указанной в качестве первого аргумента, отформатированного в соответствии с форматерами, поясненными ниже. |
Все вышеперечисленные пять функций даты и времени принимают строку времени в качестве аргумента. За временной строкой следует ноль или более модификаторов. Функция strftime () также принимает строку формата в качестве первого аргумента. Следующий раздел предоставит вам подробную информацию о различных типах временных строк и модификаторов.
Строки времени
Временная строка может быть в любом из следующих форматов —
Sr.No. | Строка времени | пример |
---|---|---|
1 | YYYY-MM-DD | 2010-12-30 |
2 | ГГГГ-ММ-ДД ЧЧ: ММ | 2010-12-30 12:10 |
3 | ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС | 2010-12-30 12: 10: 04.100 |
4 | ММ-ДД-ГГГГ ЧЧ: ММ | 30-12-2010 12:10 |
5 | HH: MM | 12:10 |
6 | ГГГГ-ММ-ДД Т ЧЧ: ММ | 2010-12-30 12:10 |
7 | НН: ММ: СС | 12:10:01 |
8 | ГГГГММДД ЧЧММСС | 20101230 121001 |
9 | сейчас | 2013-05-07 |
Вы можете использовать букву «Т» в качестве буквального символа, разделяющего дату и время.
Модификаторы
За временной строкой может следовать ноль или более модификаторов, которые будут изменять дату и / или время, возвращаемое любой из вышеперечисленных пяти функций. Модификаторы применяются слева направо.
Следующие модификаторы доступны в SQLite —
- ННН дней
- NNN часов
- NNN минут
- NNN.NNNN секунд
- NNN месяцев
- NNN лет
- начало месяца
- начало года
- начало дня
- день недели N
- unixepoch
- местное время
- универсальное глобальное время
Форматтеры
SQLite предоставляет очень удобную функцию strftime () для форматирования любой даты и времени. Вы можете использовать следующие замены для форматирования даты и времени.
подмена | Описание |
---|---|
% d | День месяца, 01-31 |
% е | Дробные секунды, СС.ССС |
%ЧАС | Час, 00-23 |
% J | День года, 001-366 |
% J | Юлианский номер дня, DDDD.DDDD |
% м | Месяц, 00-12 |
% M | Минута 00-59 |
% s | Секунды с 1970-01-01 |
% S | Секунды, 00-59 |
% мас | День недели 0-6 (0 — воскресенье) |
% W | Неделя года, 01-53 |
% Y | Год, ГГГГ |
%% | % условное обозначение |
Примеры
Давайте теперь попробуем различные примеры, используя подсказку SQLite. Следующая команда вычисляет текущую дату.
sqlite> SELECT date('now'); 2013-05-07
Следующая команда вычисляет последний день текущего месяца.
sqlite> SELECT date('now','start of month','+1 month','-1 day'); 2013-05-31
Следующая команда вычисляет дату и время для данной метки времени UNIX 1092941466.
sqlite> SELECT datetime(1092941466, 'unixepoch'); 2004-08-19 18:51:06
Следующая команда вычисляет дату и время для данной метки времени UNIX 1092941466 и компенсирует ваш местный часовой пояс.
sqlite> SELECT datetime(1092941466, 'unixepoch', 'localtime'); 2004-08-19 13:51:06
Следующая команда вычисляет текущую метку времени UNIX.
sqlite> SELECT strftime('%s','now'); 1393348134
Следующая команда подсчитывает количество дней с момента подписания Декларации независимости США.
sqlite> SELECT julianday('now') - julianday('1776-07-04'); 86798.7094695023
Следующая команда вычисляет количество секунд с определенного момента в 2004 году.
sqlite> SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56'); 295001572
Следующая команда вычисляет дату первого вторника октября текущего года.
sqlite> SELECT date('now','start of year','+9 months','weekday 2'); 2013-10-01
Следующая команда вычисляет время с начала эпохи UNIX в секундах (например, strftime (‘% s’, ‘now’), за исключением того, что включает дробную часть).
sqlite> SELECT (julianday('now') - 2440587.5)*86400.0; 1367926077.12598
Для преобразования между временем UTC и местным временем при форматировании даты используйте модификаторы utc или localtime следующим образом:
sqlite> SELECT time('12:00', 'localtime'); 05:00:00
sqlite> SELECT time('12:00', 'utc'); 19:00:00
SQLite — Полезные функции
SQLite имеет много встроенных функций для обработки строковых или числовых данных. Ниже приведен список нескольких полезных встроенных функций SQLite, и все они чувствительны к регистру, что означает, что вы можете использовать эти функции либо в нижнем регистре, либо в верхнем регистре, либо в смешанной форме. Для получения более подробной информации вы можете проверить официальную документацию для SQLite.
Sr.No. | Описание функции |
---|---|
1 |
Функция SQLite COUNT Агрегатная функция SQLite COUNT используется для подсчета количества строк в таблице базы данных. |
2 |
Функция SQLite MAX Агрегатная функция SQLite MAX позволяет нам выбрать максимальное (максимальное) значение для определенного столбца. |
3 |
Функция SQLite MIN Агрегатная функция SQLite MIN позволяет нам выбрать самое низкое (минимальное) значение для определенного столбца. |
4 |
Функция SQLite AVG Агрегатная функция SQLite AVG выбирает среднее значение для определенного столбца таблицы. |
5 |
SQLite SUM Функция Агрегатная функция SQLite SUM позволяет выбрать сумму для числового столбца. |
6 |
СЛУЧАЙНАЯ функция SQLite Функция SQLite RANDOM возвращает псевдослучайное целое число от -9223372036854775808 до +9223372036854775807. |
7 |
Функция SQLite ABS Функция SQLite ABS возвращает абсолютное значение числового аргумента. |
8 |
Верхняя функция SQLite Функция SQLite UPPER преобразует строку в заглавные буквы. |
9 |
Функция SQLite LOWER Функция SQLite LOWER преобразует строку в строчные буквы. |
10 |
SQLite ДЛИНА Функция Функция SQLite LENGTH возвращает длину строки. |
11 |
SQLite sqlite_version Функция SQLite sqlite_version функция возвращает версию библиотеки SQLite. |
Функция SQLite COUNT
Агрегатная функция SQLite COUNT используется для подсчета количества строк в таблице базы данных.
Функция SQLite MAX
Агрегатная функция SQLite MAX позволяет нам выбрать максимальное (максимальное) значение для определенного столбца.
Функция SQLite MIN
Агрегатная функция SQLite MIN позволяет нам выбрать самое низкое (минимальное) значение для определенного столбца.
Функция SQLite AVG
Агрегатная функция SQLite AVG выбирает среднее значение для определенного столбца таблицы.
SQLite SUM Функция
Агрегатная функция SQLite SUM позволяет выбрать сумму для числового столбца.
СЛУЧАЙНАЯ функция SQLite
Функция SQLite RANDOM возвращает псевдослучайное целое число от -9223372036854775808 до +9223372036854775807.
Функция SQLite ABS
Функция SQLite ABS возвращает абсолютное значение числового аргумента.
Верхняя функция SQLite
Функция SQLite UPPER преобразует строку в заглавные буквы.
Функция SQLite LOWER
Функция SQLite LOWER преобразует строку в строчные буквы.
SQLite ДЛИНА Функция
Функция SQLite LENGTH возвращает длину строки.
SQLite sqlite_version Функция
SQLite sqlite_version функция возвращает версию библиотеки SQLite.
Прежде чем мы начнем давать примеры вышеупомянутых функций, рассмотрим таблицу COMPANY со следующими записями.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Функция SQLite COUNT
Агрегатная функция SQLite COUNT используется для подсчета количества строк в таблице базы данных. Ниже приведен пример —
sqlite> SELECT count(*) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
count(*) ---------- 7
Функция SQLite MAX
Агрегатная функция SQLite MAX позволяет нам выбрать максимальное (максимальное) значение для определенного столбца. Ниже приведен пример —
sqlite> SELECT max(salary) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
max(salary) ----------- 85000.0
Функция SQLite MIN
Агрегатная функция SQLite MIN позволяет нам выбрать самое низкое (минимальное) значение для определенного столбца. Ниже приведен пример —
sqlite> SELECT min(salary) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
min(salary) ----------- 10000.0
Функция SQLite AVG
Агрегатная функция SQLite AVG выбирает среднее значение для определенного столбца таблицы. Ниже приведен пример —
sqlite> SELECT avg(salary) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
avg(salary) ---------------- 37142.8571428572
SQLite SUM Функция
Агрегатная функция SQLite SUM позволяет выбрать сумму для числового столбца. Ниже приведен пример —
sqlite> SELECT sum(salary) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
sum(salary) ----------- 260000.0
СЛУЧАЙНАЯ функция SQLite
Функция SQLite RANDOM возвращает псевдослучайное целое число от -9223372036854775808 до +9223372036854775807. Ниже приведен пример —
sqlite> SELECT random() AS Random;
Приведенный выше оператор SQLite SQL выдаст следующее.
Random ------------------- 5876796417670984050
Функция SQLite ABS
Функция SQLite ABS возвращает абсолютное значение числового аргумента. Ниже приведен пример —
sqlite> SELECT abs(5), abs(-15), abs(NULL), abs(0), abs("ABC");
Приведенный выше оператор SQLite SQL выдаст следующее.
abs(5) abs(-15) abs(NULL) abs(0) abs("ABC") ---------- ---------- ---------- ---------- ---------- 5 15 0 0.0
Верхняя функция SQLite
Функция SQLite UPPER преобразует строку в заглавные буквы. Ниже приведен пример —
sqlite> SELECT upper(name) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
upper(name) ----------- PAUL ALLEN TEDDY MARK DAVID KIM JAMES
Функция SQLite LOWER
Функция SQLite LOWER преобразует строку в строчные буквы. Ниже приведен пример —
sqlite> SELECT lower(name) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
lower(name) ----------- paul allen teddy mark david kim james
SQLite ДЛИНА Функция
Функция SQLite LENGTH возвращает длину строки. Ниже приведен пример —
sqlite> SELECT name, length(name) FROM COMPANY;
Приведенный выше оператор SQLite SQL выдаст следующее.
NAME length(name) ---------- ------------ Paul 4 Allen 5 Teddy 5 Mark 4 David 5 Kim 3 James 5
SQLite sqlite_version Функция
SQLite sqlite_version функция возвращает версию библиотеки SQLite. Ниже приведен пример —
sqlite> SELECT sqlite_version() AS 'SQLite Version';
Приведенный выше оператор SQLite SQL выдаст следующее.
SQLite Version -------------- 3.6.20
SQLite — C / C ++
В этой главе вы узнаете, как использовать SQLite в программах на C / C ++.
Монтаж
Прежде чем вы начнете использовать SQLite в наших программах на C / C ++, вам необходимо убедиться, что на компьютере установлена библиотека SQLite. Вы можете проверить главу Установка SQLite, чтобы понять процесс установки.
API интерфейса C / C ++
Ниже приведены важные подпрограммы интерфейса SQLite на C / C ++, которые могут удовлетворить ваши требования по работе с базой данных SQLite из вашей программы на C / C ++. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию по SQLite.
Sr.No. | API и описание |
---|---|
1 |
sqlite3_open (const char * имя файла, sqlite3 ** ppDb) Эта подпрограмма открывает соединение с файлом базы данных SQLite и возвращает объект соединения с базой данных, который будет использоваться другими подпрограммами SQLite. Если аргумент имени файла равен NULL или ‘: memory:’, sqlite3_open () создаст базу данных в оперативной памяти в ОЗУ, которая будет действовать только в течение сеанса. Если имя файла не NULL, sqlite3_open () пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, sqlite3_open () откроет новый файл базы данных с этим именем. |
2 |
sqlite3_exec (sqlite3 *, const char * sql, sqlite_callback, void * data, char ** errmsg) Эта подпрограмма обеспечивает быстрый и простой способ выполнения команд SQL, предоставляемых аргументом sql, который может состоять из нескольких команд SQL. Здесь первый аргумент sqlite3 — это открытый объект базы данных, sqlite_callback — это обратный вызов, для которого данные являются 1-м аргументом, и будет возвращено значение errmsg, чтобы зафиксировать любую ошибку, вызванную процедурой. Процедура SQLite3_exec () анализирует и выполняет каждую команду, указанную в аргументе sql, до тех пор, пока не достигнет конца строки или не обнаружит ошибку. |
3 |
sqlite3_close (sqlite3 *) Эта процедура закрывает соединение с базой данных, ранее открытое вызовом sqlite3_open (). Все подготовленные заявления, связанные с соединением, должны быть завершены до закрытия соединения. Если остаются какие-либо запросы, которые не были завершены, sqlite3_close () вернет SQLITE_BUSY с сообщением об ошибке «Невозможно закрыть из-за незавершенных операторов». |
sqlite3_open (const char * имя файла, sqlite3 ** ppDb)
Эта подпрограмма открывает соединение с файлом базы данных SQLite и возвращает объект соединения с базой данных, который будет использоваться другими подпрограммами SQLite.
Если аргумент имени файла равен NULL или ‘: memory:’, sqlite3_open () создаст базу данных в оперативной памяти в ОЗУ, которая будет действовать только в течение сеанса.
Если имя файла не NULL, sqlite3_open () пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, sqlite3_open () откроет новый файл базы данных с этим именем.
sqlite3_exec (sqlite3 *, const char * sql, sqlite_callback, void * data, char ** errmsg)
Эта подпрограмма обеспечивает быстрый и простой способ выполнения команд SQL, предоставляемых аргументом sql, который может состоять из нескольких команд SQL.
Здесь первый аргумент sqlite3 — это открытый объект базы данных, sqlite_callback — это обратный вызов, для которого данные являются 1-м аргументом, и будет возвращено значение errmsg, чтобы зафиксировать любую ошибку, вызванную процедурой.
Процедура SQLite3_exec () анализирует и выполняет каждую команду, указанную в аргументе sql, до тех пор, пока не достигнет конца строки или не обнаружит ошибку.
sqlite3_close (sqlite3 *)
Эта процедура закрывает соединение с базой данных, ранее открытое вызовом sqlite3_open (). Все подготовленные заявления, связанные с соединением, должны быть завершены до закрытия соединения.
Если остаются какие-либо запросы, которые не были завершены, sqlite3_close () вернет SQLITE_BUSY с сообщением об ошибке «Невозможно закрыть из-за незавершенных операторов».
Подключиться к базе данных
Следующий сегмент кода C показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
#include <stdio.h> #include <sqlite3.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } sqlite3_close(db); }
Теперь давайте скомпилируем и запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию.
$gcc test.c -l sqlite3 $./a.out Opened database successfully
Если вы собираетесь использовать исходный код C ++, вы можете скомпилировать свой код следующим образом:
$g++ test.c -l sqlite3
Здесь мы связываем нашу программу с библиотекой sqlite3 для предоставления необходимых функций для C-программы. Это создаст файл базы данных test.db в вашем каталоге, и вы получите следующий результат.
-rwxr-xr-x. 1 root root 7383 May 8 02:06 a.out -rw-r--r--. 1 root root 323 May 8 02:05 test.c -rw-r--r--. 1 root root 0 May 8 02:06 test.db
Создать таблицу
Следующий сегмент кода C будет использоваться для создания таблицы в ранее созданной базе данных —
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stdout, "Opened database successfully\n"); } /* Create SQL statement */ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Table created successfully\n"); } sqlite3_close(db); return 0; }
Когда вышеуказанная программа скомпилирована и выполнена, она создаст таблицу COMPANY в вашем test.db, и окончательный список файлов будет выглядеть следующим образом:
-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out -rw-r--r--. 1 root root 1207 May 8 02:31 test.c -rw-r--r--. 1 root root 3072 May 8 02:31 test.db
ВСТАВИТЬ Операция
Следующий сегмент кода C показывает, как вы можете создавать записи в таблице COMPANY, созданной в приведенном выше примере —
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Records created successfully\n"); } sqlite3_close(db); return 0; }
Когда вышеупомянутая программа скомпилирована и выполнена, она создаст данные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
Прежде чем приступить к действительному примеру для извлечения записей, давайте рассмотрим некоторые подробности о функции обратного вызова, которую мы используем в наших примерах. Этот обратный вызов обеспечивает способ получения результатов из операторов SELECT. Он имеет следующую декларацию —
typedef int (*sqlite3_callback)( void*, /* Data provided in the 4th argument of sqlite3_exec() */ int, /* The number of columns in row */ char**, /* An array of strings representing fields in the row */ char** /* An array of strings representing column names */ );
Если вышеуказанный обратный вызов предоставляется в подпрограмме sqlite_exec () в качестве третьего аргумента, SQLite будет вызывать эту функцию обратного вызова для каждой записи, обрабатываемой в каждом операторе SELECT, выполняемом в аргументе SQL.
Следующий сегмент кода C показывает, как вы можете извлекать и отображать записи из таблицы COMPANY, созданной в приведенном выше примере —
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
Когда вышеуказанная программа скомпилирована и выполнена, она даст следующий результат.
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 Callback function called: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
ОБНОВЛЕНИЕ Операция
Следующий сегмент кода C показывает, как мы можем использовать оператор UPDATE, чтобы обновить любую запись, а затем извлечь и отобразить обновленные записи из таблицы COMPANY.
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create merged SQL statement */ sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \ "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
Когда вышеуказанная программа скомпилирована и выполнена, она даст следующий результат.
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 Callback function called: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
УДАЛЕНИЕ Операция
Следующий сегмент кода C показывает, как вы можете использовать инструкцию DELETE, чтобы удалить любую запись, а затем извлечь и отобразить остальные записи из таблицы COMPANY.
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName) { int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create merged SQL statement */ sql = "DELETE from COMPANY where ID=2; " \ "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
Когда вышеуказанная программа скомпилирована и выполнена, она даст следующий результат.
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
SQLite — Java
В этой главе вы узнаете, как использовать SQLite в программах на Java.
Монтаж
Перед тем, как вы начнете использовать SQLite в наших программах на Java, вам необходимо убедиться, что на компьютере установлены драйвер SQLite JDBC и Java. Вы можете проверить учебник Java для установки Java на вашем компьютере. Теперь давайте проверим, как настроить драйвер SQLite JDBC.
-
Загрузите последнюю версию sqlite-jdbc- (VERSION) .jar из репозитория sqlite-jdbc .
-
Добавьте скачанный jar-файл sqlite-jdbc- (VERSION) .jar в путь к классу или используйте его вместе с параметром -classpath, как описано в следующих примерах.
Загрузите последнюю версию sqlite-jdbc- (VERSION) .jar из репозитория sqlite-jdbc .
Добавьте скачанный jar-файл sqlite-jdbc- (VERSION) .jar в путь к классу или используйте его вместе с параметром -classpath, как описано в следующих примерах.
В следующем разделе предполагается, что у вас мало знаний о концепциях Java JDBC. Если вы этого не сделаете, то рекомендуется потратить полчаса с JDBC Tutorial, чтобы освоиться с концепциями, описанными ниже.
Подключиться к базе данных
Следующие программы Java показывают, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Opened database successfully"); } }
Теперь давайте скомпилируем и запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию. Мы предполагаем, что текущая версия драйвера JDBC sqlite-jdbc-3.7.2.jar доступна по текущему пути.
$javac SQLiteJDBC.java $java -classpath ".:sqlite-jdbc-3.7.2.jar" SQLiteJDBC Open database successfully
Если вы собираетесь использовать Windows-машину, вы можете скомпилировать и запустить свой код следующим образом:
$javac SQLiteJDBC.java $java -classpath ".;sqlite-jdbc-3.7.2.jar" SQLiteJDBC Opened database successfully
Создать таблицу
Следующая Java-программа будет использоваться для создания таблицы в ранее созданной базе данных.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "CREATE TABLE COMPANY " + "(ID INT PRIMARY KEY NOT NULL," + " NAME TEXT NOT NULL, " + " AGE INT NOT NULL, " + " ADDRESS CHAR(50), " + " SALARY REAL)"; stmt.executeUpdate(sql); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Table created successfully"); } }
Когда вышеупомянутая программа скомпилирована и выполнена, она создаст таблицу COMPANY в вашем test.db, и окончательный листинг файла будет следующим:
-rw-r--r--. 1 root root 3201128 Jan 22 19:04 sqlite-jdbc-3.7.2.jar -rw-r--r--. 1 root root 1506 May 8 05:43 SQLiteJDBC.class -rw-r--r--. 1 root root 832 May 8 05:42 SQLiteJDBC.java -rw-r--r--. 1 root root 3072 May 8 05:43 test.db
ВСТАВИТЬ Операция
Следующая Java-программа показывает, как создавать записи в таблице COMPANY, созданной в приведенном выше примере.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (1, 'Paul', 32, 'California', 20000.00 );"; stmt.executeUpdate(sql); sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (2, 'Allen', 25, 'Texas', 15000.00 );"; stmt.executeUpdate(sql); sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );"; stmt.executeUpdate(sql); sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );"; stmt.executeUpdate(sql); stmt.close(); c.commit(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Records created successfully"); } }
Когда вышеуказанная программа скомпилирована и выполнена, она создаст данные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
Следующая Java-программа показывает, как извлечь и отобразить записи из таблицы COMPANY, созданной в приведенном выше примере.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
Когда вышеуказанная программа скомпилирована и выполнена, она даст следующий результат.
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
ОБНОВЛЕНИЕ Операция
Следующий код Java показывает, как использовать инструкцию UPDATE, чтобы обновить любую запись, а затем извлечь и отобразить обновленные записи из таблицы COMPANY.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
Когда вышеуказанная программа скомпилирована и выполнена, она даст следующий результат.
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
УДАЛЕНИЕ Операция
Следующий код Java показывает, как использовать оператор DELETE для удаления любой записи, а затем извлечь и отобразить остальные записи из таблицы нашей КОМПАНИИ.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "DELETE from COMPANY where ID=2;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
Когда вышеуказанная программа скомпилирована и выполнена, она даст следующий результат.
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
SQLite — PHP
В этой главе вы узнаете, как использовать SQLite в программах PHP.
Монтаж
Расширение SQLite3 включено по умолчанию начиная с PHP 5.3.0. Это можно отключить, используя —without-sqlite3 во время компиляции.
Пользователи Windows должны включить php_sqlite3.dll, чтобы использовать это расширение. Эта DLL включена в дистрибутивы Windows для PHP начиная с PHP 5.3.0.
Для получения подробных инструкций по установке, пожалуйста, просмотрите наш учебник по PHP и его официальный сайт.
API интерфейса PHP
Ниже приведены важные процедуры PHP, которые могут удовлетворить ваши требования для работы с базой данных SQLite из вашей программы PHP. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию по PHP.
Sr.No. | API и описание |
---|---|
1 |
public void SQLite3 :: open (имя файла, флаги, ключ шифрования) Открывает базу данных SQLite 3. Если сборка включает шифрование, то она попытается использовать ключ. Если имя файла задано как «: memory:» , SQLite3 :: open () создаст базу данных в оперативной памяти в ОЗУ, которая действует только на время сеанса. Если имя файла является фактическим именем файла устройства, SQLite3 :: open () пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, то создается новый файл базы данных с таким именем. Необязательные флаги используются для определения того, как открыть базу данных SQLite. По умолчанию open использует SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE. |
2 |
public bool SQLite3 :: exec (строка $ query) Эта подпрограмма обеспечивает быстрый и простой способ выполнения команд SQL, предоставляемых аргументом sql, который может состоять из нескольких команд SQL. Эта подпрограмма используется для выполнения запроса без результата к данной базе данных. |
3 |
public SQLite3Result SQLite3 :: query (строка $ query) Эта подпрограмма выполняет запрос SQL, возвращая объект SQLite3Result, если запрос возвращает результаты. |
4 |
public int SQLite3 :: lastErrorCode (void) Эта подпрограмма возвращает числовой код результата последнего неудачного запроса SQLite. |
5 |
открытая строка SQLite3 :: lastErrorMsg (void) Эта подпрограмма возвращает текст на английском языке, описывающий самый последний неудачный запрос SQLite. |
6 |
public int SQLite3 :: changes (void) Эта подпрограмма возвращает количество строк базы данных, которые были обновлены, вставлены или удалены самой последней инструкцией SQL. |
7 |
public bool SQLite3 :: close (void) Эта подпрограмма закрывает соединение с базой данных, ранее открытое при вызове SQLite3 :: open (). |
8 |
открытая строка SQLite3 :: escapeString (строка $ value) Эта подпрограмма возвращает строку, которая была должным образом экранирована для безопасного включения в оператор SQL. |
public void SQLite3 :: open (имя файла, флаги, ключ шифрования)
Открывает базу данных SQLite 3. Если сборка включает шифрование, то она попытается использовать ключ.
Если имя файла задано как «: memory:» , SQLite3 :: open () создаст базу данных в оперативной памяти в ОЗУ, которая действует только на время сеанса.
Если имя файла является фактическим именем файла устройства, SQLite3 :: open () пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, то создается новый файл базы данных с таким именем.
Необязательные флаги используются для определения того, как открыть базу данных SQLite. По умолчанию open использует SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE.
public bool SQLite3 :: exec (строка $ query)
Эта подпрограмма обеспечивает быстрый и простой способ выполнения команд SQL, предоставляемых аргументом sql, который может состоять из нескольких команд SQL. Эта подпрограмма используется для выполнения запроса без результата к данной базе данных.
public SQLite3Result SQLite3 :: query (строка $ query)
Эта подпрограмма выполняет запрос SQL, возвращая объект SQLite3Result, если запрос возвращает результаты.
public int SQLite3 :: lastErrorCode (void)
Эта подпрограмма возвращает числовой код результата последнего неудачного запроса SQLite.
открытая строка SQLite3 :: lastErrorMsg (void)
Эта подпрограмма возвращает текст на английском языке, описывающий самый последний неудачный запрос SQLite.
public int SQLite3 :: changes (void)
Эта подпрограмма возвращает количество строк базы данных, которые были обновлены, вставлены или удалены самой последней инструкцией SQL.
public bool SQLite3 :: close (void)
Эта подпрограмма закрывает соединение с базой данных, ранее открытое при вызове SQLite3 :: open ().
открытая строка SQLite3 :: escapeString (строка $ value)
Эта подпрограмма возвращает строку, которая была должным образом экранирована для безопасного включения в оператор SQL.
Подключиться к базе данных
Следующий код PHP показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
<?php class MyDB extends SQLite3 { function __construct() { $this->open('test.db'); } } $db = new MyDB(); if(!$db) { echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; } ?>
Теперь давайте запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию. Если база данных успешно создана, на ней появится следующее сообщение —
Open database successfully
Создать таблицу
Следующая программа PHP будет использоваться для создания таблицы в ранее созданной базе данных.
<?php class MyDB extends SQLite3 { function __construct() { $this->open('test.db'); } } $db = new MyDB(); if(!$db) { echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; } $sql =<<<EOF CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL); EOF; $ret = $db->exec($sql); if(!$ret){ echo $db->lastErrorMsg(); } else { echo "Table created successfully\n"; } $db->close(); ?>
Когда вышеуказанная программа будет выполнена, она создаст таблицу COMPANY в вашем test.db и отобразит следующие сообщения:
Opened database successfully Table created successfully
ВСТАВИТЬ Операция
Следующая программа PHP показывает, как создавать записи в таблице COMPANY, созданной в приведенном выше примере.
<?php class MyDB extends SQLite3 { function __construct() { $this->open('test.db'); } } $db = new MyDB(); if(!$db){ echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; } $sql =<<<EOF INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); EOF; $ret = $db->exec($sql); if(!$ret) { echo $db->lastErrorMsg(); } else { echo "Records created successfully\n"; } $db->close(); ?>
Когда вышеуказанная программа будет выполнена, она создаст указанные записи в таблице COMPANY и отобразит следующие две строки.
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
Следующая программа PHP показывает, как получить и отобразить записи из таблицы COMPANY, созданной в приведенном выше примере —
<?php class MyDB extends SQLite3 { function __construct() { $this->open('test.db'); } } $db = new MyDB(); if(!$db) { echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; } $sql =<<<EOF SELECT * from COMPANY; EOF; $ret = $db->query($sql); while($row = $ret->fetchArray(SQLITE3_ASSOC) ) { echo "ID = ". $row['ID'] . "\n"; echo "NAME = ". $row['NAME'] ."\n"; echo "ADDRESS = ". $row['ADDRESS'] ."\n"; echo "SALARY = ".$row['SALARY'] ."\n\n"; } echo "Operation done successfully\n"; $db->close(); ?>
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
ОБНОВЛЕНИЕ Операция
Следующий PHP-код показывает, как использовать оператор UPDATE для обновления любой записи, а затем извлекать и отображать обновленные записи из таблицы COMPANY.
<?php class MyDB extends SQLite3 { function __construct() { $this->open('test.db'); } } $db = new MyDB(); if(!$db) { echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; } $sql =<<<EOF UPDATE COMPANY set SALARY = 25000.00 where ID=1; EOF; $ret = $db->exec($sql); if(!$ret) { echo $db->lastErrorMsg(); } else { echo $db->changes(), " Record updated successfully\n"; } $sql =<<<EOF SELECT * from COMPANY; EOF; $ret = $db->query($sql); while($row = $ret->fetchArray(SQLITE3_ASSOC) ) { echo "ID = ". $row['ID'] . "\n"; echo "NAME = ". $row['NAME'] ."\n"; echo "ADDRESS = ". $row['ADDRESS'] ."\n"; echo "SALARY = ".$row['SALARY'] ."\n\n"; } echo "Operation done successfully\n"; $db->close(); ?>
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully 1 Record updated successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
УДАЛЕНИЕ Операция
Следующий PHP-код показывает, как использовать инструкцию DELETE для удаления любой записи, а затем извлечь и отобразить оставшиеся записи из таблицы COMPANY.
<?php class MyDB extends SQLite3 { function __construct() { $this->open('test.db'); } } $db = new MyDB(); if(!$db) { echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; } $sql =<<<EOF DELETE from COMPANY where ID = 2; EOF; $ret = $db->exec($sql); if(!$ret){ echo $db->lastErrorMsg(); } else { echo $db->changes(), " Record deleted successfully\n"; } $sql =<<<EOF SELECT * from COMPANY; EOF; $ret = $db->query($sql); while($row = $ret->fetchArray(SQLITE3_ASSOC) ) { echo "ID = ". $row['ID'] . "\n"; echo "NAME = ". $row['NAME'] ."\n"; echo "ADDRESS = ". $row['ADDRESS'] ."\n"; echo "SALARY = ".$row['SALARY'] ."\n\n"; } echo "Operation done successfully\n"; $db->close(); ?>
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully 1 Record deleted successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
SQLite — Perl
В этой главе вы узнаете, как использовать SQLite в программах на Perl.
Монтаж
SQLite3 может быть интегрирован с Perl с помощью модуля Perl DBI, который является модулем доступа к базе данных для языка программирования Perl. Он определяет набор методов, переменных и соглашений, которые обеспечивают стандартный интерфейс базы данных.
Ниже приведены простые шаги по установке модуля DBI на вашем компьютере с Linux / UNIX.
$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz $ tar xvfz DBI-1.625.tar.gz $ cd DBI-1.625 $ perl Makefile.PL $ make $ make install
Если вам нужно установить драйвер SQLite для DBI, его можно установить следующим образом:
$ wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.11.tar.gz $ tar xvfz DBD-SQLite-1.11.tar.gz $ cd DBD-SQLite-1.11 $ perl Makefile.PL $ make $ make install
API интерфейса DBI
Ниже приведены важные подпрограммы DBI, которые могут удовлетворить ваши требования для работы с базой данных SQLite из вашей программы Perl. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию Perl DBI.
Sr.No. | API и описание |
---|---|
1 |
DBI-> connect ($ data_source, «», «», \% attr) Устанавливает соединение базы данных или сеанс с запрошенным $ data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно. Источник данных имеет вид : DBI: SQLite: dbname = ‘test.db’, где SQLite — это имя драйвера SQLite, а test.db — имя файла базы данных SQLite. Если имя файла задано как «: memory:» , оно создаст базу данных в оперативной памяти в ОЗУ, которая будет действовать только на время сеанса. Если имя файла является фактическим именем файла устройства, то оно пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, то создается новый файл базы данных с таким именем. Второй и третий параметры сохраняются как пустые строки, а последний параметр должен передавать различные атрибуты, как показано в следующем примере. |
2 |
$ dbh-> делать ($ SQL) Эта подпрограмма подготавливает и выполняет один оператор SQL. Возвращает количество затронутых строк или undef при ошибке. Возвращаемое значение -1 означает, что количество строк неизвестно, неприменимо или недоступно. Здесь $ dbh — дескриптор, возвращаемый вызовом DBI-> connect (). |
3 |
$ dbh-> подготовить ($ SQL) Эта подпрограмма подготавливает оператор для последующего выполнения ядром базы данных и возвращает ссылку на объект дескриптора оператора. |
4 |
$ sth-> Execute () Эта процедура выполняет любую обработку, необходимую для выполнения подготовленного оператора. Undef возвращается, если произошла ошибка. Успешное выполнение всегда возвращает true независимо от количества затронутых строк. Здесь $ sth — дескриптор оператора, возвращаемый вызовом $ dbh-> prepare ($ sql). |
5 |
$ sth-> fetchrow_array () Эта процедура извлекает следующую строку данных и возвращает ее в виде списка, содержащего значения полей. Пустые поля возвращаются как неопределенные значения в списке. |
6 |
$ DBI :: эээ Это эквивалентно $ h-> err, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственный код ошибки ядра базы данных из последнего вызванного метода драйвера. |
7 |
$ DBI :: ErrStr Это эквивалентно $ h-> errstr, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственное сообщение об ошибке ядра СУБД из последнего вызванного метода DBI. |
8 |
$ dbh-> разъединение () Эта подпрограмма закрывает соединение с базой данных, ранее открытое вызовом DBI-> connect (). |
DBI-> connect ($ data_source, «», «», \% attr)
Устанавливает соединение базы данных или сеанс с запрошенным $ data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно.
Источник данных имеет вид : DBI: SQLite: dbname = ‘test.db’, где SQLite — это имя драйвера SQLite, а test.db — имя файла базы данных SQLite. Если имя файла задано как «: memory:» , оно создаст базу данных в оперативной памяти в ОЗУ, которая будет действовать только на время сеанса.
Если имя файла является фактическим именем файла устройства, то оно пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, то создается новый файл базы данных с таким именем.
Второй и третий параметры сохраняются как пустые строки, а последний параметр должен передавать различные атрибуты, как показано в следующем примере.
$ dbh-> делать ($ SQL)
Эта подпрограмма подготавливает и выполняет один оператор SQL. Возвращает количество затронутых строк или undef при ошибке. Возвращаемое значение -1 означает, что количество строк неизвестно, неприменимо или недоступно. Здесь $ dbh — дескриптор, возвращаемый вызовом DBI-> connect ().
$ dbh-> подготовить ($ SQL)
Эта подпрограмма подготавливает оператор для последующего выполнения ядром базы данных и возвращает ссылку на объект дескриптора оператора.
$ sth-> Execute ()
Эта процедура выполняет любую обработку, необходимую для выполнения подготовленного оператора. Undef возвращается, если произошла ошибка. Успешное выполнение всегда возвращает true независимо от количества затронутых строк. Здесь $ sth — дескриптор оператора, возвращаемый вызовом $ dbh-> prepare ($ sql).
$ sth-> fetchrow_array ()
Эта процедура извлекает следующую строку данных и возвращает ее в виде списка, содержащего значения полей. Пустые поля возвращаются как неопределенные значения в списке.
$ DBI :: эээ
Это эквивалентно $ h-> err, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственный код ошибки ядра базы данных из последнего вызванного метода драйвера.
$ DBI :: ErrStr
Это эквивалентно $ h-> errstr, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственное сообщение об ошибке ядра СУБД из последнего вызванного метода DBI.
$ dbh-> разъединение ()
Эта подпрограмма закрывает соединение с базой данных, ранее открытое вызовом DBI-> connect ().
Подключиться к базе данных
Следующий код Perl показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
#!/usr/bin/perl use DBI; use strict; my $driver = "SQLite"; my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; print "Opened database successfully\n";
Теперь давайте запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию. Сохраните приведенный выше код в файле sqlite.pl и выполните его, как показано ниже. Если база данных успешно создана, на ней появится следующее сообщение —
$ chmod +x sqlite.pl $ ./sqlite.pl Open database successfully
Создать таблицу
Следующая Perl-программа используется для создания таблицы в ранее созданной базе данных.
#!/usr/bin/perl use DBI; use strict; my $driver = "SQLite"; my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);); my $rv = $dbh->do($stmt); if($rv < 0) { print $DBI::errstr; } else { print "Table created successfully\n"; } $dbh->disconnect();
Когда вышеуказанная программа будет выполнена, она создаст таблицу COMPANY в вашем test.db и отобразит следующие сообщения:
Opened database successfully Table created successfully
ПРИМЕЧАНИЕ. — Если вы видите следующую ошибку в любой из операций —
DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398
В таком случае откройте файл dbdimp.c, доступный в установке DBD-SQLite, и найдите функцию sqlite3_prepare () и измените ее третий аргумент на -1 вместо 0. Наконец, установите DBD :: SQLite с помощью make и выполните make install для разрешения проблема.
ВСТАВИТЬ Операция
Следующая программа Perl показывает, как создавать записи в таблице COMPANY, созданной в приведенном выше примере.
#!/usr/bin/perl use DBI; use strict; my $driver = "SQLite"; my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 )); my $rv = $dbh->do($stmt) or die $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 )); $rv = $dbh->do($stmt) or die $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )); $rv = $dbh->do($stmt) or die $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );); $rv = $dbh->do($stmt) or die $DBI::errstr; print "Records created successfully\n"; $dbh->disconnect();
Когда вышеуказанная программа будет выполнена, она создаст указанные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
В следующей программе Perl показано, как извлекать и отображать записи из таблицы COMPANY, созданной в приведенном выше примере.
#!/usr/bin/perl use DBI; use strict; my $driver = "SQLite"; my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(SELECT id, name, address, salary from COMPANY;); my $sth = $dbh->prepare( $stmt ); my $rv = $sth->execute() or die $DBI::errstr; if($rv < 0) { print $DBI::errstr; } while(my @row = $sth->fetchrow_array()) { print "ID = ". $row[0] . "\n"; print "NAME = ". $row[1] ."\n"; print "ADDRESS = ". $row[2] ."\n"; print "SALARY = ". $row[3] ."\n\n"; } print "Operation done successfully\n"; $dbh->disconnect();
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
ОБНОВЛЕНИЕ Операция
Следующий код Perl показывает, как выполнить оператор UPDATE, чтобы обновить любую запись, а затем извлечь и отобразить обновленные записи из таблицы COMPANY.
#!/usr/bin/perl use DBI; use strict; my $driver = "SQLite"; my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;); my $rv = $dbh->do($stmt) or die $DBI::errstr; if( $rv < 0 ) { print $DBI::errstr; } else { print "Total number of rows updated : $rv\n"; } $stmt = qq(SELECT id, name, address, salary from COMPANY;); my $sth = $dbh->prepare( $stmt ); $rv = $sth->execute() or die $DBI::errstr; if($rv < 0) { print $DBI::errstr; } while(my @row = $sth->fetchrow_array()) { print "ID = ". $row[0] . "\n"; print "NAME = ". $row[1] ."\n"; print "ADDRESS = ". $row[2] ."\n"; print "SALARY = ". $row[3] ."\n\n"; } print "Operation done successfully\n"; $dbh->disconnect();
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
УДАЛЕНИЕ Операция
Следующий код Perl показывает, как использовать инструкцию DELETE для удаления любой записи, а затем извлечь и отобразить оставшиеся записи из таблицы COMPANY —
#!/usr/bin/perl use DBI; use strict; my $driver = "SQLite"; my $database = "test.db"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(DELETE from COMPANY where ID = 2;); my $rv = $dbh->do($stmt) or die $DBI::errstr; if( $rv < 0 ) { print $DBI::errstr; } else { print "Total number of rows deleted : $rv\n"; } $stmt = qq(SELECT id, name, address, salary from COMPANY;); my $sth = $dbh->prepare( $stmt ); $rv = $sth->execute() or die $DBI::errstr; if($rv < 0) { print $DBI::errstr; } while(my @row = $sth->fetchrow_array()) { print "ID = ". $row[0] . "\n"; print "NAME = ". $row[1] ."\n"; print "ADDRESS = ". $row[2] ."\n"; print "SALARY = ". $row[3] ."\n\n"; } print "Operation done successfully\n"; $dbh->disconnect();
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
SQLite — Python
В этой главе вы узнаете, как использовать SQLite в программах на Python.
Монтаж
SQLite3 может быть интегрирован с Python с использованием модуля sqlite3, который был написан Герхардом Харингом. Он обеспечивает интерфейс SQL, совместимый со спецификацией DB-API 2.0, описанной в PEP 249. Вам не нужно устанавливать этот модуль отдельно, поскольку он поставляется по умолчанию вместе с Python версии 2.5.x и выше.
Чтобы использовать модуль sqlite3, сначала необходимо создать объект подключения, представляющий базу данных, а затем при желании вы можете создать объект курсора, который поможет вам выполнить все операторы SQL.
API модуля Python sqlite3
Ниже приведены важные подпрограммы модуля sqlite3, которые могут удовлетворить ваши требования по работе с базой данных SQLite из вашей программы Python. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию модуля Python sqlite3.
Sr.No. | API и описание |
---|---|
1 |
sqlite3.connect (база данных [, время ожидания, другие необязательные аргументы]) Этот API-интерфейс открывает соединение с файлом базы данных SQLite. Вы можете использовать «: memory:», чтобы открыть соединение базы данных с базой данных, которая находится в оперативной памяти, а не на диске. Если база данных открыта успешно, она возвращает объект подключения. Когда доступ к базе данных осуществляется несколькими подключениями, и один из процессов изменяет базу данных, база данных SQLite блокируется, пока эта транзакция не будет зафиксирована. Параметр timeout указывает, как долго соединение должно ожидать, пока блокировка не исчезнет, до возникновения исключения. Значение по умолчанию для параметра времени ожидания — 5,0 (пять секунд). Если данное имя базы данных не существует, этот вызов создаст базу данных. Вы также можете указать имя файла с требуемым путем, если вы хотите создать базу данных где-либо еще, кроме текущего каталога. |
2 |
connection.cursor ([cursorClass]) Эта подпрограмма создает курсор, который будет использоваться при программировании вашей базы данных на Python. Этот метод принимает один необязательный параметр cursorClass. Если указано, это должен быть пользовательский класс курсора, который расширяет sqlite3.Cursor. |
3 |
cursor.execute (sql [, необязательные параметры]) Эта подпрограмма выполняет инструкцию SQL. Оператор SQL может быть параметризован (т. Е. Заполнители вместо литералов SQL). Модуль sqlite3 поддерживает два вида заполнителей: вопросительные знаки и именованные заполнители (именованный стиль). Например — cursor.execute («вставить в людей значения (?,?)», (Кто, возраст)) |
4 |
connection.execute (sql [, необязательные параметры]) Эта подпрограмма является ярлыком вышеупомянутого метода execute, предоставленного объектом курсора, и она создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод execute курсора с заданными параметрами. |
5 |
cursor.executemany (sql, seq_of_parameters) Эта подпрограмма выполняет команду SQL для всех последовательностей параметров или отображений, найденных в последовательности sql. |
6 |
connection.executemany (sql [, параметры]) Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод cursor.s executemany с заданными параметрами. |
7 |
cursor.executescript (sql_script) Эта подпрограмма выполняет несколько операторов SQL одновременно, предоставленных в форме сценария. Сначала он выдает оператор COMMIT, а затем выполняет сценарий SQL, полученный в качестве параметра. Все операторы SQL должны быть разделены точкой с запятой (;). |
8 |
connection.executescript (sql_script) Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод исполняемого скрипта курсора с заданными параметрами. |
9 |
connection.total_changes () Эта подпрограмма возвращает общее количество строк базы данных, которые были изменены, вставлены или удалены с момента открытия соединения с базой данных. |
10 |
connection.commit () Этот метод фиксирует текущую транзакцию. Если вы не вызываете этот метод, все, что вы сделали со времени последнего вызова commit (), не будет видно из других соединений с базой данных. |
11 |
connection.rollback () Этот метод откатывает любые изменения в базе данных с момента последнего вызова commit (). |
12 |
connection.close () Этот метод закрывает соединение с базой данных. Обратите внимание, что это не вызывает автоматически commit (). Если вы просто закроете соединение с базой данных без предварительного вызова commit (), ваши изменения будут потеряны! |
13 |
cursor.fetchone () Этот метод извлекает следующую строку из набора результатов запроса, возвращая одну последовательность или None, если больше нет данных. |
14 |
cursor.fetchmany ([size = cursor.arraysize]) Эта процедура извлекает следующий набор строк результата запроса, возвращая список. Пустой список возвращается, когда больше нет доступных строк. Метод пытается извлечь столько строк, сколько указано параметром size. |
15 |
cursor.fetchall () Эта процедура извлекает все (оставшиеся) строки результата запроса, возвращая список. Пустой список возвращается, когда нет доступных строк. |
sqlite3.connect (база данных [, время ожидания, другие необязательные аргументы])
Этот API-интерфейс открывает соединение с файлом базы данных SQLite. Вы можете использовать «: memory:», чтобы открыть соединение базы данных с базой данных, которая находится в оперативной памяти, а не на диске. Если база данных открыта успешно, она возвращает объект подключения.
Когда доступ к базе данных осуществляется несколькими подключениями, и один из процессов изменяет базу данных, база данных SQLite блокируется, пока эта транзакция не будет зафиксирована. Параметр timeout указывает, как долго соединение должно ожидать, пока блокировка не исчезнет, до возникновения исключения. Значение по умолчанию для параметра времени ожидания — 5,0 (пять секунд).
Если данное имя базы данных не существует, этот вызов создаст базу данных. Вы также можете указать имя файла с требуемым путем, если вы хотите создать базу данных где-либо еще, кроме текущего каталога.
connection.cursor ([cursorClass])
Эта подпрограмма создает курсор, который будет использоваться при программировании вашей базы данных на Python. Этот метод принимает один необязательный параметр cursorClass. Если указано, это должен быть пользовательский класс курсора, который расширяет sqlite3.Cursor.
cursor.execute (sql [, необязательные параметры])
Эта подпрограмма выполняет инструкцию SQL. Оператор SQL может быть параметризован (т. Е. Заполнители вместо литералов SQL). Модуль sqlite3 поддерживает два вида заполнителей: вопросительные знаки и именованные заполнители (именованный стиль).
Например — cursor.execute («вставить в людей значения (?,?)», (Кто, возраст))
connection.execute (sql [, необязательные параметры])
Эта подпрограмма является ярлыком вышеупомянутого метода execute, предоставленного объектом курсора, и она создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод execute курсора с заданными параметрами.
cursor.executemany (sql, seq_of_parameters)
Эта подпрограмма выполняет команду SQL для всех последовательностей параметров или отображений, найденных в последовательности sql.
connection.executemany (sql [, параметры])
Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод cursor.s executemany с заданными параметрами.
cursor.executescript (sql_script)
Эта подпрограмма выполняет несколько операторов SQL одновременно, предоставленных в форме сценария. Сначала он выдает оператор COMMIT, а затем выполняет сценарий SQL, полученный в качестве параметра. Все операторы SQL должны быть разделены точкой с запятой (;).
connection.executescript (sql_script)
Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод исполняемого скрипта курсора с заданными параметрами.
connection.total_changes ()
Эта подпрограмма возвращает общее количество строк базы данных, которые были изменены, вставлены или удалены с момента открытия соединения с базой данных.
connection.commit ()
Этот метод фиксирует текущую транзакцию. Если вы не вызываете этот метод, все, что вы сделали со времени последнего вызова commit (), не будет видно из других соединений с базой данных.
connection.rollback ()
Этот метод откатывает любые изменения в базе данных с момента последнего вызова commit ().
connection.close ()
Этот метод закрывает соединение с базой данных. Обратите внимание, что это не вызывает автоматически commit (). Если вы просто закроете соединение с базой данных без предварительного вызова commit (), ваши изменения будут потеряны!
cursor.fetchone ()
Этот метод извлекает следующую строку из набора результатов запроса, возвращая одну последовательность или None, если больше нет данных.
cursor.fetchmany ([size = cursor.arraysize])
Эта процедура извлекает следующий набор строк результата запроса, возвращая список. Пустой список возвращается, когда больше нет доступных строк. Метод пытается извлечь столько строк, сколько указано параметром size.
cursor.fetchall ()
Эта процедура извлекает все (оставшиеся) строки результата запроса, возвращая список. Пустой список возвращается, когда нет доступных строк.
Подключиться к базе данных
Следующий код Python показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully";
Здесь вы также можете указать имя базы данных в виде специального имени : memory: для создания базы данных в оперативной памяти. Теперь давайте запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию. Сохраните приведенный выше код в файле sqlite.py и выполните его, как показано ниже. Если база данных успешно создана, то будет отображаться следующее сообщение.
$chmod +x sqlite.py $./sqlite.py Open database successfully
Создать таблицу
Следующая программа Python будет использоваться для создания таблицы в ранее созданной базе данных.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute('''CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);''') print "Table created successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она создаст таблицу COMPANY в вашем test.db и отобразит следующие сообщения:
Opened database successfully Table created successfully
ВСТАВИТЬ Операция
Следующая программа Python показывает, как создавать записи в таблице COMPANY, созданной в приведенном выше примере.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (1, 'Paul', 32, 'California', 20000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (2, 'Allen', 25, 'Texas', 15000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )"); conn.commit() print "Records created successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она создаст указанные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
Следующая программа на Python показывает, как извлекать и отображать записи из таблицы COMPANY, созданной в приведенном выше примере.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print "ID = ", row[0] print "NAME = ", row[1] print "ADDRESS = ", row[2] print "SALARY = ", row[3], "\n" print "Operation done successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
ОБНОВЛЕНИЕ Операция
Следующий код Python показывает, как использовать инструкцию UPDATE для обновления любой записи, а затем извлекать и отображать обновленные записи из таблицы COMPANY.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1") conn.commit print "Total number of rows updated :", conn.total_changes cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print "ID = ", row[0] print "NAME = ", row[1] print "ADDRESS = ", row[2] print "SALARY = ", row[3], "\n" print "Operation done successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
УДАЛЕНИЕ Операция
Следующий код Python показывает, как использовать инструкцию DELETE для удаления любой записи, а затем извлечь и отобразить оставшиеся записи из таблицы COMPANY.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("DELETE from COMPANY where ID = 2;") conn.commit() print "Total number of rows deleted :", conn.total_changes cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print "ID = ", row[0] print "NAME = ", row[1] print "ADDRESS = ", row[2] print "SALARY = ", row[3], "\n" print "Operation done successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она даст следующий результат.