Какво е INSERT INTO?

Основната цел на системите за бази данни е да съхраняват данни в таблици. Данните обикновено се предоставят от приложни програми, които работят върху базата данни. За тази цел SQL имаКоманда INSERT, която се използва за съхраняване на данни в таблица. The Командата INSERT създава нов редв таблицата за съхраняване на данни.

Основен синтаксис

Нека разгледаме основния синтаксис на командата SQL INSERT, показана по-долу.

INSERT INTO `table_name`(column_1,column_2,...) VALUES (стойност_1,стойност_2,...);

  • INSERT INTO `име_на_таблица`е командата, която казва на MySQL сървъра да добави нов ред в таблица с име `table_name`.
  • (колона_1,колона_2,...)указва колоните, които да бъдат актуализирани в новия ред
  • СТОЙНОСТИ (стойност_1,стойност_2,...)указва стойностите, които да се добавят в новия ред

Когато предоставяте стойностите на данните, които да бъдат вмъкнати в новата таблица, трябва да се вземе предвид следното, докато се работи с различни типове данни.

  • Низови типове данни- всички стойности на низа трябва да бъдат затворени в единични кавички.
  • Числови типове данни- всички числови стойности трябва да се предоставят директно, без да се затварят в единични или двойни кавички.
  • Типове данни за дата- поставете стойностите на датата в единични кавички във формат "ГГГГ-ММ-ДД".

Пример:

Да предположим, че имаме следния списък с нови членове на библиотеката, които трябва да бъдат добавени в базата данни.

Пълни имена Дата на раждане пол физически адрес пощенски адрес номер за връзка Имейл адрес
Леонард Хофстадтер Мъжки Уудкрест 0845738767
Шелдън Купър Мъжки Уудкрест 0976736763
Раджеш Кутрапали Мъжки Феървю 0938867763
Лесли Уинкъл 14/02/1984 Мъжки 0987636553
Хауърд Воловиц 24/08/1981 Мъжки Южен парк П.О. Кутия 4563 0987786553

Lets" INSERT данни един по един. Ще започнем с Леонард Хофстадтер. Ще третираме номера за контакт като числов тип данни и няма да ограждаме номера в единични кавички.

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ("Leonard Hofstadter","Male","Woodcrest",0845738767);

Изпълнението на горния скрипт премахва 0 от номера за контакт на Леонард. Това е така, защото стойността ще се третира като числова стойност и нулата (0) в началото се изпуска, тъй като не е значима.

За да се избегнат подобни проблеми, стойността трябва да бъде оградена в единични кавички, както е показано по-долу -

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ("Sheldon Cooper","Male","Woodcrest", "0976736763");

В горния случай zero(0) няма да бъде премахната

Промяната на реда на колоните няма ефект върху заявката INSERT, стига правилните стойности да са картографирани към правилните колони.

Заявката, показана по-долу, демонстрира горната точка.

INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`)VALUES ("0938867763","Мъж","Rajesh Koothrappali","Woodcrest");

Горните заявки пропуснаха колоната за дата на раждане, по подразбиране MySQL ще вмъкне NULL стойности в колони, които са пропуснати в заявката INSERT.

Нека сега вмъкнем записа за Лесли, който съдържа датата на раждане. Стойността на датата трябва да бъде оградена в единични кавички във формата "ГГГГ-ММ-ДД".

INSERT INTO `members` (`full_names`,`date_of_birth`,`gender`,`physical_address`,`contact_number`) СТОЙНОСТИ ("Leslie Winkle","1984-02-14","Male","Woodcrest", " 0987636553");

Всички горепосочени заявки посочиха колоните и ги съпоставиха със стойности в израза за вмъкване. Ако предоставяме стойности за ВСИЧКИ колони в таблицата, тогава можем да пропуснем колоните от заявката за вмъкване.

INSERT INTO `members` VALUES (9,"Howard Wolowitz","Male","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Нека сега използваме израза SELECT, за да видим всички редове в таблицата с членове. SELECT * FROM `members`;

членски_номерпълни_именаполдата на ражданефизически адреспощенски адресконтактен_номерелектронна поща
1 Джанет ДжоунсЖенски пол21-07-1980 Първа улица Парцел №4Лична чанта0759 253 542 Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите.
2 Джанет Смит ДжоунсЖенски пол23-06-1980 Мелроуз 123НУЛАНУЛАТози имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите.
3 Робърт ФилМъжки12-07-1989 3-та улица 34НУЛА12345 Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите.
4 Глория УилямсЖенски пол14-02-1984 2-ра улица 23НУЛАНУЛАНУЛА
5 Леонард ХофстадтерМъжкиНУЛАУудкрестНУЛА845738767 НУЛА
6 Шелдън КупърМъжкиНУЛАУудкрестНУЛА976736763 НУЛА
7 Раджеш КутрапалиМъжкиНУЛАУудкрестНУЛА938867763 НУЛА
8 Лесли УинкълМъжки14-02-1984 УудкрестНУЛА987636553 НУЛА
9 Хауърд ВоловицМъжки24-08-1981 Южен паркП.О. Кутия 4563987786553 Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите.

Забележете, че номерът за контакт на Леонард Хофстадтер е изпуснал нулата (0) от номера за контакт. Другите номера за връзка не са изпуснали нулата (0) в началото.

Вмъкване в таблица от друга таблица

Командата INSERT може да се използва и за вмъкване на данни в таблица от друга таблица. Основният синтаксис е както е показано по-долу.

INSERT INTO table_1 SELECT * FROM table_2;

Нека сега да разгледаме практически пример, ние ще създадем фиктивна таблица за категории филми за демонстрационни цели. Ще наречем новата таблица на категориите category_archive. Скриптът, показан по-долу, създава таблицата.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Изпълнете горния скрипт, за да създадете таблицата.

Нека сега да вмъкнем всички редове от таблицата с категории в таблицата с архив на категориите. Скриптът, показан по-долу, ни помага да постигнем това.

INSERT INTO `categories_archive` SELECT * FROM `categories`;

Изпълнението на горния скрипт вмъква всички редове от таблицата с категории в таблицата с архив на категориите. Обърнете внимание, че структурите на таблиците ще трябва да бъдат еднакви, за да работи скриптът. По-стабилен скрипт е този, който картографира имената на колоните във вмъкнатата таблица с тези в таблицата, съдържаща данните.

Показаната по-долу заявка демонстрира използването му.

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;

Изпълнение на заявката SELECT

ИЗБЕРЕТЕ * ОТ `categories_archive`

дава следните резултати, показани по-долу.

идентификатор_на_категорияИме на категориязабележки
1 КомедияФилми с хумор
2 Романтиченлюбовни истории
3 епиченистория древни филми
4 УжасНУЛА
5 научна фантастикаНУЛА
6 ТрилърНУЛА
7 действиеНУЛА
8 романтична комедияНУЛА
9 Анимационни филмиНУЛА
10 Анимационни филмиНУЛА

Резюме

  • Командата INSERT се използва за добавяне на нови данни в таблица
  • Стойностите на датата и низа трябва да бъдат оградени в единични кавички.
  • Числовите стойности не е необходимо да бъдат оградени в кавички.
  • Командата INSERT може да се използва и за вмъкване на данни от една таблица в друга.

Използвайки SQL, можете да копирате информация от една таблица в друга.

Операторът INSERT INTO SELECT копира данни от една таблица и ги вмъква в съществуваща таблица.

SQL оператор INSERT INTO SELECT,

Операторът INSERT INTO SELECT избира данни от една таблица и ги вмъква в съществуваща таблица. Всички съществуващи редове в целевата таблица не се променят.

SQL INSERT INTO SELECT, Синтаксис

Можем да копираме всички колони от една таблица в друга съществуваща таблица:

INSERT INTO таблица2
ИЗБЕРЕТЕ * ОТ маса 1;

Или можем само да копираме колоните, които искаме, в друга съществуваща таблица:

INSERT INTO таблица2
(имена_на_колони)
ИЗБЕРЕТЕ име(на) на колони
ОТ маса 1;

Демо база данни

В този урок ще използваме добре познатата база данни Northwind.

По-долу има избор от таблицата „Клиенти“:

Потребителско имеиме на клиентаЛицето за контактАдресградПощенски кодДържава
1 Алфред Футеркисте Мария Андерс Обере ул. 57 Берлин 12209 Германия
2 Ана Трухильо Емпаредадос и хеладос Ана Трухильо Avda. de la Constitucion 2222 Мексико D.F. 05021 Мексико
3 Антонио Морено Такериа Антонио Морено Матадерос 2312 Мексико D.F. 05023 Мексико

И избор от таблицата "Доставчици":

SQL INSERT INTO SELECT, Примери

Копиране само на няколко колони от „Доставчици“ в „Клиенти“:

Копирайте само немски доставчици в "Клиенти" .

sql INSERT INTO заявката има смисъл, когато таблицата на базата данни е създадена. Тоест таблицата съществува, има име, създадени редове и колони. таблицата се създава от оператора: , таблицата се модифицира от оператора .

sql заявка INSERT INTO - синтаксис на заявка

sql INSERT INTO заявката има следния синтаксис:

INSERT INTO table_name (в скоби, ако е необходимо, вмъкнете списък с колони, където искате да вмъкнете данни) VALUES вмъкнати данни1, вмъкнати данни2, вмъкнати данни3.

Между INSERT и INTRO може да се вмъкне опция IGNORE. Не е задължително. Необходим за защита на първичните ключове при редактиране на таблица. В противен случай, ако по време на редактиране има дублиране на първични ключове, тогава при вмъкване на опцията IGNORE, първият ред с първичния ключ ще остане в модифицираната таблица, други първични ключове се изтриват. По подразбиране тази опция е пропусната.

Има незадължителни опции LOW_PRIORITY и DELAYED. Те определят приоритетите за добавяне на информация към базата данни. Първият задава очакванията за освобождаване на базата данни, вторият означава буфериране на информация.

Ред на заявка: INSERT с клаузата VALUES ще добави един ред към таблицата на базата данни. Клаузата VALUES съдържа стойностите на тези данни.

Подзаявките могат да се използват вместо клаузата VALUES. INSERT с подзаявка добавя към таблицата редовете, върнати от подзаявката. Сървърът на базата данни обработва подзаявката и вмъква всички върнати редове в таблицата. Сървърът не вмъква редове, ако подзаявката не ги избира.

  • subquery_1 - подзаявка, която сървърът обработва по същия начин като изгледа
  • subquery_2 е подзаявка, която връща редовете, които са вмъкнати в таблицата. Списъкът на тази подзаявка трябва да има същия брой колони като списъка с колони INSERT.

Подзаявките практически не се използват в базата данни MySQL.

INSERT INTO sql примери за заявки в MySQL база данни

Вмъкнете нови редове в MySQL база данни с командата INSERT INTRO.

Първи пример.

Вмъкнете нови редове в таблицата table_name.

INSERT INTO table_name VALUES ('2','145','1','name');

Това означава, че искаме да вмъкнем стойностите 2,145,1,name в колоните в таблицата table_name. Тъй като колоните не са посочени, стойностите се попълват във всички колони на таблицата.

Втори пример.

Вмъкване на информация в желаните (посочени) колони на таблицата table_name.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES ('name1','subname1',' [имейл защитен]′), ('име2','подиме2',' [имейл защитен]′), ('име3','подиме3',(' [имейл защитен]′);

Игор Серов специално за сайта "".

В допълнение към оператора SELECT, обсъден по-рано, езикът за манипулиране на данни (DML) съдържа три други оператора: INSERT, UPDATE и DELETE. Подобно на оператора SELECT, тези три оператора работят върху таблици или изгледи. Тази статия се занимава с оператора INSERT, а другите два оператора се обсъждат в следващата статия.

INSERT Изявлениевмъква редове (или части от редове) в таблица. Има две различни форми на тази инструкция:

ВМЪКНЕТЕ име на_таб_[(кола_списък)] СТОЙНОСТИ ПО ПОДРАЗБИРАНЕ | СТОЙНОСТИ (( ПО ПОДРАЗБИРАНЕ | NULL | израз ) [ ,...n]) INSERT INTO tab_name | име_на_изглед [(кола_списък)] (избор_инструкция | изпълни_инструкция) Синтаксис

Първата форма на оператора ви позволява да вмъкнете един ред (или част от него) в таблицата. А втората форма на израза INSERT ви позволява да вмъкнете в таблицата резултатния набор от оператор SELECT или съхранена процедура, изпълнена от оператор EXECUTE. Съхранената процедура трябва да върне данни, които да бъдат вмъкнати в таблицата. Когато се използва с оператор INSERT, операторът SELECT може да избира стойности от различна или същата таблица, в която се вмъкват данните, стига типовете данни на съответните колони да са съвместими.

И за двата формуляра типът данни на всяка вмъкната стойност трябва да е съвместим с типа данни на съответната колона на таблицата. Всички низови и временни данни трябва да бъдат оградени в кавички; Числовите стойности не е необходимо да бъдат поставени в кавички.

Вмъкване на един ред

И за двете форми на оператора INSERT изричният списък от колони не е задължителен. Липсата на списък с колони е еквивалентна на посочване на всички колони на таблицата.

Параметър СТОЙНОСТИ ПО ПОДРАЗБИРАНЕвмъква стойности по подразбиране за всички колони. Колоните с типа данни TIMESTAMP или свойството IDENTITY се вмъкват по подразбиране със стойности, автоматично генерирани от системата. За колони с други типове данни се вмъква съответната ненулева стойност по подразбиране, ако има такава, или NULL в противен случай. Ако нулевите стойности не са разрешени за колона и не е дефинирана стойност по подразбиране за колоната, операторът INSERT е неуспешен и се показва подходящо съобщение.

Следният пример вмъква редове в таблицата Employee в базата данни SampleDb, демонстрирайки как да използвате израза INSERT за вмъкване на малко количество данни в базата данни:

ИЗПОЛЗВАЙТЕ SampleDb; INSERT INTO Employee VALUES(34990, "Андрей", "Батонов", "d1"); INSERT INTO Employee VALUES(38640, "Aleksey", "Vasin", "d3");

Има два различни начинивмъкване на стойности в нова линия. Операторът INSERT в примера по-долу изрично използва ключова дума NULL и вмъква стойността NULL в съответната колона:

ИЗПОЛЗВАЙТЕ SampleDb; INSERT INTO Employee VALUES(34991, "Андрей", "Батонов", NULL);

За да вмъкнете стойности в някои (но не всички) колони на таблица, обикновено трябва изрично да посочите тези колони. Колоните, които не са посочени, трябва или да позволяват NULL стойности или трябва да имат дефинирана стойност по подразбиране за тях.

ИЗПОЛЗВАЙТЕ SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Андрей", "Батонов");

Предишните два примера са еквивалентни. В таблицата Employee единствената колона, която позволява нулеви стойности, е колоната DepartmentNumber, а за всички останали колони тази стойност е забранена от клаузата NOT NULL в оператора CREATE TABLE.

Ред на стойностите в изречение ЦЕННОСТИОператорите INSERT може да се различават от реда, указан в оператора CREATE TABLE. В такъв случай техният ред трябва да съвпада с реда, в който съответните колони са изброени в списъка с колони. Следното е пример за вмъкване на данни в ред, различен от оригинала:

ИЗПОЛЗВАЙТЕ SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALUES ("d1", "Батонов", 34993, "Андрей");

Вмъкване на няколко реда

Втората форма на оператора INSERT вмъква в таблицата един или повече редове, избрани от подзаявката. Примерът по-долу показва как да вмъкнете редове в таблица, като използвате втората форма на израза INSERT. В този случай се извършва заявка за избор на номерата и имената на отделите, разположени в Москва, и зареждането на получения набор в нова таблица, създадена по-рано.

Новата таблица MoscowDepartment, създадена в примера по-горе, има същите колони като съществуващата таблица Department, с изключение на липсващата колона Location. Подзаявката в израза INSERT избира всички редове в таблицата Department, за които стойността на колоната Location е Москва, които след това се вмъкват в новата таблица, създадена в началото на заявката.

Примерът по-долу показва друг начин за вмъкване на редове в таблица с помощта на втората форма на израза INSERT. В този случай се изпълнява заявка за избор на персонални номера, номера на проекти и начални дати на проекта за всички служители с позиция „Мениджър“, които работят по проекта p2, след което се зарежда полученият набор в нова таблица, създадена в началото на заявката:

ИЗПОЛЗВАЙТЕ SampleDb; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR(4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam(EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Преди вмъкване на редове с помощта на оператора INSERT, таблиците MoscowDepartment и ManagerTeam (в примерите по-горе) бяха празни. Ако таблицата вече съществува и съдържа редове с данни, тогава към нея ще бъдат добавени нови редове.

В предишните раздели разгледахме работата по получаване на данни от предварително създадени таблици. Сега е време да разберем как можем да създаваме/изтриваме таблици, да добавяме нови записи и да изтриваме стари. За тези цели в SQLима оператори като: СЪЗДАВАЙТЕ- създава таблица АЛТЕР- променя структурата на таблицата, ИЗПУСКАЙТЕ- изтрива таблица или поле, ВМЪКНЕТЕ- добавя данни към таблицата. Нека започнем нашето запознанство с тази група оператори от оператора ВМЪКНЕТЕ.

1. Добавяне на цели линии

Както подсказва името, операторът ВМЪКНЕТЕизползва се за вмъкване (добавяне) на редове към таблица на база данни. Добавянето може да стане по няколко начина:

  • - добавете един пълен ред
  • - добавяне на част от низ
  • - добавяне на резултати от заявка.

И така, за да добавим нов ред към таблицата, трябва да посочим името на таблицата, да изброим имената на колоните и да посочим стойността за всяка колона, използвайки конструкцията INSERT INTO име_на_таблица (поле1, поле2 ...) СТОЙНОСТИ (стойност1, стойност2 ...). Нека разгледаме един пример.

ВМЪКНЕТЕ В СТОЙНОСТИ на продавачи (ИД, адрес, град, име на продавача, държава).("6", "1-ва улица", "Лос Анджелис", "Хари Монро", "САЩ")

Можете също да промените реда на имената на колоните, но в същото време трябва да промените реда на стойностите в параметъра СТОЙНОСТИ.

2. Добавяне на част от линиите

В предишния пример, когато използвате оператора ВМЪКНЕТЕние изрично маркирахме имената на колоните в таблицата. Използвайки този синтаксис, можем да пропуснем някои колони. Това означава, че въвеждате стойност за някои колони, но не предоставяте стойности за други. Например:

ВМЪКНЕТЕ В СТОЙНОСТИ на продавачи (ID, град, име на продавача).("6", "Лос Анджелис", "Хари Монро")

AT този примерне сме посочили стойност за две колони адреси Държава. Можете да изключите някои колони от извлечението INSERT INTO, ако позволява дефинирането на таблицата. В този случай трябва да бъде изпълнено едно от следните условия: тази колона е дефинирана като позволяваща стойността НУЛА(липса на каквато и да е стойност) или в дефиницията на таблицата посочената стойност по подразбиране. Това означава, че ако не е зададена стойност, ще се използва стойността по подразбиране. Ако пропуснете колона в таблица, която не позволява стойности в своите редове НУЛАи няма дефинирана стойност по подразбиране, СУБД ще издаде съобщение за грешка и този ред няма да бъде добавен.

3. Добавяне на избрани данни

В предишните примери вмъкнахме данни в таблици, като ги написахме ръчно в заявката. Операторът обаче INSERT INTOни позволява да автоматизираме този процес, ако искаме да вмъкнем данни от друга таблица. За да направи това, SQL има структура като тази: ВМЪКНЕТЕ В ... ИЗБЕРЕТЕ .... Този дизайн ви позволява едновременно да избирате данни от една таблица и да ги вмъквате в друга. Да предположим, че имаме друга маса Продавачи_ЕСсъс списък на продавачите на нашите стоки в Европа и трябва да ги добавим към общата таблица Продавачи. Структурата на тези таблици е еднаква (един и същи брой колони и еднакви имена), но различни данни. За да направим това, можем да напишем следната заявка:

INSERT INTO Продавачи (ИД, адрес, град, име на продавача, държава) ИЗБЕРЕТЕИдентификационен номер, адрес, град, име на продавача, държава FROM Sellers_EU

Трябва да обърнете внимание, че стойността на вътрешните ключове не се повтаря (поле документ за самоличност), в противен случай ще възникне грешка. Оператор ИЗБЕРЕТЕможе да включва и предложения КЪДЕТОза филтриране на данни. Трябва също да се отбележи, че СУБД не обръща внимание на имената на колоните, съдържащи се в израза ИЗБЕРЕТЕ, за нея е важен само редът на подреждането им. Следователно данните в първата посочена колона, която е избрана поради ИЗБЕРЕТЕ, така или иначе ще се попълни първата колона на таблицата Продавачипосочени след оператора INSERT INTO, независимо от името на полето.

4. Копиране на данни от една таблица в друга

Често при работа с бази данни става необходимо да се създават копия на всякакви таблици с цел архивиране или модификация. За да направите пълно копие на таблица в SQL, се предоставя отделен оператор ИЗБЕРЕТЕ В. Например, трябва да създадем копие на таблицата Продавачи, ще трябва да напишете заявката, както следва:

ИЗБЕРЕТЕ * INTO Sellers_new FROM Sellers

За разлика от предишния дизайн ВМЪКНЕТЕ В ... ИЗБЕРЕТЕ ...когато се добавят данни към съществуваща таблица, конструкцията копира данните в новата таблица. Може също да се каже, че първият конструкт импортира данни, докато вторият конструкт експортира. При използване на структурата ИЗБЕРЕТЕ ... В ... ОТ ...трябва да се вземе предвид следното:

  • - можете да използвате всякакви изречения в оператора ИЗБЕРЕТЕ, като ГРУПИРАЙ ПОи ИМАЩ
  • - присъединяването може да се използва за добавяне на данни от множество таблици
  • - данни могат да се добавят само към една таблица, независимо от колко таблици са взети.