SQLite: Основные операции с данными. Добавление данных. Команда INSERT

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,758
Реакции
1,449
Credits
25,276

SQLite: Основные операции с данными. Добавление данных. Команда INSERT​

Для добавления данных в SQLite применяется команда INSERT, которая имеет следующее формальное определение:
Код:
INSERT INTO имя_таблицы [(столбец1, стобец2, ... стобецN)]
VALUES (значение1, значение2, ... значениеN)
После выражения INSERT INTO в скобках можно указать список столбцов через запятую, в которые надо добавлять данные, и в конце после слова VALUES скобках перечисляют добавляемые для столбцов значения.
Например, пусть в базе данных SQLite есть следующая таблица users:
Код:
CREATE TABLE users
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    age INTEGER
);

Добавим в эту таблицу одну строку с помощью следующего кода:
Код:
INSERT INTO users (name, age) VALUES ('Tom', 37);
После названия таблицы указываны два стобца, в которые мы хотим выполнить добавление данные - (name, age). После оператора VALUES указаны значения для этих столбцов. Значения будут передаваться столбцам по позиции. То есть стобцу name передается строка "Tom', столбцу age - число 37. И после успешного выполнения данной команды в таблице появится новая строка:
3.1.png

INSERT и добавление данных в SQLite

Стоит отметить, что при добавлении данных указывать значения абсолютно для всех столбцов таблицы. Например, в примере выше не указано значение для стобца id, поскольку для данного столбца значение будет автоматически генерироваться.
Также можно можно было бы не указывать названия столбцов:
Код:
INSERT INTO users VALUES (2, 'Bob', 41);

Однако в этом случае потребовалось бы указать значения для всех его столбцов, в том числе для столбца id. Причем значения передавались столбцам в том порядке, в котором они идут в таблице.

Добавление NULL​

Также мы можем опускать при добавлении такие столбцы, которые поддерживают значение NULL (которые не имеют ограничения NOT NULL):
Код:
INSERT INTO users (name) VALUES ('Sam');

В данном случае для столбца age не указано значение, и поскольку данный столбец поддерживает значение NULL, то для него будет установлено значение NULL.
Также подобным столбцам, которые поддерживают NULL, можно явным образом передать NULL:
Код:
INSERT INTO users (name, age) VALUES (NULL, NULL);

Значения по умолчанию​

Если для столбца задано ограничение DEFAULT, то есть значение по умолчанию, то для него тоже можно не передавать значение. Например, возьмем следующую таблицу:
Код:
CREATE TABLE users
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT DEFAULT 'Undefined',
    age INTEGER DEFAULT 18
);

Теперь столбцы name и age имеют значения по умолчанию. При добавлении данных из можно опустить:
Код:
INSERT INTO users(name) VALUES ('Tom');
INSERT INTO users(age) VALUES (22);
3.2.png

Добавление данных и значения по умолчанию в SQLite

Если все столбцы поддерживают значения по умолчанию или автогенерацию или значение NULL, то с помощью ключевого слова DEFAULT можно явно указать, что в качестве значения будут использоваться значения по умолчанию:
Код:
INSERT INTO users DEFAULT VALUES;

В этом случае столбцы, для которых определено значение по умолчанию, получат это значение. Остальные столбцы получать значение NULL.

Множественное добавление​

Также мы можем добавить сразу несколько строк:
Код:
INSERT INTO users(name, age) VALUES
('Tom', 37),
('Bob', 41),
('Sam', 28);
В данном случае в таблицу будут добавлены три строки.

Динамическая типизация​

Стоит отметить, что в SQLite (в отличие от многих других популярных систем баз данных) действует динамическая типизиация. Например, возьмем выше использованную таблицу:
Код:
CREATE TABLE users
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    age INTEGER
);

Несмотря на то, что столбец name представляет строку текста, а столбец age - целое число, мы можем передавать этим столбцам данные совсем других типов:
Код:
INSERT INTO users(name, age) VALUES
(37, 'Tom'),
(4.5, 5.6),
('Sam', 'twenty-two');
3.3.png

Динамическая типизация в SQLite