Co je INSERT INTO?

Hlavním cílem databázových systémů je ukládat data do tabulek. Data jsou obvykle dodávána aplikačními programy, které běží nad databází. K tomuto konci, SQL Příkaz INSERT, který se používá k ukládání dat do tabulky. The Příkaz INSERT vytvoří nový řádek v tabulce pro uložení dat.

Základní syntaxe

Podívejme se na základní syntaxi příkazu SQL INSERT znázorněného níže.

INSERT INTO `název_tabulky`(sloupec_1,sloupec_2,...) HODNOTY (hodnota_1,hodnota_2,...);

  • INSERT INTO `název_tabulky` je příkaz, který říká serveru MySQL, aby přidal nový řádek do tabulky s názvem `název_tabulky`.
  • (sloupec_1, sloupec_2,...) určuje sloupce, které mají být aktualizovány v novém řádku
  • HODNOTY (hodnota_1, hodnota_2,...) určuje hodnoty, které mají být přidány do nového řádku

Při zadávání datových hodnot, které mají být vloženy do nové tabulky, je třeba při práci s různými datovými typy vzít v úvahu následující.

  • Řetězcové datové typy- všechny hodnoty řetězce by měly být uzavřeny v jednoduchých uvozovkách.
  • Číselné datové typy- všechny číselné hodnoty by měly být dodány přímo, aniž by byly uzavřeny v jednoduchých nebo dvojitých uvozovkách.
  • Datové typy dat- hodnoty data uzavřít do jednoduchých uvozovek ve formátu "RRRR-MM-DD".

Příklad:

Předpokládejme, že máme následující seznam nových členů knihovny, které je třeba přidat do databáze.

Celá jména Datum narození Rod Fyzická adresa Poštovní adresa Kontaktní číslo Emailová adresa
Leonard Hofstadter mužský Woodcrest 0845738767
Sheldon Cooper mužský Woodcrest 0976736763
Rajesh Koothrappali mužský Fairview 0938867763
Leslie Winkle 14/02/1984 mužský 0987636553
Howard Wolowitz 24/08/1981 mužský South Park P.O. Krabice 4563 0987786553

Pojďme" VLOŽIT data jeden po druhém. Začneme Leonardem Hofstadterem. Kontaktní číslo budeme považovat za číselný datový typ a ne uzavřete číslo do jednoduchých uvozovek.

INSERT INTO `členové` (`celá_jména`,`pohlaví`,`fyzická_adresa`,`kontaktní_číslo`) VALUES ("Leonard Hofstadter","Muž","Woodcrest",0845738767);

Spuštěním výše uvedeného skriptu se z Leonardova kontaktního čísla odstraní 0. Je to proto, že hodnota bude považována za číselnou hodnotu a nula (0) na začátku je vypuštěna, protože není významná.

Aby se předešlo takovým problémům, musí být hodnota uzavřena v jednoduchých uvozovkách, jak je uvedeno níže -

INSERT INTO `členové` (`celá_jména`,`pohlaví`,`fyzická_adresa`,`kontaktní_číslo`) VALUES ("Sheldon Cooper","Muž","Woodcrest", "0976736763");

Ve výše uvedeném případě nebude nula (0) vypuštěna

Změna pořadí sloupců nemá žádný vliv na dotaz INSERT, pokud byly správné hodnoty namapovány na správné sloupce.

Níže uvedený dotaz demonstruje výše uvedený bod.

INSERT INTO `členové` (`kontaktní_číslo`,`pohlaví`,`celá_jména`,`fyzická_adresa`)VALUES ("0938867763","Muž","Rajesh Koothrappali","Woodcrest");

Výše uvedené dotazy přeskočily sloupec data narození, ve výchozím nastavení MySQL vloží hodnoty NULL do sloupců, které jsou v dotazu INSERT přeskočeny.

Nyní vložíme záznam pro Leslie, který má zadané datum narození. Hodnota data by měla být uzavřena v jednoduchých uvozovkách ve formátu „RRRR-MM-DD“.

INSERT INTO `členové` (`celá_jména`,`datum_narození`,`pohlaví`,`fyzická_adresa`,`kontaktní_číslo`) VALUES ("Leslie Winkle","1984-02-14","Muž","Woodcrest"," 0987636553");

Všechny výše uvedené dotazy specifikovaly sloupce a mapovaly je na hodnoty v příkazu insert. Pokud dodáváme hodnoty pro VŠECHNY sloupce v tabulce, můžeme sloupce z vkládacího dotazu vynechat.

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

Použijme nyní příkaz SELECT k zobrazení všech řádků v tabulce členů.SELECT * FROM `členové`;

členské číslocelá_jménaRoddatum narozenífyzická adresapoštovní_adresačíslo_kontaktue-mailem
1 Janet Jonesováženský21-07-1980 První ulice pozemek č. 4Soukromá taška0759 253 542 Tato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.
2 Janet Smith Jonesováženský23-06-1980 Melrose 123NULANULATato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.
3 Robert Philmužský12-07-1989 3. ulice 34NULA12345 Tato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.
4 Gloria Williamsováženský14-02-1984 2. ulice 23NULANULANULA
5 Leonard HofstadtermužskýNULAWoodcrestNULA845738767 NULA
6 Sheldon CoopermužskýNULAWoodcrestNULA976736763 NULA
7 Rajesh KoothrappalimužskýNULAWoodcrestNULA938867763 NULA
8 Leslie Winklemužský14-02-1984 WoodcrestNULA987636553 NULA
9 Howard Wolowitzmužský24-08-1981 SouthParkP.O. Krabice 4563987786553 Tato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.

Všimněte si, že u kontaktního čísla Leonarda Hofstadtera klesla nula (0) z kontaktního čísla. Ostatní kontaktní čísla neklesla na nulu (0) na začátku.

Vkládání do tabulky z jiné tabulky

Příkaz INSERT lze také použít k vložení dat do tabulky z jiné tabulky. Základní syntaxe je uvedena níže.

INSERT INTO tabulka_1 SELECT * FROM tabulka_2;

Podívejme se nyní na praktický příklad, pro demonstrační účely vytvoříme fiktivní tabulku pro kategorie filmů. Novou tabulku kategorií nazveme category_archive. Skript uvedený níže vytvoří tabulku.

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`))

Pro vytvoření tabulky spusťte výše uvedený skript.

Nyní vložme všechny řádky z tabulky kategorií do tabulky archivu kategorií, k tomu nám pomáhá skript zobrazený níže.

INSERT INTO `archiv_kategorií` SELECT * FROM `kategorie`;

Spuštěním výše uvedeného skriptu se vloží všechny řádky z tabulky kategorií do tabulky archivu kategorií. Všimněte si, že struktury tabulek musí být stejné, aby skript fungoval. Robustnější skript je ten, který mapuje názvy sloupců ve vkládací tabulce na ty v tabulce obsahující data.

Dotaz uvedený níže ukazuje jeho použití.

INSERT INTO `archiv_kategorií`(id_kategorie,název_kategorie,poznámky) SELECT id_kategorie,název_kategorie,poznámky FROM `kategorie`;

Provedení dotazu SELECT

VYBERTE * Z `archivu_kategorií`

poskytuje následující výsledky uvedené níže.

category_idNázev Kategoriepoznámky
1 KomedieFilmy s humorem
2 RomantickýMilostné příběhy
3 EpickéStarověké příběhové filmy
4 HrůzaNULA
5 Sci-fiNULA
6 ThrillerNULA
7 AkceNULA
8 Romantická komedieNULA
9 KarikaturyNULA
10 KarikaturyNULA

souhrn

  • Příkaz INSERT se používá k přidání nových dat do tabulky
  • Hodnoty data a řetězce by měly být uzavřeny v jednoduchých uvozovkách.
  • Číselné hodnoty nemusí být uzavřeny v uvozovkách.
  • Příkaz INSERT lze také použít k vložení dat z jedné tabulky do druhé.

Pomocí SQL můžete kopírovat informace z jedné tabulky do druhé.

Příkaz INSERT INTO SELECT zkopíruje data z jedné tabulky a vloží je do existující tabulky.

SQL příkaz INSERT INTO SELECT,

Příkaz INSERT INTO SELECT vybere data z jedné tabulky a vloží je do existující tabulky. Žádné existující řádky v cílové tabulce se nezmění.

SQL INSERT INTO SELECT, Syntaxe

Můžeme zkopírovat všechny sloupce z jedné tabulky do jiné existující tabulky:

VLOŽ DO tabulka2
VYBRAT * OD stůl 1;

Nebo můžeme zkopírovat pouze požadované sloupce do jiné existující tabulky:

VLOŽ DO tabulka2
(jméno_sloupců)
VYBRAT název_sloupce
Z stůl 1;

Demo verze databáze

V tomto tutoriálu použijeme dobře známou databázi Northwind.

Níže je uveden výběr z tabulky „Zákazníci“:

uživatelské IDJméno klientaKontaktní osobaAdresaměstoPSČZemě
1 Alfreds Futterkiste Marii Andersovou Obere Str. 57 Berlín 12209 Německo
2 Ana Trujillo Emparedados a helados Ana Trujillo Avda. de la Constitucion 2222 Mexiko D.F. 05021 Mexiko
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexiko D.F. 05023 Mexiko

A výběr z tabulky "Dodavatelé":

SQL INSERT DO SELECT, příklady

Kopírování pouze několika sloupců z "Dodavatelé" do "Zákazníci":

Kopírování pouze německých dodavatelů do "Zákazníků".

sql dotaz INSERT INTO má smysl, když byla vytvořena databázová tabulka. To znamená, že tabulka existuje, má název, vytvořené řádky a sloupce. tabulku vytvoří operátor: , tabulku upraví operátor .

sql dotaz INSERT INTO - syntaxe dotazu

SQL dotaz INSERT INTO má následující syntaxi:

INSERT INTO název_tabulky (do závorky případně vložte seznam sloupců, kam chcete vložit data) VALUES vložená data1, vložená data2, vložená data3.

Mezi INSERT a INTRO můžete vložit volbu IGNORE. Není to vyžadováno. Potřebné k ochraně primárních klíčů při úpravách tabulky. V opačném případě, pokud při editaci dojde k duplikaci primárních klíčů, pak při vložení volby IGNORE zůstane v editované tabulce první řádek s primárním klíčem Ostatní primární klíče budou smazány. Ve výchozím nastavení tuto možnost vynecháváme.

Existují volitelné možnosti LOW_PRIORITY a DELAYED. Určují priority pro přidávání informací do databáze. První specifikuje čekání na uvolnění databáze, druhý znamená ukládání informací do vyrovnávací paměti.

Řádek v dotazu: INSERT s frází VALUES vám umožní přidat jeden řádek do databázové tabulky. Klauzule VALUES obsahuje hodnoty těchto dat.

Místo fráze VALUES lze zadat poddotazy. INSERT s poddotazem přidá do tabulky řádky vrácené poddotazem. Databázový server zpracuje poddotaz a vloží všechny vrácené řádky do tabulky. Server nevkládá řádky, pokud je nevybere poddotaz.

  • subquery_1 - subdotaz, který server zpracovává stejným způsobem jako pohled
  • subquery_2 je poddotaz, který vrací řádky vložené do tabulky. Seznam tohoto poddotazu musí mít stejný počet sloupců jako seznam sloupců INSERT.

Poddotazy se v databázi MySQL prakticky nepoužívají.

Příklady SQL dotazu INSERT INTO v databázi MySQL

Nové řádky vkládáme do databáze MySQL pomocí příkazu INSERT INTRO.

První příklad.

Vložte nové řádky do tabulky název_tabulky.

INSERT INTO název_tabulky VALUES ('2′,'145′,'1′,'název');

To znamená, že do sloupců tabulky název_tabulky chceme vložit hodnoty 2,145,1,name. Vzhledem k tomu, že sloupce nejsou specifikovány, jsou hodnoty vyplněny ve všech sloupcích tabulky.

Příklad dva.

Vložte informace do požadovaných (zadaných) sloupců tabulky název_tabulky.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES ('name1','subname1',' [e-mail chráněný]'), ('jméno2', 'podjméno2',' [e-mail chráněný]′), ('jméno3′, 'podjméno3′,(' [e-mail chráněný]′);

Igor Serov zejména pro web "".

Kromě výše popsaného příkazu SELECT obsahuje jazyk DML (Data Manipulation Language) tři další příkazy: INSERT, UPDATE a DELETE. Stejně jako příkaz SELECT fungují tyto tři příkazy buď s tabulkami, nebo s pohledy. Tento článek popisuje příkaz INSERT a další dva příkazy jsou popsány v dalším článku.

příkaz INSERT vloží řádky (nebo části řádků) do tabulky. Existují dvě různé formy tohoto pokynu:

INSERT název_tabulky [(sloupec_seznam)] VÝCHOZÍ HODNOTY | HODNOTY (( DEFAULT | NULL | výraz ) [ ,...n]) INSERT INTO název_tabulky | jméno_zobrazení [(seznam_sloupec)] (výpis_výběr | příkaz_provedení) Konvence syntaxe

První forma instrukce umožňuje vložit do tabulky jeden řádek (nebo jeho část). A druhá forma příkazu INSERT umožňuje vložit do tabulky sadu výsledků příkazu SELECT nebo uloženou proceduru provedenou příkazem EXECUTE. Uložená procedura musí vrátit data, která mají být vložena do tabulky. Při použití s ​​příkazem INSERT může příkaz SELECT vybrat hodnoty z jiné nebo stejné tabulky, do které se data vkládají, pokud jsou datové typy odpovídajících sloupců kompatibilní.

U obou formulářů musí být datový typ každé vložené hodnoty kompatibilní s datovým typem odpovídajícího sloupce tabulky. Všechny řetězce a dočasná data musí být uzavřena v uvozovkách; Číselné hodnoty není nutné uzavírat do uvozovek.

Vložení jednoho řádku

U obou forem příkazu INSERT je explicitní uvedení seznamu sloupců volitelné. Neuvedení sloupců je stejné jako zadání všech sloupců v tabulce.

parametr DEFAULT VALUES vloží výchozí hodnoty pro všechny sloupce. Sloupce s datovým typem TIMESTAMP nebo vlastností IDENTITY jsou standardně vloženy s hodnotami, které jsou automaticky generovány systémem. Pro sloupce jiných datových typů se vloží odpovídající výchozí hodnota, která není null, pokud je k dispozici, nebo v opačném případě NULL. Pokud sloupec nepovoluje hodnoty null a nemá definovanou výchozí hodnotu, příkaz INSERT selže a zobrazí se zpráva.

Níže uvedený příklad vkládá řádky do tabulky Zaměstnanec v databázi SampleDb, což ukazuje použití příkazu INSERT k vložení malého množství dat do databáze:

POUŽÍVEJTE SampleDb; INSERT INTO Employee VALUES (34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES (38640, "Alexey", "Vasin", "d3");

Existují dva různé způsoby vkládání hodnot do nový řádek. Příkaz INSERT v níže uvedeném příkladu výslovně používá klíčové slovo NULL a vloží hodnotu NULL do odpovídajícího sloupce:

POUŽÍVEJTE SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Chcete-li vložit hodnoty do některých (ale ne všech) sloupců tabulky, musíte tyto sloupce obvykle explicitně určit. Nespecifikované sloupce musí povolovat hodnoty NULL nebo mít definovanou výchozí hodnotu.

POUŽÍVEJTE SampleDb; INSERT INTO Employee(Id, First Name, LastName) VALUES (34992, "Andrey", "Batonov");

Předchozí dva příklady jsou ekvivalentní. V tabulce Employee je jediným sloupcem, který umožňuje hodnoty NULL, sloupec DepartmentNumber a všechny ostatní sloupce byly zakázány klauzuli NOT NULL v příkazu CREATE TABLE.

Pořadí hodnot v Nabídka VALUES Příkazy INSERT se mohou lišit od pořadí určeného v příkazu CREATE TABLE. V tomto případě se jejich pořadí musí shodovat s pořadím, ve kterém jsou odpovídající sloupce uvedeny v seznamu sloupců. Níže je uveden příklad vkládání dat v jiném pořadí, než bylo původní:

POUŽÍVEJTE SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, First Name) VALUES ("d1", "Batonov", 34993, "Andrey");

Vkládání více řádků

Druhá forma příkazu INSERT vloží do tabulky jeden nebo více řádků vybraných poddotazem. Níže uvedený příklad ukazuje, jak vložit řádky do tabulky pomocí druhého formuláře příkazu INSERT. V tomto případě se provede dotaz na výběr čísel a jmen oddělení umístěných v Moskvě a výsledná sada výsledků se načte do nové tabulky vytvořené dříve.

Nová tabulka MoscowDepartment vytvořená ve výše uvedeném příkladu má stejné sloupce jako existující tabulka Department, s výjimkou chybějícího sloupce Location. Poddotaz v příkazu INSERT vybere všechny řádky v tabulce oddělení, pro které je hodnota sloupce Umístění "Moskva", které se pak vloží do nové tabulky vytvořené na začátku dotazu.

Níže uvedený příklad ukazuje další způsob, jak vložit řádky do tabulky pomocí druhého formuláře příkazu INSERT. V tomto případě se provede dotaz na výběr personálních čísel, čísel projektů a data zahájení projektu pro všechny zaměstnance na pozici „Manažer“, kteří pracují na projektu p2, a poté načte výslednou sadu výsledků do nové tabulky vytvořené na začátku roku dotaz:

POUŽÍVEJTE 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";

Před vložením řádků pomocí příkazu INSERT byly tabulky MoscowDepartment a ManagerTeam (ve výše uvedených příkladech) prázdné. Pokud by tabulka již existovala a obsahovala řádky s daty, byly by do ní přidány nové řádky.

V předchozích částech jsme se podívali na práci při získávání dat z předem vytvořených tabulek. Nyní je čas zjistit, jak můžeme vytvářet/mazat tabulky, přidávat nové záznamy a mazat staré. Pro tyto účely v SQL Existují operátoři jako: VYTVOŘIT- vytvoří stůl, ZMĚNIT- mění strukturu tabulky, POKLES- smaže tabulku nebo pole, VLOŽIT- přidá data do tabulky. Začněme se seznamovat s touto skupinou operátorů od operátora VLOŽIT.

1. Přidání celých řádků

Jak název napovídá, operátor VLOŽIT slouží k vkládání (připojování) řádků do databázové tabulky. Přidání lze provést několika způsoby:

  • - přidejte jeden celý řádek
  • - přidat část řádku
  • - přidat výsledky dotazu.

Abychom do tabulky přidali nový řádek, musíme zadat název tabulky, vypsat názvy sloupců a zadat hodnotu pro každý sloupec pomocí konstrukce VLOŽ DO název_tabulky (pole1, pole2 ...) HODNOTY (hodnota1, hodnota2...). Podívejme se na příklad.

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Můžete také změnit pořadí názvů sloupců, ale zároveň musíte změnit pořadí hodnot v parametru HODNOTY.

2. Přidání části řádků

V předchozím příkladu při použití operátoru VLOŽIT explicitně jsme označili názvy sloupců tabulky. Pomocí této syntaxe můžeme přeskočit některé sloupce. To znamená, že zadáte hodnoty pro některé sloupce, ale neposkytnete je pro ostatní. Například:

INSERT INTO Sellers (ID, City, Seller_name) VALUES("6", "Los Angeles", "Harry Monroe")

V v tomto příkladu nezadali jsme hodnotu pro dva sloupce Adresa A Země. Některé sloupce můžete z výpisu vyloučit VLOŽ DO, pokud to umožňuje definici tabulky. V tomto případě musí být splněna jedna z podmínek: tento sloupec je definován jako platný NULA(absence jakékoli hodnoty) nebo zadaná výchozí hodnota v definici tabulky. To znamená, že pokud není zadána žádná hodnota, použije se výchozí hodnota. Pokud v tabulce chybí sloupec, který neumožňuje zobrazení hodnot v řádcích NULA a nemá definovanou výchozí hodnotu, DBMS vygeneruje chybovou zprávu a řádek nebude přidán.

3. Přidání vybraných dat

V předchozím příkladu jsme vložili data do tabulek ručním zadáním do dotazu. Nicméně provozovatel VLOŽ DO nám umožňuje automatizovat tento proces, pokud chceme vložit data z jiné tabulky. Pro tento účel v SQL existuje taková konstrukce jako VLOŽIT DO... VYBRAT.... Tento design umožňuje současně vybírat data z jedné tabulky a vkládat je do jiné. Předpokládejme, že máme další stůl Prodejci_EU se seznamem prodejců našeho zboží v Evropě a potřebujeme je doplnit do obecné tabulky Prodejci. Struktura těchto tabulek je stejná (stejný počet sloupců a stejné názvy), ale odlišná data. K tomu můžeme napsat následující dotaz:

INSERT INTO Sellers (ID, adresa, město, prodejce_jméno, země) VYBERTEID, adresa, město, jméno prodejce, země FROM Sellers_EU

Musíte dávat pozor, aby se hodnoty interních klíčů neopakovaly (pole ID), jinak dojde k chybě. Operátor VYBRAT může také obsahovat návrhy KDE k filtrování dat. Je třeba také poznamenat, že DBMS nevěnuje pozornost názvům sloupců obsažených ve výpisu VYBRAT, důležité je pro ni pouze pořadí, ve kterém jsou uspořádány. Proto data v prvním zadaném sloupci, který byl vybrán kvůli VYBRAT, bude v každém případě vyplněn v prvním sloupci tabulky Prodejci, uvedené za provozovatelem VLOŽ DO, bez ohledu na název pole.

4. Kopírování dat z jedné tabulky do druhé

Často je při práci s databázemi potřeba vytvořit kopie libovolných tabulek za účelem zálohování nebo úpravy. Chcete-li vytvořit úplnou kopii tabulky, SQL poskytuje samostatný příkaz VYBERTE DO. Potřebujeme například vytvořit kopii tabulky Prodejci, budete muset napsat žádost takto:

SELECT * INTO Sellers_new FROM Sellers

Na rozdíl od předchozího designu VLOŽIT DO... VYBRAT... Když jsou data přidána do existující tabulky, návrh zkopíruje data do nové tabulky. Můžete také říci, že první konstrukce importuje data a druhá exportuje. Při použití designu VYBERTE ... DO ... Z ... Je třeba zvážit následující:

  • - v operátoru můžete použít libovolné věty VYBRAT, jako SKUPINA VYTVOŘENÁ A MÍT
  • - spojení můžete použít k přidání dat z více tabulek
  • - data lze přidat pouze do jedné tabulky, bez ohledu na to, z kolika tabulek byla převzata.