Autor | Zpráva | ||
---|---|---|---|
joozef Profil |
#1 · Zasláno: 22. 5. 2011, 20:47:27
Zdravím, potrebujem pri vložení dát do jednej tabuľky vložiť tie isté dáta do druhej tabuľky. Trigger je nasledovný ale nefunguje....
CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW BEGIN INSERT INTO table_name2 select * from table_name where table_name.id = last_insert_id(); END$$ neviem či je to správne.....ale po inserte do jednej tabulky sa nevloží nič do druhej tabuľky. Ďakujem za rady. |
||
joozef Profil |
#2 · Zasláno: 22. 5. 2011, 21:16:25
no zistil som že trigger funguje ale len ak tam dám napevno table_name.id, čiže pravdepodobne nefunguje last_insert_id()....neviete niekto ako docieliť aby tam vložilo ID práve pridaného záznamu?
|
||
Kajman_ Profil * |
#3 · Zasláno: 22. 5. 2011, 21:20:45
Použil bych místo last_insert_id() NEW.id, jinak to nebude fungovat při vkládání více řádků najednou.
A jestli to nefunguje díky insert select, tak použijte insert a ve všech hodnotách použijte NEW.sloupec. |
||
joozef Profil |
#4 · Zasláno: 22. 5. 2011, 21:29:42
Kajman:
Ďakujem, s NEW.id to už funguje ! |
||
Časová prodleva: 4 dny
|
|||
joozef Profil |
#5 · Zasláno: 26. 5. 2011, 19:05:40
Dá sa nejako odstrániť aby sa to nevykonávalo for each row. ide mi o to že ten trigger používam keď sa mi do tabuľky ktorá používa InnoDB vloží záznam tak sa automatický vloží aj do tieňovej tabuľky rovnakej štruktúry až na to že tá je typu MyIssam kôli fulltextovému vyhľadávaniu. Lenže ono vlastne po každom vložení sa kopíruje celá InnoDb tabulľka resp. všetky záznamy + nový záznam a to pri veľkom počte záznamov asi nie je dvakrát vhodné....je to asi priveľká záťaž na server? opravte ma ak sa mýlim.......jediné čo ma napadá je vynechať triggre a robiť to ručne pri vložení záznamu do InnoDb tabuľky vložím to isté aj do MyIssam......dík za rady
|
||
Kajman_ Profil * |
#6 · Zasláno: 26. 5. 2011, 21:31:41
For each row znamená pro každý řádek, který vkládáte jedním příkazem insert. Nevztahuje se to na řádky, které už v tabulce byly.
|
||
joozef Profil |
#7 · Zasláno: 26. 5. 2011, 22:30:23
Kajman:
a ako by sa dal podobný trigger urobiť aj po update záznamu v prvej tabuľke tak aby sa updatol aj relevantný záznam v druhe tabuľke, toto zatiaľ mám lenže vypisuje chybu že nepozná tab1.id alebo ak to vyriešiť lepšie: CREATE TRIGGER trig_update AFTER UPDATE ON tab1 FOR EACH ROW BEGIN UPDATE tab2 SET tab2.title = tab1.title WHERE tab2.id = tab1.id END$$ |
||
Kajman_ Profil * |
#8 · Zasláno: 27. 5. 2011, 09:05:34
UPDATE tab2 SET tab2.title = NEW.title, tab2.id = NEW.id WHERE tab2.id = OLD.id |
||
joozef Profil |
#9 · Zasláno: 27. 5. 2011, 13:26:38
Kajman:
ďakujem ! |
||
Časová prodleva: 13 let
|
0