SQLite INSERT, UPDATE, DELETE Запрос с примером

Положения об изменении данных в SQLite являются операторами INSERT, UPDATE и DELETE. Он используется для вставки новых строк, обновления существующих значений или удаления строк из базы данных.

Обратите внимание, что во всех следующих примерах вам необходимо запустить sqlite3.exe и открыть соединение с образцом базы данных как поточное:

Шаг 1) На этом этапе

  1. Откройте «Мой компьютер» и перейдите в следующий каталог «C:\sqlite" а также
  2. Затем откройте «sqlite3.exe«:

SQLite Запрос – ВСТАВКА, ОБНОВЛЕНИЕ, УДАЛЕНИЕ

Шаг 2) Откройте базу данных»УчебникиSampleDB.db» следующей командой:

.open TutorialsSampleDB.db

SQLite Запрос – ВСТАВКА, ОБНОВЛЕНИЕ, УДАЛЕНИЕ

Теперь вы готовы выполнить любой тип запроса к базе данных.

SQLite ВСТАВИТЬ

SQLite INSERT используется для вставки записей в указанную таблицу базы данных. вам нужно использовать предложение INSERT. Синтаксис предложения INSERT следующий:

SQLite ВСТАВИТЬ

  • После предложения INSERT вы должны указать, в какую таблицу вам нужно вставить значения.
  • После имени таблицы вы пишете список столбцов, в которые хотите вставить значения.
  • Вы можете игнорировать имена столбцов и не писать в них.
  • Если вы не напишете имя столбца, значения будут вставлены во все столбцы, найденные в таблице, в том же порядке, столбцы определены в таблице.
  • После предложения VALUES вы должны перечислить значения, которые нужно вставить.
  • Каждое предложение INSERT вставляет только одну строку. Если вы хотите вставить несколько строк, вам следует написать несколько предложений INSERT, по одному для каждой строки.

SQLite Вставить пример

В следующем примере мы вставим в таблицу студентов две строки, по одной для каждого студента:

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

Это должно пройти успешно, и для этого нет вывода:

SQLite Вставить

Это вставит двух студентов:

  • Первый студент со StudentId=11, StudentName = Ahmad, DepartmentId = 4 и DateOfBirth = 1997.
  • Второй студент со StudentId=12, StudentName = Aly, DepartmentId = 4 и DateOfBirth = 1996-10-12'.

В первом операторе мы перечислили имена столбцов «StudentId, StudentName, DepartmentId, DateOfBirth«.Однако во втором заявлении мы этого не сделали.

Четыре ценности»12, «Али», 4, «1996»» будет вставлено во все четыре столбца таблицы «Студенты» в том же порядке, в котором столбцы определены.

Теперь давайте проверим, что два студента были вставлены в таблицу Студенты, выполнив следующую команду: запрос:

SELECT * FROM Students;

Затем вы должны увидеть двух студентов, возвращенных по этому запросу, следующим образом:

SQLite Вставить

SQLite Обновление ПО

SQLite Запрос UPDATE используется для изменения существующих записей в таблице. Вы можете использовать предложение WHERE с запросом UPDATE для обновления выбранных строк. Предложение UPDATE обновляет таблицу, изменяя значение для определенного столбца. Ниже приведен синтаксис предложения UPDATE:

SQLite Обновление ПО

Как следующее:

  • После «предложения обновления» вы должны написать имя таблицы для обновления.
  • Вам нужно написать «предложение SET», которое используется для записи имени обновляемого столбца и обновляемого значения.
  • Вы можете обновить более одного столбца. Вы можете использовать запятую между каждой строкой.
  • Вы можете указать предложение WHERE, чтобы указать только некоторые строки. Обновляются только те строки, которые выражение оценивает как true. Если вы не указали предложение WHERE, все строки будут обновлены.

SQLite Пример обновления

В следующем операторе UPDATE мы обновим DepartmentId для Student со StudentId = 6 до 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Это должно пройти успешно, и вы не должны получить никаких результатов:

SQLite Обновление ПО

В предложении UPDATE мы указали, что хотим обновить таблицу Студенты.

  • В предложении WHERE мы отфильтровали всех студентов, выбрав только строку со StudentId = 6.
  • Предложение SET обновит значение идентификатора отдела для выбранных студентов до 3.

Теперь давайте проверим, что студент с идентификатором 6 обновлен, выполнив следующую команду:

SELECT * FROM Students WHERE StudentId = 6;

Теперь вы должны увидеть, что значение идентификатора отдела теперь равно 3, как показано ниже:

SQLite Обновление ПО

SQLite Удалить

SQLite Запрос DELETE используется для удаления существующих записей из указанной таблицы. Вы можете использовать предложение WHERE с запросами DELETE для удаления выбранных строк.

Предложение DELETE имеет следующий синтаксис:

SQLite Удалить

  • После предложения DELETE FROM вам необходимо написать имя таблицы, из которой вы хотите удалить записи. (Примечание: , что УДАЛИТЬ условие используется для удаления некоторых записей из таблицы или всех записей, но не удаляет саму таблицу. Однако предложение DROP используется для удаления всей таблицы со всеми записями в ней.)
  • Если вы напишете предложение DELETE типа «DELETE FROM guru», это удалит все записи из таблицы «guru».
  • Вы можете указать условие WHERE с выражением, если хотите удалить некоторые определенные строки. Будут удалены только те строки, для которых выражение имеет значение true. Например, «DELETE FROM guru WHERE id > 5» — будут удалены только записи с идентификатором больше 5.

Пример

В следующем операторе мы удалим двух студентов с StudentId 11 и 12:

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

Выражение "StudentId = 11 ИЛИ StudentId = 12» будет справедливым только для учащихся с идентификаторами 11 и 12. Таким образом, предложение DELETE будет применено к обоим и удалит только их.

Эта команда должна выполниться успешно, и вы не должны получить никаких результатов:

SQLite Удалить

Вы можете убедиться, что два студента были удалены, выбрав все записи из таблицы «Студенты» следующим образом:

SELECT * FROM Students;

Вы не должны видеть двух студентов с идентификаторами 11 и 12 следующим образом:

SQLite Удалить

SQLite Оговорка о конфликте

Предположим, у вас есть столбец, который имеет одно из следующих ограничений столбца: UNIQUE, NOT NULL, CHECK или PRIMARY KEY. А затем вы попытались вставить или обновить значение в этом столбце, используя значение, которое конфликтует с этим ограничением.

Например, если столбец имеет ограничение UNIQUE, и вы попытались вставить уже существующее значение (повторяющееся значение), которое конфликтует с ограничением UNIQUE. Тогда предложение CONFLICT позволит вам выбрать, что делать в таких случаях, чтобы разрешить этот конфликт.

Прежде чем мы продолжим объяснять, как предложение CONFLICT разрешает конфликт. Вы должны понимать, что такое транзакция базы данных.

Транзакция базы данных

Термин «транзакция базы данных» представляет собой список SQLite Операции (вставка, обновление или удаление). Транзакция базы данных должна быть выполнена как единое целое, либо все операции выполнены успешно, либо не выполнены вообще. Все операции будут отменены, если одна из них не будет выполнена.

Пример транзакции базы данных

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

Вот список из пяти решений, которые вы можете выбрать в пункте CONFLICT:

  1. ОТКАТ – это отменит транзакцию, в которой текущий SQLite оператор, в котором есть конфликт (он отменит всю транзакцию). Например, если вы пытаетесь обновить 10 строк, а пятая строка имеет значение, конфликтующее с ограничением, то строки не будут обновлены, а 10 строк останутся прежними. Будет выдана ошибка.
  2. ПРЕРЫВАТЬ – это прервет (отменит) текущий SQLite только оператор, в котором есть конфликт, и транзакция не будет отменена. Например, если вы пытаетесь обновить 10 строк, а пятая строка имеет значение, конфликтующее с ограничением, то только пятое значение не будет обновлено, но будут обновлены остальные 9 строк. Будет выдана ошибка.
  3. НЕУДАЧА - прерывает текущий SQLite утверждение, в котором есть конфликт. Однако транзакция не будет продолжена, но предыдущие изменения, внесенные в строки до строки, в которой имеется конфликт, будут зафиксированы. Например, если вы пытаетесь обновить 10 строк, а значение пятой строки конфликтует с ограничением, то будут обновлены только 4 строки, а остальные — нет. Будет выдана ошибка.
  1. ИГНОРИРУЙТЕ – это пропустит строку, содержащую нарушение ограничения, и продолжит обработку других следующих строк SQLite заявление. Например, если вы пытаетесь обновить 10 строк, а значение пятой строки конфликтует с ограничением, то будут обновлены только 4 строки, а остальные — нет. Он не будет продолжать обновлять другие строки и останавливаться на строке, имеющей конфликтное значение. Никакой ошибки не будет.
  1. ЗАМЕНИТЬ – это зависит от типа ограничения, в котором нарушено:
  • При нарушении ограничения UNIQUE или PRIMARY KEY. REPLACE заменит строку, вызывающую нарушение, новой вставленной или обновленной строкой.
  • При нарушении ограничения NOT NULL предложение REPLACE заменит значение NULL значением по умолчанию для этого столбца. Если столбец не имеет значения по умолчанию, то SQLite прервет оператор (оператор будет отменен)
  • ЕСЛИ произойдет нарушение ограничения CHECK, выполнение предложения будет прервано.

Примечание: Вышеуказанные 5 решений — это варианты того, как вы хотите разрешить конфликт. Не обязательно то, что применимо для разрешения одного конфликта, применимо для разрешения других типов конфликтов.

Как объявить предложение CONFLICT

Вы можете объявить предложение ON CONFLICT при определении ограничения для определения столбца в предложении CREATE TABLE. Используя следующий синтаксис:

SQLite Оговорка о конфликте

Вы можете выбрать одно из пяти решений для разрешения конфликта, как объяснялось ранее.

ПРИМЕР КОНФЛИКТА ИГНОРИРОВАТЬ

Шаг 1) Создайте новую тему таблицы следующим образом:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Обратите внимание, что мы определили ограничение PRIMARY KEY для столбца subjectId. Ограничение первичного ключа не позволяет вставлять два повторяющихся значения в столбец subjectId, чтобы все значения в этом столбце были уникальными. Также обратите внимание, что мы выбираем разрешение конфликта: «ИГНОРИРУЙТЕ».

Команда должна выполниться успешно, и вы не должны получить никаких ошибок:

ПРИМЕР КОНФЛИКТА ИГНОРИРОВАТЬ

Шаг 2) Теперь давайте вставим несколько значений в новые темы таблицы, но со значением, которое нарушает ограничение первичного ключа:

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

В этом операторе INSERT мы попытались вставить два курса с одинаковым идентификатором предмета первичного ключа 2, что является нарушением ограничения первичного ключа.

Команды должны выполняться нормально, и вы не должны получить никаких ошибок. Как следующее:

ПРИМЕР КОНФЛИКТА ИГНОРИРОВАТЬ

Шаг 3) Выберите все предметы из таблицы следующим образом:

SELECT * FROM Subjects;

Это даст вам список предметов:

ПРИМЕР КОНФЛИКТА ИГНОРИРОВАТЬ

Обратите внимание, что были вставлены только три предмета: «Курс алгебры, баз данных и Algorithmsвместо 4 рядов.

Строка, значение которой нарушает ограничение первичного ключа, то есть «Структуры данных», была проигнорирована и не вставлена. Однако, SQLite продолжает выполнять другие инструкции после этой строки.

Шаг 4) УДАЛИТЬ субъекты таблицы, чтобы создать ее снова с другим предложением ON CONFLICT для следующего примера, выполнив следующую команду:

DROP TABLE Subjects;

Команда drop удаляет всю таблицу. Таблица «Темы» теперь не существует.

ПРИМЕР КОНФЛИКТА ЗАМЕНЫ

Шаг 1) Создайте новую тему таблицы следующим образом:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

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

Также обратите внимание, что мы выбираем вариант разрешения конфликта: «ЗАМЕНИТЬ«. Команда должна выполниться успешно, и вы не должны получить никаких ошибок:

ПРИМЕР КОНФЛИКТА ЗАМЕНЫ

Шаг 2) Теперь давайте вставим несколько значений в новую таблицу «Субъекты», но со значением, которое нарушает ограничение первичного ключа:

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

В этом операторе INSERT мы попытались вставить два курса с одинаковым идентификатором предмета первичного ключа 2, что является нарушением ограничения первичного ключа.

Команды должны выполняться нормально, и вы не должны получить никаких ошибок. Как следующее:

ПРИМЕР КОНФЛИКТА ЗАМЕНЫ

Шаг 3) Выберите все предметы из таблицы следующим образом:

SELECT * FROM Subjects;

Это даст вам список предметов:

ПРИМЕР КОНФЛИКТА ЗАМЕНЫ

Обратите внимание, что были вставлены только три предмета: «Алгебра, структуры данных и Algorithms», тогда как мы пытались вставить 4 строки.

Строка, значение которой нарушает ограничение первичного ключа, то есть «Структуры данных” заменил значение “Курс базы данных» следующим образом:

  • Первые два оператора вставки работают нормально и без проблем. Два предмета «Алгебра» и «Курс баз данных» будут вставлены с идентификаторами 1, 2.
  • После появления SQLite пытается запустить третий оператор вставки с идентификатором субъекта 2 и именем субъекта «Структуры данных«, он обнаруживает, что уже существует субъект с subjectId = 2. Это является нарушением ограничения первичного ключа, определенного в столбце subjectId.
  • SQLite выберет ЗАМЕНУЮ разрешение для этого конфликта. Он заменяет значение, которое уже существует в таблице тем, новым значением из оператора вставки. Итак "Курс базы данныхИмя субъекта будет заменено на «Структуры данныхИмя Субъекта.

Резюме

Предложения INSERT, UPDATE и DELETE используются для изменения данных в SQLite база данных. Предложение CONFLICT — это мощное предложение для разрешения любого конфликта между данными и данными, которые нужно изменить.