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

⚡ Умное резюме

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

  • ???? ВСТАВЛЯТЬ: Оператор INSERT добавляет одну или несколько новых строк, перечисляя целевые столбцы и их значения с помощью предложения VALUES.
  • 🇧🇷 ОБНОВИТЬ: Оператор UPDATE изменяет существующие значения столбцов, используя SET для ввода новых данных и WHERE для выбора конкретных строк.
  • 🇧🇷 УДАЛЯТЬ: Оператор DELETE удаляет строки, соответствующие условию WHERE, или все строки, если условие WHERE опущено.
  • ⚠️ Пункт о коллизии законов: Пункт ON CONFLICT разрешает нарушения ограничений посредством ROLLBACK, ABORT, FAIL, IGNORE или REPLACE.
  • 🔁 Сделки: Транзакция базы данных объединяет несколько операций в один блок, который либо полностью подтверждается, либо полностью отменяется.
  • 🤖 Помощь ИИ: Инструменты преобразования текста в SQL с использованием ИИ и GitHub Copilot генерируют SQLite Вставляйте, обновляйте и удаляйте операторы из подсказок, представленных простым языком.

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

Запрос на вставку, обновление и удаление в SQLite

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

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

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

  • Откройте «Мой компьютер» и перейдите в следующую директорию: «C:\sqlite» и
  • Затем откройте файл “sqlite3.exe”:

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

Шаг 2) Откройте базу данных “TutorialsSampleDB.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, 'Aly', 4, '1996-10-12'» будут вставлены во все четыре столбца таблицы «Студенты» в том же порядке, в котором определены столбцы.

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

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 необходимо указать имя таблицы, из которой вы хотите удалить записи. (Обратите внимание: предложение DELETE используется для удаления части записей из таблицы или для удаления всех записей, но само поле таблицы не удаляется. Однако предложение 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 OR 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. ABORT – это прервет (отменит) текущую операцию. SQLite только оператор, в котором есть конфликт, и транзакция не будет отменена. Например, если вы пытаетесь обновить 10 строк, а пятая строка имеет значение, конфликтующее с ограничением, то только пятое значение не будет обновлено, но будут обновлены остальные 9 строк. Будет выдана ошибка.
  3. Сбой – прерывает текущий процесс. SQLite утверждение, в котором есть конфликт. Однако транзакция не будет продолжена, но предыдущие изменения, внесенные в строки до строки, в которой имеется конфликт, будут зафиксированы. Например, если вы пытаетесь обновить 10 строк, а значение пятой строки конфликтует с ограничением, то будут обновлены только 4 строки, а остальные — нет. Будет выдана ошибка.
  4. ИГНОРИРОВАТЬ – эта команда пропустит строку, содержащую нарушение ограничения, и продолжит обработку остальных строк. SQLite заявление. Например, если вы пытаетесь обновить 10 строк, а значение пятой строки конфликтует с ограничением, то будут обновлены только 4 строки, а остальные — нет. Он не будет продолжать обновлять другие строки и останавливаться на строке, имеющей конфликтное значение. Никакой ошибки не будет.
  5. ЗАМЕНА – это зависит от типа ограничения, в котором произошло нарушение:
    • При нарушении ограничения 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
);

Обратите внимание, что мы определили ограничение «ПЕРВИЧНЫЙ КЛЮЧ» для столбца 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, чтобы все значения в этом столбце были уникальными.

Также обратите внимание, что мы выбрали параметр разрешения конфликтов «REPLACE». Команда должна выполниться успешно, и у вас не должно возникнуть никаких ошибок:

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

Шаг 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 При попытке выполнить третью операцию вставки с SubjectId 2 и SubjectName “Data Structures”, обнаруживается, что уже существует субъект с SubjectId = 2. Это является нарушением ограничения первичного ключа, определенного для столбца SubjectId.
  • SQLite Для разрешения этого конфликта будет выбран метод REPLACE. Он заменяет уже существующее значение в таблице subjects новым значением из оператора INSERT. Таким образом, SubjectName "Database Course" будет заменен на SubjectName "Data Structures".

Часто задаваемые вопросы (FAQ)

Операция UPSERT объединяет операции вставки и обновления. Поскольку SQLite 3.24.0 (2018), INSERT INTO … ON CONFLICT(column) DO UPDATE SET … вставляет новую строку или обновляет существующую при возникновении конфликта UNIQUE или PRIMARY KEY. DO NOTHING вместо этого пропускает строку без уведомления.

INSERT OR REPLACE удаляет конфликтующую строку и вставляет новую, в результате чего значения столбцов, не указанных в списке, сбрасываются до значений по умолчанию. ON CONFLICT DO UPDATE редактирует существующую строку на месте, сохраняяping остальные колонны остаются неповрежденными, что делает его более безопасным вариантом с истинной вставкой.

После слова VALUES укажите несколько групп значений, разделяемых запятыми: INSERT INTO Students (id, name) VALUES (1,'A'), (2,'B'), (3,'C');. Эта многострочная форма работает с тех пор, как SQLite 3.7.11 и работает быстрее, чем выполнение одной инструкции INSERT для каждой строки.

Выполните команду DELETE FROM table_name; без условия WHERE. SQLite Команда TRUNCATE отсутствует, но применяется оптимизация TRUNCATE, которая удаляет все строки одновременно. Структура таблицы сохраняется; используйте DROP TABLE для полного удаления таблицы.

С SQLite В версии 3.35.0 (2021) операторы INSERT, UPDATE и DELETE принимают необязательный оператор RETURNING, который выводит затронутые строки. Например, INSERT … RETURNING id; немедленно возвращает сгенерированные значения, избегая отдельного оператора SELECT для чтения изменений.

Используйте команду INSERT INTO … SELECT: INSERT INTO Archive (id, name) SELECT id, name FROM Students WHERE DepartmentId = 4;. SQLite Вставляется каждая строка, возвращаемая оператором SELECT, поэтому порядок столбцов и их количество должны соответствовать целевой таблице.

Да. Искусственный интеллект, преобразующий текст в SQL, конвертирует запросы на простом английском языке в... SQLite Операторы INSERT, UPDATE и DELETE, включая предложения WHERE и ON CONFLICT. Указание имен таблиц и столбцов повышает точность, и каждый сгенерированный оператор следует проверить и протестировать перед запуском на реальных данных.

Второй пилот GitHub исследованиям SQLite Вставляйте, обновляйте и удаляйте запросы непосредственно в редакторах, таких как VS CodeОн считывает расположенные рядом схемы и комментарии, поэтому автодополнение использует реальные имена таблиц и столбцов, но вам все равно следует проверять каждое выражение перед выполнением.

Подведем итог этой публикации следующим образом: