Avatar billede jakobdo Ekspert
02. november 2004 - 22:05 Der er 9 kommentarer og
1 løsning

Hvordan indsætter jeg 2 rækker i 2 forskellige tabeller?

Jeg har lavet følgende tabeller:

Vin
id
navn

Drue
id
navn

VinDrue
id
vin_id
drue_id

Og når jeg så skal oprette en vin, så kan denne vin jo godt bestå af flere druer...

Så jeg skal lave 2 inserts i stil med:

INSERT INTO vin (id,navn) VALUES ('','SuperVinen');
INSERT INTO vinDrue (id,vin_id,drue_id) VALUES ('',mysql_insert_id(),drue1),('',mysql_insert_id(),drue3),('',mysql_insert_id(),drue4),('',mysql_insert_id(),drue6)

Problemet er lidt.
Jeg kunne lave en IF første insert går godt, så laver vi insert nummer 2.
Men hvis nummer 2 fejler, så skal nummer 1 ikke gennemføres.
Skal jeg så til at lave DELETE * FROM vin WHERE id = mysql_insert_id()

Eller er der en lettere måde at gøre dette på?

PS: Som det nok lugter lidt af, så koder jeg i PHP op mod MYSQL.
Avatar billede arne_v Ekspert
02. november 2004 - 22:09 #1
Skift fra MyISAM til InnoDB tabeller og brug transaktioner !
Avatar billede arne_v Ekspert
02. november 2004 - 22:10 #2
Hvis de 2 INSERT er i samme transaktion så garanterer databasen at enten
går de begge godt eller så fejler de begge.
Avatar billede arne_v Ekspert
02. november 2004 - 22:11 #3
PS: Hvorfor har du en id i VinDrue - kune du ikke bruge en sammensat primær nøgle ?
Avatar billede jakobdo Ekspert
03. november 2004 - 08:13 #4
Arne_V: Jeg ved desværre ikke hvordan jeg laver sammensat primær nøgle... :o(
(jeg arbejder via PhpMyAdmin.
Avatar billede arne_v Ekspert
03. november 2004 - 08:18 #5
Man kan vel også fyre SQL af i PHPMyAdmin ?

CREATE TABLE t (
  f1 INTEGER NOT NULL,
  f2 INTEGER NOT NULL,
  PRIMARY KEY(f1,f2)
);
Avatar billede jakobdo Ekspert
03. november 2004 - 08:26 #6
Ahh...
Jeg vidste ikke man kunne gøre det på denne måde! :o)

InnoDB er det også en relationsdb?
Så hvis jeg sletter vin (id = 2) så sletter den alle relationer?
Avatar billede arne_v Ekspert
03. november 2004 - 08:34 #7
Både MyISAM og InnodDB er begge MySQL. InnoDB tabeller understøtter bare
nogle yderligere features.

Jeg mener også at du kan bruge cascade delete ja.
Avatar billede arne_v Ekspert
03. november 2004 - 08:35 #8
Avatar billede jakobdo Ekspert
03. november 2004 - 08:37 #9
Jeg takker Arne_V, smid et svar (som du plejer) :o)
Avatar billede arne_v Ekspert
03. november 2004 - 09:15 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Driftstærk IT-profil til Forsvarsministeriets Materiel- og Indkøbsstyrelse

Operate Technology A/S

PHP-udvikler til Drupal

Politiets Efterretningstjeneste

Tech lead for AI og machine learning i PET

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

SOS International

Platform Engineer