SQLite Запит INSERT, UPDATE, DELETE із прикладом

Речення про зміну даних у SQLite це оператори INSERT, UPDATE і DELETE. Він використовується для вставки нових рядків, оновлення існуючих значень або видалення рядків із бази даних.

Зауважте, що для всіх наведених нижче прикладів вам потрібно запустити sqlite3.exe і відкрити підключення до зразка бази даних як поточне:

Крок 1) На цьому етапі

  1. Відкрийте «Мій комп’ютер» і перейдіть до наступного каталогу «C:\sqlite
  2. Потім відкрийте "sqlite3.exe":

SQLite Запит - INSERT, UPDATE, DELETE

Крок 2) Відкрийте базу даних "ПідручникиSampleDB.db” за такою командою:

.open TutorialsSampleDB.db

SQLite Запит - INSERT, UPDATE, DELETE

Тепер ви готові виконувати будь-який тип запиту до бази даних.

SQLite INSERT

SQLite INSERT використовується для вставки записів у вказану таблицю бази даних. ви повинні використовувати пункт «INSERT». Синтаксис пропозиції INSERT такий:

SQLite INSERT

  • Після пропозиції INSERT ви повинні вказати, до якої таблиці потрібно вставити значення.
  • Після назви таблиці ви пишете список стовпців, у які потрібно вставити значення.
  • Ви можете ігнорувати назви стовпців і не писати в них.
  • Якщо ви не пишете ім’я стовпців, значення буде вставлено в усі стовпці, знайдені в таблиці, у тому самому порядку, стовпці визначені в таблиці.
  • Після пропозиції VALUES слід перерахувати значення, які потрібно вставити.
  • Кожна пропозиція INSERT вставляє лише один рядок. Якщо ви хочете вставити кілька рядків, вам слід написати кілька пропозицій INSERT, по одному для кожного рядка.

SQLite Приклад вставки

У наступному прикладі ми вставимо 2 рядки в таблицю студентів, по одному для кожного студента:

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 Insert

Буде вставлено двох студентів:

  • Перший студент із StudentId=11, StudentName = Ahmad, DepartmentId = 4 і DateOfBirth = 1997-10-12.
  • Другий студент із StudentId=12, StudentName = Aly, DepartmentId = 4 і DateOfBirth = 1996-10-12′.

У першому операторі ми перерахували назви стовпців "StudentId, StudentName, DepartmentId, DateOfBirth«.Однак у другій заяві ми цього не зробили.

Чотири цінності"12, «Алі», 4, «1996-10-12»” буде вставлено в усі чотири стовпці таблиці Студенти в тому ж порядку, що й стовпці.

Тепер давайте перевіримо, що два студенти були вставлені в таблицю Students, виконавши наступне запит:

SELECT * FROM Students;

Тоді ви повинні побачити двох студентів, повернутих із цього запиту, як показано нижче:

SQLite Insert

SQLite Оновити

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

SQLite Оновити

Як наступне:

  • Після «речення оновлення» слід написати ім’я таблиці для оновлення.
  • Ви повинні написати «речення SET», яке використовується для запису назви стовпця для оновлення та значення, яке потрібно оновити.
  • Ви можете оновити більше одного стовпця. Ви можете використовувати кому між кожним рядком.
  • Ви можете вказати речення WHERE, щоб указати лише деякі рядки. Оновлюються лише ті рядки, для яких вираз оцінює значення true. Якщо ви не вказали речення WHERE, усі рядки буде оновлено.

SQLite Приклад оновлення

У наступному операторі UPDATE ми оновимо DepartmentId для студента зі StudentId = 6 до 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Це має працювати успішно, і ви не повинні отримати жодних результатів:

SQLite Оновити

У реченні UPDATE ми вказали, що хочемо оновити таблицю Students.

  • У реченні 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» — це видалить лише записи, які мають id більше 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) Тепер давайте вставимо деякі значення в нову таблицю Subjects, але зі значенням, яке порушує обмеження первинного ключа:

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 "Структури даних“, він з’ясовує, що вже існує суб’єкт із SubjectId = 2. Що є порушенням обмеження первинного ключа, визначеного в стовпці SubjectId.
  • SQLite вибере рішення ЗАМІНИ для цього конфлікту. Він замінює значення, яке вже існує в таблиці предметів, на нове значення з оператора вставки. Отже, "Курс бази даних” SubjectName буде замінено на “Структури даних” SubjectName.

Підсумки

Речення INSERT, UPDATE і DELETE використовуються для зміни даних у SQLite база даних. Речення CONFLICT є потужним пунктом для вирішення будь-якого конфлікту між даними та даними, які потрібно змінити.

Щоденний інформаційний бюлетень Guru99

Розпочніть свій день з останніх та найважливіших новин про штучний інтелект, які ви можете знайти просто зараз.