[MySQL] Multi-row multi-table update

Pagina: 1
Acties:

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Omdat MySQL geen multi-row indepent updates ondersteund, gebruik ik een work around met een update table.
Het gaat om de laatste query. Na deze query verwacht ik in t (1, 2) en (2, 0), maar ik zie (1, 1) en (2, 0).
Weet iemand waardoor dit komt?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DROP TABLE t;
DROP TABLE tu;

CREATE TABLE t (
  a int(11) NOT NULL default '0',
  b int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO t VALUES (1, 0);
INSERT INTO t VALUES (2, 0);

CREATE TABLE tu (
  a int(11) NOT NULL default '0',
  b int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO tu VALUES (1, 1);
INSERT INTO tu VALUES (1, 1);

UPDATE t INNER JOIN tu USING (a) SET t.b = t.b + tu.b;

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:31

Creepy

Tactical Espionage Splatterer

uit t wordt (1,0) 2 keer geselecteerd en de waarde tu.b erbij opgeteld en geupdate. Je update treedt twee keer op. De tweede keer dat die row wordt geupdate staat er echter nog steeds de oorsprongelijke waarde voor t.b, en niet de waarde na de eerste update.

Eerst worden alle betreffende rows geselecteerd met de bijbehorende waarden. Vervolgens draait de update voor alle rows achter elkaar. Na elke row update worden NIET opnieuw nieuwe waarden ingelezen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ah, crap. Ik wil eigenlijk een tabel updaten op de volgende manier, maar dan met een paar queries in plaats van een paar honderd.
SQL:
1
2
3
4
update t set b = ? where a = 1;
update t set b = ? where a = 2;
update t set b = ? where a = 3;
update t set b = ? where a = 4;

? is in elke update anders en het aantal rows is erg groot. Kan dit met een paar queries (of een enkele) in MySQL?
En in de SQL standaard?

[ Voor 4% gewijzigd door Olaf van der Spek op 09-01-2005 18:57 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
is dit iets wat via een script moet werken, of gewoon een eenmalige actie?
voor eenmalige acties heb ik zelf gewoon een script geschreven die wel een update over meerdere tabellen kan doen. Ik vul dan in welke tabel moet worden geüpdate, welke kolommen, de primary key en een SELECT-query die het geheel van de juiste data voorziet.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Dit is voor in een script. En het gaat om een groot aantal updates per seconde.

[ Voor 51% gewijzigd door Olaf van der Spek op 10-01-2005 11:07 ]