Для добавления данных в 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. И после успешного выполнения данной команды в таблице появится новая строка:
Стоит отметить, что при добавлении данных необязательно указывать значения абсолютно для всех столбцов таблицы. Например, в примере выше не указано значение для стобца id, поскольку для данного столбца значение будет автоматически генерироваться.
Также можно можно было бы не указывать названия столбцов:
INSERT INTO users VALUES (2, 'Bob', 41);
Однако в этом случае потребовалось бы указать значения для всех его столбцов, в том числе для столбца id. Причем значения передавались столбцам в том порядке, в котором они идут в таблице.
Также мы можем опускать при добавлении такие столбцы, которые поддерживают значение 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);
Если все столбцы поддерживают значения по умолчанию или автогенерацию или значение 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');