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 INSERT

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 UPDATE Query се използва за модифициране на съществуващите записи в таблица. Можете да използвате клаузата WHERE с UPDATE заявка, за да актуализирате избраните редове. Клаузата UPDATE актуализира таблица, като променя стойност за конкретна колона. По-долу е синтаксисът на клаузата UPDATE:

Както следва:

  • След "клаузата за актуализация", трябва да напишете името на таблицата, която да актуализирате.
  • Трябва да напишете "клауза SET", която се използва за писане на името на колоната за актуализиране и стойността, която трябва да се актуализира.
  • Можете да актуализирате повече от една колона. Можете да използвате запетая между всеки ред.
  • Можете да посочите клауза WHERE, за да посочите само някои редове. Актуализират се само редовете, които изразът оценява на true. Ако не сте посочили клауза WHERE, всички редове ще бъдат актуализирани.

Пример за актуализация на SQLite

В следващото изявление UPDATE ще актуализираме DepartmentId за студента с StudentId = 6, за да бъде 3:

АКТУАЛИЗИРАНЕ на студентиSET DepartmentId = 3КЪДЕ StudentId = 6;

Това трябва да се изпълнява успешно и не трябва да получавате изход:

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

  • В клаузата WHERE филтрирахме всички ученици, за да изберем само реда за StudentId = 6.
  • Клаузата SET ще актуализира стойността на идентификатора на отдела за избраните студенти да бъде 3.

Сега, нека проверим дали студентът с ID 6 е актуализиран, като изпълним следната команда:

ИЗБЕРЕТЕ * ОТ студенти, КЪДЕ StudentId = 6;

Сега трябва да видите, че стойността на идентификатора на отдел вече е 3, както следва:

SQLite Изтриване

Заявката за изтриване на SQLite се използва за премахване на съществуващи записи от определена таблица. Можете да използвате клаузата WHERE с заявки DELETE, за да изтриете избраните редове.

Клаузата DELETE има следния синтаксис:

  • Трябва да напишете име на таблица след клаузата DELETE FROM, от която искате да изтриете записи. ( Забележка: това, че DELETE клауза . Се използва, за да изтриете някои записи от таблица или изтриване на всички записи и няма да изтрие самата таблица, обаче, клауза DROP се използва за изтриване на цялата таблица с всички записи върху него. )
  • Ако напишете клаузата DELETE по следния начин "DELETE FROM guru", това ще изтрие всички записи от таблицата "guru".
  • Можете да посочите условие WHERE с израз, ако искате да изтриете някои конкретни редове. Ще бъдат изтрити само редовете, за които изразът се оценява на true. Например „ИЗТРИВАНЕ ОТ гуру КЪДЕ id> 5“ - това ще изтрие само записите, които имат id по-голям от 5.

Пример

В следващото изявление ще изтрием двама ученици с StudentId 11 и 12:

ИЗТРИВАНЕ ОТ студенти, КЪДЕ StudentId = 11 ИЛИ StudentId = 12;

Изразът " StudentId = 11 ИЛИ StudentId = 12 " ще бъде верен само за ученици с идентификатори 11 и 12. Така че клаузата DELETE ще бъде приложена и към двамата и ще ги изтрие само.

Тази команда трябва да се изпълнява успешно и не трябва да получавате изход, както следва:

Можете да проверите дали двамата ученици са изтрити, като изберете всички записи от таблицата Студенти, както следва:

ИЗБЕРЕТЕ * ОТ студенти;

Не бива да виждате двамата ученици с идентификатори 11 и 12, както следва:

Клауза за конфликт на SQLite

Да предположим, че имате колона, която има едно от следните ограничения на колони: УНИКАЛЕН, НЕ НУЛЕН, ПРОВЕРКА или ОСНОВЕН КЛЮЧ. И тогава се опитахте да вмъкнете или актуализирате стойност в тази колона със стойност, която е в конфликт с това ограничение.

Например, ако колона има 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. ЗАМЯНА - зависи от вида на ограничението, което има нарушението:
  • Когато има нарушение на ограничението за UNIQUE или PRIMARY KEY ограничение. REPLACE ще замени реда, който причинява нарушението, с новия вмъкнат или актуализиран ред.
  • Когато има нарушение на ограничението NOT NULL, клаузата REPLACE ще замени стойността NULL със стойността по подразбиране на тази колона. Ако колоната няма стойност по подразбиране, тогава SQLite ще прекъсне изявлението (изявлението ще бъде отменено)
  • АКО настъпи нарушението на ограничението CHECK, клаузата ще бъде отменена.

Забележка: Горните 5 резолюции са опции за това как искате да разрешите конфликта. Не е задължително това, което е приложимо за разрешаване на един конфликт, е приложимо за разрешаване на други видове конфликти.

Как да декларирам клаузата CONFLICT

Можете да декларирате клаузата ON CONFLICT, когато дефинирате ограничение за дефиниция на колона в клаузата CREATE TABLE. Използвайки следния синтаксис:

Можете да изберете една от петте резолюции за разрешаване на конфликта, както е обяснено по-горе.

ЗА КОНФЛИКТНО ИГНОР Пример

Стъпка 1) Създайте нова тема на таблицата, както следва:

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

Забележете, че сме дефинирали ограничение PRIMARY KEY в колоната SubjectId. Ограничението на първичния ключ няма да позволи да се вмъкнат две дублирани стойности в колоната SubjectId, така че всички стойности в тази колона да са уникални. Също така обърнете внимание, че ние избираме разрешаването на конфликт да бъде „ ИГНОРИРАНЕ “.

Командата трябва да се изпълнява успешно и не трябва да получавате грешки:

Стъпка 2) Нека вмъкнем някои стойности в новите теми на таблицата, но със стойност, която нарушава ограничението на първичния ключ:

INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, „Курс на база данни“);INSERT INTO Subjects VALUES (2, „Структури на данни“);INSERT INTO Subjects VALUES (4, 'Algorithms');

В това изявление INSERT се опитахме да вмъкнем два курса с един и същ първичен ключ Subject id 2, което е нарушение за ограниченията на първичния ключ.

Командите трябва да работят добре и не трябва да получавате грешки. Както следва:

Стъпка 3) Изберете всички обекти от таблицата, както следва:

SELECT * FROM Subjects;

Това ще ви даде списък с теми:

Забележете, че само три предмета бяха вмъкнати „ Алгебра, курс на база данни и алгоритми “ вместо 4 реда.

Редът, който има стойността, която нарушава ограничението на първичния ключ, който е „Структури на данни“, беше игнориран и не беше вмъкнат. SQLite обаче продължава да изпълнява други изрази след този ред.

Стъпка 4) ИЗТРЕТЕТЕ обектите на таблицата, за да я създадете отново с друга клауза ON CONFLICT за следния пример, като изпълните следната команда:

ТАБЛИЦА ЗА ПАДАНЕ Субекти; 

Командата за пускане изтрива цялата таблица. Темите на таблицата сега не съществуват.

ПРИ ЗАМЯНА НА КОНФЛИКТ Пример

Стъпка 1) Създайте нова тема на таблицата, както следва:

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

Забележете, че дефинирахме ограничение PRIMARY KEY в колоната SubjectId. Ограничението на първичния ключ няма да позволи да се вмъкнат две дублирани стойности в колоната SubjectId, така че всички стойности в тази колона да са уникални.

Също така, обърнете внимание, че ние избираме опция за разрешаване на конфликти, която да бъде „ ЗАМЕНЯНЕ “. Командата трябва да се изпълнява успешно и не трябва да получавате грешки:

Стъпка 2) Нека сега вмъкнем някои стойности в новите субекти на таблицата, но със стойност, която нарушава ограниченията на първичния ключ:

INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, „Курс на база данни“);INSERT INTO Subjects VALUES (2, „Структури на данни“);INSERT INTO Subjects VALUES (4, 'Algorithms');

В това изявление INSERT се опитахме да вмъкнем два курса с един и същ първичен ключ Subject id 2, което е нарушение за ограниченията на първичния ключ.

Командите трябва да работят добре и не трябва да получавате грешки. Както следва:

Стъпка 3) Изберете всички обекти от таблицата, както следва:

SELECT * FROM Subjects;

Това ще ви даде списък с теми:

Забележете, че са вмъкнати само три теми „ Алгебра, структури от данни и алгоритми “, докато ние се опитахме да вмъкнем 4 реда.

Редът, който има стойността, която нарушава ограничението на първичния ключ, който е „ Структури на данни “, замени стойността „ Курс на база данни “, както следва:

  • Първите две инструкции за вмъкване работят добре без проблем. Два предмета Алгебра и Курсът на база данни ще бъдат добавени с идентификатори 1, 2.
  • Когато SQLite се опитва да изпълни третия оператор за вмъкване с SubjectId 2 и SubjectName " Структури на данни ", той установява, че вече има тема с SubjectId = 2. Което е нарушение за ограничението на първичния ключ, дефинирано в колоната SubjectId.
  • SQLite ще избере резолюция REPLACE за този конфликт. Той замества стойността, която вече съществува в таблицата за предмети, с новата стойност от оператора за вмъкване. Така че " Курс на база данни " SubjectName ще бъде заменен с "SubjectName" на " Структури на данни ".

Резюме:

Клаузите INSERT, UPDATE и DELETE се използват за промяна на данните в базата данни SQLite. Клаузата CONFLICT е мощна клауза за разрешаване на всеки конфликт между данните и данните, които трябва да се модифицират.