[mySQL] Wo endet auto_inc ?

Bulette

وسيط الم
20 April 2006
7.064
661
Gem. mySQL-DevSquad kann man in der Datenbank einem Integer-Wert das Attribut "auto_incremential" verpassen. Das bedeutet, dass beim Zufügen eines Wertes innerhalb dieses Tables dieses Feld um +1 erhöht wird und somit autom. zur Zeile mit dem höchsten Eintrag wird (für die Nicht-mySQL-Kenner).

Wenn ich jetzt aber sehe, wie hoch der Integer-Wert nur gehen kann, dann frage ich mich, was passiert danach??? Table-Error? Integer geht bis 2.147.483.647 (zumindest bei C)... wie hoch geht es also bei mySQL??? Und was passiert, wenn Eintrag 2.147.483.648 kommt???
 
Bulette schrieb:
Wenn ich jetzt aber sehe, wie hoch der Integer-Wert nur gehen kann, dann frage ich mich, was passiert danach??? Table-Error? Integer geht bis 2.147.483.647 (zumindest bei C)... wie hoch geht es also bei mySQL??? Und was passiert, wenn Eintrag 2.147.483.648 kommt???
Wenns dir nur ums Prinzip geht - keine Ahnung, sorry, würd mich aber auch mal interessieren ;)
Wenn du extrem viele EInträge erwartest, nehm BIGINT
 
Zuletzt bearbeitet:
Ausprobieren? Der auto_increment-Wert lässt sich ja (zumindest beim Erstellen einer Tabelle) setzen... und die Datentypen von mySQL findet man über google. Also wer Lust hat, kann seine Erkentnisse ja dann hier posten! :D
 
Das Mysterium ist gelüftet :ugly:

Code:
[B]SQL-Befehl:[/B] [URL="https://www3.hevano.net/phpMyAdmin/tbl_properties.php?lang=de-utf-8&server=1&collation_connection=utf8_general_ci&db=loselogin&table=meindummertestfuersforum&sql_query=INSERT+INTO+%60meindummertestfuersforum%60+%28%60a%60%2C+%60b%60%29+VALUES+%28NULL%2C+%27g%27%29&show_query=1"][/URL]    
              INSERT  INTO  `meindummertestfuersforum` (  `a` ,  `b`  ) 
VALUES ( NULL ,  'g'
)     
      [B]MySQL meldet: [/B] 
  #1062 - Duplicate entry '2147483647' for key 1

Er nimmt also immer wieder den höchstmöglichen Key, und da der belegt ist gibt's einen "Duplicate entry".
 
Der Wertebereich einer INT-Spalte ist zum Beispiel -2147483648 bis 2147483647.

Wenn die INT-Spalte UNSIGNED ist, ist die Größe des Wertebereichs dieselbe, aber ihre Endpunkte verschieben sich zu 0 und 4294967295. Wenn Sie versuchen, -9999999999 bzw. 9999999999 zu speichern, werden die in der Spalte gespeicherten Werte statt dessen zu 0 bzw. 4294967296.

https://dev.mysql.com/doc/refman/4.0/de/numeric-types.html

*edit

hie evtl besser ersichtlich

https://dev.mysql.com/doc/refman/4.0/de/column-types.html
 
Zuletzt bearbeitet:
Bulette schrieb:
Wenn ich jetzt aber sehe, wie hoch der Integer-Wert nur gehen kann, dann frage ich mich, was passiert danach??? Table-Error?
Wenn du ganz oben angelangt bist, dann kriegst du folglich n "Schlüssel doppelt"-Fehler.

Mein Tip, wenn du wirklich solche hohen Zeilenanzahlen erwartest, kannst du bei Erreichen eines bestimmten Grenzwerts automatisch das Feld vergrößern lassen.

Bsp. du hast ganz normal INT als Typ.
PHP:
$db->insert_row("foo","bar");
$auto_id=$db->last_insert_id();

if($auto_id==2000000000)
{
  @mail($admin_email,"Tabelle zu groß","Die Tabelle wurde vergrößert.");
  $db->query("ALTER TABLE table MODIFY field BIGINT NOT NULL");
}
 
Wie groß ist wohl die Wahrscheinlichkeit, dass Google diese Ergebnisse in einer Tabelle mit einer auto_increment gespeichert hat?

Ich tippe auf
1/ | Ergebnisse(google sexbilder OR lose OR geld OR test OR shop) |