[MySQL] Transaction: insert, update met foreign key

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 01:04
Beste mensen,

Ik probeer een transaction uit te voeren waarin eerst een record wordt toegevoegd met een insert. Vervolgens wil ik in dezelfde transaction een update uitvoeren in een ander tabel om de id die toegevoegd is met de insert query, te updaten. Echter is die kolom een foreign key en moet de id dus bestaan.

Nu heb ik het idee dat de transaction de insert nog niet echt heeft uitgevoerd en er dus nog geen relatie gelegd kan worden waardoor de gehele transaction mislukt omdat er een update wordt uitgevoerd met een niet bestaande relatie:

MySQL:
1
2
3
4
5
6
7
START TRANSACTION;

INSERT INTO table (id) VALUES(1);

UPDATE child_table SET parent_id = 1;

COMMIT;


Heeft iemand enig idee wat ik hieraan kan doen?

Acties:
  • 0 Henk 'm!

  • HansH
  • Registratie: Oktober 2000
  • Laatst online: 14-09 11:05
Commit doen voordat je de child table van de parent id voorziet

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dat lijkt me nogal een vreemde oplossing aangezien je dan net zo goed geen transaction kan gebruiken. Het hele idee is dat je de hele rits query's die eraan vooraf gaat kun terugdraaien. Volgens mij moet bovenstaande transactie geen enkel probleem opleveren. ZeroXT: je zegt dat je "het idee hebt dat" er iets gebeurt maar je zegt nergens dát het fout gaat, hoe het fout gaat, onder welke voorwaarde het dan fout gaat, enz. Kun je eens beginnen met daadwerkelijk je probleem omschrijven?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Wat NMe zegt.

Wat er gebeurt: de insert wordt doorgevoerd voor de scope van de transactie (daarbuiten niet, totdat er een commit volgt). Een update kan met het door de insert verkregen id, zolang dat binnen dezelfde transactie gebeurt (weet je wel zeker dat dat zo is?), want daarbuiten bestaat die id inderdaad nog niet (afhankelijk van isolatie).

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant