Avatar billede anadan Nybegynder
18. august 2005 - 10:27 Der er 19 kommentarer

Multipel INSERT i MySQL

Er det muligt med MySQL at lave multipel indsættelse uden at bruge tranactions? Jeg forestiller mig noget i denne retning:

string sql = "insert into ... values ...; insert into... values ...; insert into ... values ...;";

Dette giver mig dog en fejl ("Error in your SQL syntax")

Jeg ved at det er muligt fra mysqls kommando linie..

Jeg bruger ODBC driveren
Avatar billede erikjacobsen Ekspert
18. august 2005 - 10:30 #1
Den mysql klient du tænker på, deler selv op ved semikolon.

Du kan dog indsætte fx 3 rækker som:

  INSERT INTO tabel (s) VALUES (7),(9),(13)
Avatar billede erikjacobsen Ekspert
18. august 2005 - 10:33 #2
...og om du så kan undgå at sætte det i en transaktion, skal du selv nærlæse MySql-dokumentationen for at finde ud af. Hvorfor vil du spare dig selv for at starte en transaktion?
Avatar billede anadan Nybegynder
18. august 2005 - 10:34 #3
Mine statements er ret komplicerede, de er på formen :

INSERT INTO table SELECT value1, value2, value3 FROM table WHERE condition AND condition

Hvordan kan jeg omforme dette til den form du foreslår med mulitple statements?
Avatar billede anadan Nybegynder
18. august 2005 - 10:34 #4
Jeg har prøvet transactions, det bliver ikke hurtigere
Avatar billede erikjacobsen Ekspert
18. august 2005 - 10:43 #5
Det kan du ikke. Det er kun den simpleste form, som vist, der er mulig. Men så bruger du bare transaktioner - som alle andre ;)
Avatar billede anadan Nybegynder
18. august 2005 - 10:47 #6
Men opdeler ODBC ikke selv ved semikolon? Jeg mener at dette ville være noget hurtigere end transaktioner, for ikke at sige nemmere i mit tilfælde...
Avatar billede erikjacobsen Ekspert
18. august 2005 - 10:49 #7
Selv om den gjorde, ville den ikke gøre det til en transaktion for dig.
Avatar billede anadan Nybegynder
18. august 2005 - 10:50 #8
Jeg behøver ikke transaktioner i dette tilfælde
Avatar billede erikjacobsen Ekspert
18. august 2005 - 10:54 #9
Så forstår jeg ikke hvorfor du snakker om transaktioner?
Avatar billede anadan Nybegynder
18. august 2005 - 10:57 #10
Det var også det jeg sagde jeg ville undgå i starten. Jeg vil bare smide en masse sql afsted på én gang, for at gøre det hurtigere
Avatar billede erikjacobsen Ekspert
18. august 2005 - 11:01 #11
Der er vist ingen drivere, odbc eller andet, der understøtter flere sql-sætninger adskilt af komma, og det giver også sjældent mening, da man skal kunne reagere fornuftigt på fejl.

Og så er det altid farligt at sige, at man ikke behøver transaktioner, men det vil jeg lade være helt op til dig ;)
Avatar billede anadan Nybegynder
18. august 2005 - 11:04 #12
bare underligt at mysql kommandolinien understøtter det..
Avatar billede erikjacobsen Ekspert
18. august 2005 - 11:12 #13
Se [18/08-2005 10:30:45] - du kan gøre det samme.
Avatar billede anadan Nybegynder
18. august 2005 - 11:15 #14
Nej, det jeg mener er at :

insert into user(id, username) values(1, 'adam');insert into user(id, username) values(2, 'eva');

-virker fra mysql kommandolinien, derfor mente jeg at det også kunne gøres fra c#
Avatar billede erikjacobsen Ekspert
18. august 2005 - 11:33 #15
Se [18/08-2005 10:30:45] - du kan gøre det samme. Du finder, som den klient du bruger, selv semikoloner, og sender dem af sted een af gangen.
Avatar billede anadan Nybegynder
18. august 2005 - 11:53 #16
Okay, ændrede det til transaktioner.
Forskellen i performance er ikke-eksisterende.
Med 100 insert statements, bruger begge versioner ~6 sekunder
Avatar billede arne_v Ekspert
18. august 2005 - 18:39 #17
1) Du bruger InnoDB tabeller ? Med MyISAM tabeller ignorerer MYSQL bare
  alt med transaktioner !

2) Jeg vil klart anbefale MySQL Connector for .NET fremfor ODBC.

3) Mine erfaringer med simple INSERT's er at en stor transaktioner er
  målbart hurtigere end mange små transaktioner. Ingen garanti for
  at INSERT SELECT opfører sig lige sådan.

4) At du kan nogle ting i mysql utility kan jo skyldes at det program
  hjælper dig lidt behind the scene.
Avatar billede anadan Nybegynder
29. september 2005 - 14:45 #18
Det er på tide at lukke, nogen der vil have point?
Avatar billede erikjacobsen Ekspert
29. september 2005 - 15:15 #19
Ingen point til mig, tak.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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