Autoinkrement unverständlich

Autoinkrement unverständlich

am 10.08.2007 13:37:49 von Thomas Barth

Hallo,

in einer Tabelle habe ich ein Autoinkrement-Feld angelegt:

`message_inc` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`message_inc`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Nun wurde eine Datensatz in dieser Tabelle angelegt um

date_time: 2007-08-09 17:24:20
message_inc: 41

und um

date_time: 2007-08-09 17:28:40
message_inc: 40

Womit kann es zusammenhängen, dass der ältere Datensatz den kleineren
Autoinkrement-Wert erhalten hat? Stellt MySQL nicht sicher, dass
Autoinkrements nachfolgend vergeben werden? MySQL-Version ist 5.0.22.


Thomas B

Re: Autoinkrement unverständlich

am 10.08.2007 13:39:25 von thborsdorfatwork

Hallo Thomas!

Thomas Barth schrieb:
> Womit kann es zusammenhängen, dass der ältere Datensatz den kleineren
> Autoinkrement-Wert erhalten hat? Stellt MySQL nicht sicher, dass
> Autoinkrements nachfolgend vergeben werden? MySQL-Version ist 5.0.22.

Doch.
Aber woher kommt das Datum? Wird das automagisch von MySQL in das Feld
eingefügt, oder ist das das Systemdatum des Client-PC, und die beiden DS
kommen von verschiedenen Rechnern mit unterschiedlicher Systemzeit?

> Thomas B

MfG Thomas.

Re: Autoinkrement unverständlich

am 10.08.2007 14:17:29 von Axel Schwenke

Thomas Barth wrote:
>
> `message_inc` int(10) unsigned NOT NULL auto_increment,
> PRIMARY KEY (`message_inc`)
> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
>
> date_time: 2007-08-09 17:24:20
> message_inc: 41
>
> date_time: 2007-08-09 17:28:40
> message_inc: 40
>
> Womit kann es zusammenhängen, dass der ältere Datensatz den kleineren
> Autoinkrement-Wert erhalten hat?

Warum sollte da ein Zusammenhang bestehen? Selbst wenn das jeweils
AUTO_INCREMENT und TIMESTAMP sind, kann man beim INSERT einen Wert
angeben, der dann an Stelle des generierten verwendet wird. Oder man
ändert die Werte später mit UPDATE. Von Spielereien mit der Systemzeit
oder ALTER TABLE ... AUTO_INCREMENT=... ganz zu schweigen.

> Stellt MySQL nicht sicher, dass
> Autoinkrements nachfolgend vergeben werden?

Normalerweise schon. Aber es gibt Ausnahmen wie InnoDB oder NDB.


XL