phpbar.de logo

Mailinglisten-Archive

[php] unverstaendliche Daten

[php] unverstaendliche Daten

Andreas Müller php at universalware.de
Don Aug 17 11:35:11 CEST 2006


Hallo zusammen,

da muss ich mal wieder meinen Senf dazugeben :-)

Mein erster Gedanke war "INSERT DELAYED ..." - könnte das evtl. sein Norbert
?

Aber auch wenn nicht gibts dafür eine simple mögliche Erklärung:
Du sagst Norbert das dZeit mittels now() gesetzt wird. Tja wann wird denn
now() ausgeführt? Genau dann wenn die Query ausgeführt wird. Was passiert
nun wenn du einen langen SELECT auf die Tabelle machst und andere Threads
damit warten müssen? Da wir hier echtes Multithreading haben kann es da
schon passieren das die Threads nicht in der "richtigen" Reihenfolge
ausgeführt werden. Die Funktion now() wird nun erst während des eigentlichen
Inserts ausgeführt - und das kann dann schon man etwas später sein als der
Zeitpunkt an dem die Query abgesetzt wurde. Das würde auch die enge
Verbindung zwischen den ID's erklären z.B.
|   2817 | 2006-08-17 09:40:01 |
|   2822 | 2006-08-17 09:40:01 |
wurden scheinbar unmittelbar nacheinander eingefügt. Sieht man oben dann
nochmal. Der AUTO_INCREMENT Wert wird nun scheinbar schon kurz nach dem
Parsen erzeugt (was auch dem Inhalt von einem BIN-Log entspricht - da steht
die ID drin und das SQL mit 'now()' siehe aus Replikationsdoku).

Daher würde ich vorschlagen den Zeitpunkt nicht MySQL bestimmen zu lassen
sondern von aussen mitzugeben.

> 1.
> " You can retrieve the most recent AUTO_INCREMENT value with the 
> LAST_INSERT_ID() SQL function or the mysql_insert_id() C API 
> function. 
> These functions are connection-specific, so their return 
> values are not 
> affected by another connection which is also performing inserts."

Das bedeutet übrigends das wenn du einen insert auf Verbindung 1 machst und
einen zweiten auf Verbindung 2 das ein mysql_insert_id() auf Verbindung 1
den Wert für das letzte Insert auf verbindung 1 liefert und
mysql_insert_id() auf Verbindung 2 den Wert für das letzte Insert auf
verbindung 2. Wäre ja schlimm wenn ich zu spät auf verbindung 1 den Wert
abfragen würde und dann den Wert von Verbindung 2 bekomme. Das heist NICHT
das hier dann pro Verbindung irgendwas gezählt wird!

Gruß,
Andreas



php::bar PHP Wiki   -   Listenarchive