Přikaz Insert a více tabulek

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod MacIgo2 2. 8. 2011 08:34

Zdravím,
potřebuji poradit, jak napsat příkaz Insert v sql aby se data vložila do více tabulek.
Na netu to nějak nemůžu najít... :'( Díky moc ;-)
MacIgo2
Kolemjdoucí

Odeslat příspěvekod K8 2. 8. 2011 08:41

to nejde, jednim SQL příkazem se dá maximálně vložit víc řádků, ale pouze do jedné tabulky. Vkládání do více tabulek se musí dělat více příkazy a případně je mít v transakci, pokud se něco nepovede, tak se vše zruší.
Naposledy upravil K8 dne 2. 8. 2011 08:53, celkově upraveno 2
K8
Pokročilý

Odeslat příspěvekod MacIgo2 2. 8. 2011 08:51

jo, díky moc :)
MacIgo2
Kolemjdoucí

Odeslat příspěvekod K8 2. 8. 2011 08:55

a při troše hledání na webu se dá najít i co si koupit za knížku, aby ses měl z čeho učit: PHP 5 : začínáme programovat
K8
Pokročilý

Odeslat příspěvekod pucmeloudek 2. 8. 2011 10:04

Jednim insertem se da urcite vlozit i do vice tabulek. Staci zalozit pohled s trigrem "instead of insert", pokud to dana platforma umoznuje
(popr. i normalni "after" trigr na tabulce muze udelat spoustu veci, ale uz to obycejne neni tak elegantni)
pucmeloudek
Junior

Odeslat příspěvekod piErcE 2. 8. 2011 10:20

architektonický horror.

No, vzhledem (z dotazu vyplývajícím) zkusenostem tazatele je navedeni na trigry opravdu zaznamenanihodne.
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod MacIgo2 2. 8. 2011 10:26

:D Já prostě nějak potřebuji docílit toho, aby řádky ve dvou tabulkách měly stejné ID.... :)
MacIgo2
Kolemjdoucí

Odeslat příspěvekod piErcE 2. 8. 2011 10:34

Fajn. Proč to musíš dělat jedním insertem? Ten ti v tomhle nepomůže.

Co ti brání v tom, aby jsi to udělal normálními dvěma inserty?
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod MacIgo2 2. 8. 2011 10:45

No pokud mám v jednom sloupci AUTO_INCREMENT, kde se id nastaví samo, tak nevím jak to stejné číslo mám hned dát do druhé tabulky....
MacIgo2
Kolemjdoucí

Odeslat příspěvekod K8 2. 8. 2011 10:53

MacIgo2 píše:No pokud mám v jednom sloupci AUTO_INCREMENT, kde se id nastaví samo, tak nevím jak to stejné číslo mám hned dát do druhé tabulky....

a je to MySQL a PHP ? - základní údaje, které jsi neuvedl, pokud ano, tak je tu manual na php http://ee.php.net/manual/en/ref.mysql.php a MySQL a je treba si o tom neco precist (nebo si poridit nejakou knizku, napr to co uz jsem odkazoval vyse)
http://www.zive.cz/Autori/sc-44/default.aspx?author=249
http://www.zive.cz/autori/sc-44/default ... 67&pgnum=2
http://interval.cz/programovani/php/
http://interval.cz/programovani/databaze/
a najit si funkci, ktera vraci posledni vlozene id v autoinkrementu
K8
Pokročilý

Odeslat příspěvekod MacIgo2 2. 8. 2011 11:20

jo, díky moc za čas :) Nějak se s tím už poperu :)
MacIgo2
Kolemjdoucí

Odeslat příspěvekod piErcE 2. 8. 2011 11:53

MacIgo2 píše:No pokud mám v jednom sloupci AUTO_INCREMENT, kde se id nastaví samo, tak nevím jak to stejné číslo mám hned dát do druhé tabulky....


Ani nad tabulkama s auto-incrementem by ti ono "v jednom insertu" problem nevyresilo.

Proste to zabal do transakce, v jedny tabulkce auto-increment vypni, vloz to nejdriv do jedny tabulky, pomoci @@IDENTITY (na ms sql serveru) ci podobne funkce (na jinych serverech) si zjisti hodnotu toho auto incrementu, a s timhle cislem to vloz do te druhe tabulky.

A nebo se zamysli nad designem te databaze, jestli neni problem v nem. Je to docela zvlastni pozadavek, i kdyz v nekterych specifickych pripadech si ho predstavit dovedu.
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod pucmeloudek 2. 8. 2011 11:59

piErcE píše:architektonický horror.

to je celkem fuk, jestli je to horor nebo ne, tady slo o to, ze neplati, ze "to nejde".
Navic to obcas je celkem fajn, treba kdyz ma clovek pohled s pivotlou tabulkou to v takovem trigru zase unpivotnout a namrskat do tabulek. nebo kdyz tam clovek ma dve tabulky 1:1.
V obou pripadech je to jednodussi a elegantnejsi nez se s tim prasit v klientovi a nasekat pri tom v tech tunach sql prikazu spousty chyb. navic existuji takovi klienti, kde ani nejde potrebne prikazy definovat.

ale chapu, ze je to hazeni perel svinim. pokud neco takovyho clovek nevymysli sam, tak to pak pouzije nekde, kam to vubec nepatri.
pucmeloudek
Junior

Odeslat příspěvekod piErcE 2. 8. 2011 12:49

Tak to, že to nejde, stále platí. Vaše tvrzení je asi tak na úrovni následující debaty:

Otázka: Jde se škodou octavia bagrovat?
Odpověď: Nejde
Pucmeloudek: Ale jasně, že jde. Když do tý oktávky přiděláš bagr, bude i octávka bagrovat.
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod Vebloud 2. 8. 2011 12:54

Potřeba vkládání do více tabulek najednou je v podstatě kdykoli, když vytvářím složitější strukturu, která je rozdělená do více tabulek. Takže v podstatě jakékoliv vazby.

Jedno z čistých řešení je použít transakci a v případě MySQL funkci last_insert_id http://dev.mysql.com/doc/refman/5.0/en/ ... -insert-id a pokud se to týká PHP, tak rovnou přes wrapper http://www.php.net/manual/en/mysqli.insert-id.php
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
VIP uživatel
Uživatelský avatar

Další stránka