Autor Zpráva
joozef
Profil
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
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 *
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
Kajman:
Ďakujem, s NEW.id to už funguje !
joozef
Profil
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 *
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
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 *
UPDATE tab2 SET tab2.title = NEW.title, tab2.id = NEW.id
WHERE tab2.id = OLD.id
joozef
Profil
Kajman:
ďakujem !

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0