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

Зміст:

Anonim

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

У цьому підручнику ви дізнаєтесь-

  • ВСТАВИТИ
  • Оновлення
  • Видалити
  • Стаття про конфлікт

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

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

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

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

.open TutorialsSampleDB.db

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

ВСТАВЛЕННЯ SQLite

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

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

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

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

ВСТАВИТИ У Студенти (StudentId, StudentName, DepartmentId, DateOfBirth)ЦІННОСТІ (11, 'Ахмад', 4, '1997-10-12');ВСТАВИТИ У ЗНАЧЕННЯ студентів (12, 'Aly', 4, '1996-10-12');

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

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

  • Перший студент із 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, 'Aly', 4, '1996-10-12' " будуть вставлені у всі чотири стовпці таблиці "Студенти" в тому самому порядку, в якому вони визначені.

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

ВИБЕРІТЬ * ІЗ студентів;

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

Оновлення SQLite

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

Наступне:

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

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

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

ОНОВЛЕННЯ СтудентиВстановити ідентифікатор відділу = 3ДЕ StudentId = 6;

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

У пункті UPDATE ми вказали, що хочемо оновити таблицю Студенти.

  • У реченні WHERE ми відфільтрували всіх студентів, щоб вибрати лише рядок для StudentId = 6.
  • Пункт SET оновить значення ідентифікатора кафедри для вибраних студентів, яке буде 3.

Тепер перевіримо, чи оновлено студента з ідентифікатором 6, виконавши таку команду:

ВИБЕРІТЬ * ВІД студентів, ДЕ StudentId = 6;

Тепер ви повинні побачити, що значення Ідентифікатора відділу тепер становить 3, як показано нижче:

SQLite Видалити

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

Речення DELETE має такий синтаксис:

  • Вам потрібно написати ім'я таблиці після пункту DELETE FROM, з якого ви хочете видалити записи. ( Примітка: що ВИДАЛИТИ положення . Використовується для видалення деяких записів з таблиці або видалити всі записи , і це не буде видаляти саме таблицю Однак пункт DROP використовується для видалення всієї таблиці з усіма записами на ньому. )
  • Якщо ви напишете пункт DELETE так, як "DELETE FROM guru", це видалить всі записи з таблиці "guru".
  • Ви можете вказати умову WHERE з виразом, якщо ви хочете видалити певні рядки. Будуть видалені лише ті рядки, для яких вираз має значення true. Наприклад, "ВИДАЛИТИ З гуру WHERE id> 5" - це видалить лише записи, ідентифікатори яких перевищують 5.

Приклад

У наступному твердженні ми видалимо двох студентів із StudentId 11 і 12:

ВИДАЛИТИ З УЧНІВ, ДЕ StudentId = 11 АБО StudentId = 12;

Вираз " StudentId = 11 АБО StudentId = 12 " буде справедливим лише для студентів з ідентифікаторами 11 і 12. Тож речення DELETE буде застосовано до обох і буде видалено лише їх.

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

Ви можете перевірити, що двох студентів було видалено, вибравши всі записи з таблиці Студенти наступним чином:

ВИБЕРІТЬ * ІЗ студентів;

Ви не повинні бачити двох студентів з ідентифікаторами 11 і 12 наступним чином:

Застереження про конфлікт SQLite

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

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

Перш ніж продовжувати пояснювати, як застереження CONFLICT вирішує конфлікт. Ви повинні розуміти, що таке транзакція бази даних.

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

Термін транзакція бази даних - це перелік операцій SQLite (вставка, оновлення або видалення). Транзакція бази даних повинна виконуватися як одна одиниця, або всі операції виконуються успішно, або взагалі не виконуються. Усі операції будуть скасовані, якщо одну з них не вдалося виконати.

Приклад транзакції бази даних:

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

Ось перелік п’яти резолюцій, які ви можете вибрати у реченні CONFLICT:

  1. ROLLBACK - це поверне транзакцію, у якій поточний оператор SQLite, що має конфлікт (скасує всю транзакцію). Наприклад, якщо ви намагаєтесь оновити 10 рядків, а п’ятий рядок має значення, що суперечить обмеженню, тоді жоден рядок не буде оновлений, 10 рядків залишаться незмінними. Буде видано помилку.
  2. АБОРТУВАТИ - це призведе до скасування (скасування) поточного оператора SQLite лише з конфліктом і транзакція не буде скасована. Наприклад, якщо ви намагаєтеся оновити 10 рядків, а п’ятий рядок має значення, яке суперечить обмеженню, тоді лише п’яте значення не буде оновлено, але інші 9 рядків будуть оновлені. Буде видано помилку.
  3. FAIL - скасовує поточний оператор SQLite, що має конфлікт. Однак транзакція не триватиме, але попередні зміни, внесені в рядки до рядка, що має конфлікт, будуть здійснені. Наприклад, якщо ви намагаєтесь оновити 10 рядків, а п’ятий рядок має значення, яке суперечить обмеженню, тоді оновляться лише 4 рядки, а інші - ні. Буде видано помилку.
  1. IGNORE - це пропустить рядок, що містить порушення обмеження, і продовжить обробку інших наступних рядків оператора SQLite. Наприклад, якщо ви намагаєтесь оновити 10 рядків, а п’ятий рядок має значення, яке суперечить обмеженню, тоді оновляться лише 4 рядки, а інші - ні. Він не буде продовжувати оновлення інших рядків і зупинятися на рядку, що має значення конфлікту. Жодної помилки не буде видано.
  1. ЗАМІНА - це залежить від типу обмеження, яке має порушення:
  • Коли є порушення обмеження для УНІКАЛЬНОГО або ПЕРВИННОГО КЛЮЧОВОГО обмеження. REPLACE замінить рядок, що спричинив порушення, новим вставленим або оновленим рядком.
  • Коли порушено обмеження NOT NULL, пропозиція REPLACE замінить значення NULL на значення за замовчуванням для цього стовпця. Якщо стовпець не має значення за замовчуванням, тоді SQLite скасує оператор (оператор буде скасовано)
  • Якщо сталося порушення обмеження CHECK, це положення буде скасовано.

Примітка: Вищезазначені 5 резолюцій - це варіанти вирішення конфлікту. Можливо, не обов'язково те, що застосовується для вирішення одного конфлікту, застосовується для вирішення конфліктів інших типів.

Як оголосити речення CONFLICT

Ви можете оголосити речення ON CONFLICT, коли визначаєте обмеження для визначення стовпця в реченні CREATE TABLE. Використовуючи такий синтаксис:

Ви можете вибрати одну з п’яти резолюцій, щоб вирішити конфлікт, як пояснювалося раніше.

ПРО КОНФЛІКТНЕ ІГНОРУВАННЯ Приклад

Крок 1) Створіть нову тему таблиці наступним чином:

СТВОРИТИ ТАБЛИЦУ [Теми] ([SubjectId] ЦІЛИЙ НЕ НУЛЬНИЙ ПЕРВИННИЙ КЛЮЧ НА КОНФЛІКТНУ ІГНОРУ,[SubjectName] NVARCHAR NOT NULL); 

Зверніть увагу, що ми визначили обмеження PRIMARY KEY для стовпця SubjectId. Обмеження первинного ключа не дозволяє вставити два повторювані значення у стовпець SubjectId, щоб усі значення в цьому стовпці мали бути унікальними. Також зауважте, що ми вирішили конфлікт як " ІГНОРУВАТИ ".

Команда повинна успішно працювати, і ви не повинні отримувати помилок:

Крок 2) Тепер давайте вставимо деякі значення в нові теми таблиці, але зі значенням, яке порушує обмеження первинного ключа:

ВСТАВИТИ У ЗНАЧЕННЯ суб'єктів (1, 'Алгебра');ВСТАВИТИ У ЗНАЧЕННЯ предметів (2, "Курс бази даних");ВСТАВИТИ У ЗНАЧЕННЯ суб'єктів (2, "Структури даних");ВСТАВИТИ В ЗНАЧЕННЯ суб'єктів (4, "Алгоритми");

У цій заяві INSERT ми спробували вставити два курси з однаковим ідентифікатором предмета первинного ключа 2, що є порушенням для обмеження первинного ключа.

Команди повинні працювати нормально, і ви не повинні отримувати помилок. Наступне:

Крок 3) Виберіть усі предмети з таблиці наступним чином:

ВИБЕРІТЬ * ІЗ суб’єктів;

Це дасть вам список предметів:

Зверніть увагу, що замість 4 рядків було вставлено лише три теми " Алгебра, курс бази даних та алгоритми ".

Рядок, значення якого порушує обмеження первинного ключа, тобто "Структури даних", було проігноровано та не вставлено. Однак SQLite продовжує виконувати інші оператори після цього рядка.

Крок 4) ВИДАЛІТЬ тему таблиці, щоб створити її знову за допомогою іншого речення ON CONFLICT для наступного прикладу, виконавши таку команду:

ТАБЛИЦЯ КРАПЛЕННЯ Предмети; 

Команда drop видаляє всю таблицю. Тематика таблиці зараз не існує.

ПРО ЗАМІНУ КОНФЛІКТУ Приклад

Крок 1) Створіть нову тему таблиці наступним чином:

СТВОРИТИ ТАБЛИЦУ [Теми] ([SubjectId] ЦІЛИЙ НЕ ПУСТОВИЙ ПЕРВИННИЙ КЛЮЧ НА ЗАМІНЕННІ КОНФЛІКТУ,[SubjectName] NVARCHAR NOT NULL); 

Зверніть увагу, що ми визначили обмеження PRIMARY KEY для стовпця SubjectId. Обмеження первинного ключа не дозволяє вставити два повторювані значення у стовпець SubjectId, щоб усі значення в цьому стовпці мали бути унікальними.

Також зауважте, що ми вибрали варіант вирішення конфліктів як " ЗАМІНИТИ ". Команда повинна успішно працювати, і ви не повинні отримувати помилок:

Крок 2) Тепер давайте вставимо деякі значення в нову тему таблиці, але зі значенням, яке порушує обмеження первинного ключа:

ВСТАВИТИ У ЗНАЧЕННЯ суб'єктів (1, 'Алгебра');ВСТАВИТИ У ЗНАЧЕННЯ предметів (2, "Курс бази даних");ВСТАВИТИ У ЗНАЧЕННЯ суб'єктів (2, "Структури даних");ВСТАВИТИ В ЗНАЧЕННЯ суб'єктів (4, "Алгоритми");

У цій заяві INSERT ми спробували вставити два курси з однаковим ідентифікатором предмета первинного ключа 2, що є порушенням для обмеження первинного ключа.

Команди повинні працювати нормально, і ви не повинні отримувати помилок. Наступне:

Крок 3) Виберіть усі предмети з таблиці наступним чином:

ВИБЕРІТЬ * ІЗ суб’єктів;

Це дасть вам список предметів:

Зверніть увагу, що було вставлено лише три теми " Алгебра, структури даних та алгоритми ", тоді як ми намагалися вставити 4 рядки.

Рядок, значення якого порушує обмеження первинного ключа, тобто " Структури даних ", замінило значення " Курс бази даних " таким чином:

  • Перші два оператори вставки працюють нормально без проблем. Два предмети з алгебри та курсу бази даних будуть вставлені з ідентифікаторами 1, 2.
  • Коли SQLite намагається запустити третій оператор вставки за допомогою SubjectId 2 і SubjectName " Структури даних ", він виявляє, що вже існує тема з SubjectId = 2. Що є порушенням для обмеження первинного ключа, визначеного в стовпці SubjectId.
  • SQLite вибере роздільну здатність ЗАМІНИ для цього конфлікту. Він замінює значення, яке вже існує в таблиці суб'єктів, новим значенням із оператора вставки. Отже, " Курс бази даних " SubjectName буде замінено на "SubjectName" " Структури даних ".

Короткий зміст:

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