Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

www.webdp.net, Event 9 IIS log failed to write entry, wwwxxx jeffs, Catastrophic failure Unexpected method call sequence. 0x8000ffff (-2147418113)., ksh lock a file, [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_DBC failed, sed: -e expression #1, char 1: unterminated address regex, procmail + change subject, w2ksp4.exe download, /proc/kallsyms format

Links

XODOX
Impressum

#1: Race Condition bei Subquery

Posted on 2008-04-10 15:18:09 by David Fuhr

Hallo,

kann es bei einem Subquery wie diesem hier durch eine Race Condition zu
doppelten Werten in der id-Spalte kommen? Falls ja, wie kann man das am
besten (ohne auto_increment) vermeiden?

INSERT INTO collection (`id`, `name`, `element`) VALUES ((SELECT MAX(c2.
`id`) + 1 FROM collection c2), 'stack_foo', 'myelementvalue');

Gruß
David

Report this message

#2: Re: Race Condition bei Subquery

Posted on 2008-04-10 19:04:53 by arkascha

David Fuhr wrote:

> kann es bei einem Subquery wie diesem hier durch eine Race Condition zu
> doppelten Werten in der id-Spalte kommen? Falls ja, wie kann man das am
> besten (ohne auto_increment) vermeiden?
>
> INSERT INTO collection (`id`, `name`, `element`) VALUES ((SELECT MAX(c2.
> `id`) + 1 FROM collection c2), 'stack_foo', 'myelementvalue');
>

Eine 'Race Condition' kann ich mir bei einem RDBMS kaum vorstellen, die
Statements werden streng sequentiell abgearbeitet werden. Experten mögen
mich korrigieren und Gegenbeispiele liefern...
Im konkreten Fall wird das innere SELECT komplettiert, bevor das INSERT
gestartet wird. Aus dem SELECT wird eine temporäre Tabelle generiert, aus
der dann die INSERT-Statements entstehen.

--
arkascha

Report this message

#3: Re: Race Condition bei Subquery

Posted on 2008-04-10 23:57:51 by Axel Schwenke

David Fuhr <david.fuhr@web.de> wrote:
>
> kann es bei einem Subquery wie diesem hier durch eine Race Condition zu
> doppelten Werten in der id-Spalte kommen? Falls ja, wie kann man das am
> besten (ohne auto_increment) vermeiden?
>
> INSERT INTO collection (`id`, `name`, `element`) VALUES ((SELECT MAX(c2.
> `id`) + 1 FROM collection c2), 'stack_foo', 'myelementvalue');

Probier das doch einfach mal aus, dann wirst du sehen, daß sich
*diese* Frage gar nicht stellt.

BTW gibts AUTO_INCREMENT genau dafür. Aber wenn du nicht willst...


XL

Report this message

#4: Re: Race Condition bei Subquery

Posted on 2008-04-11 12:33:46 by Frank Arthur

> kann es bei einem Subquery wie diesem hier durch eine Race Condition zu
> doppelten Werten in der id-Spalte kommen? Falls ja, wie kann man das am
> besten (ohne auto_increment) vermeiden?
>
> INSERT INTO collection (`id`, `name`, `element`) VALUES ((SELECT MAX(c2.
> `id`) + 1 FROM collection c2), 'stack_foo', 'myelementvalue');

LOCK TABLES

Report this message