php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-02-2012, 13:59
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard InnoDB auto_increment Problem?

Hallo,

hat jemand eine Lösung für das Problem mit dem auto_increment und InnoDB?

Wenn ich einen Datensatz in einer Tabelle speichern will und dieser schief läuft oder ich diesen mit einem Rollback abbreche, erhöht sich dennoch der auto_increment-Wert des Primärschlüssels. Das kann doch nicht wahr sein!

Das Problem hatte ich vor 2 Jahren schon mal, und hatte nun gehofft das MySQL das endlich mal gefixt hat, aber nix ist!

Jemand eine Idee, wie ich das Problem umgehen kann?

Danke!
Mit Zitat antworten
  #2 (permalink)  
Alt 08-02-2012, 14:08
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Hallo,

hat jemand eine Lösung für das Problem mit dem auto_increment und InnoDB?

Wenn ich einen Datensatz in einer Tabelle speichern will und dieser schief läuft oder ich diesen mit einem Rollback abbreche, erhöht sich dennoch der auto_increment-Wert des Primärschlüssels. Das kann doch nicht wahr sein!
Warum ist das ein Problem? Die ID hat ja so oder so keine Bedeutung. Da könnte theoretisch auch irgendein Zufallswert stehen.
Mit Zitat antworten
  #3 (permalink)  
Alt 08-02-2012, 19:04
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du mit der ID weiter arbeitest um z.B. mehrere Tabellen zu verknüpfen, ist das schon ein Problem. Was denkst du wie schnell der AI-Wert in die Höhe schnellen kann. Es ist auf jeden Fall nicht zu ignorieren. Ich kann mich noch an vor 2 Jahren erinnern, das Szenario weiß ich leider nicht mehr, mir hat es alle Daten durcheinander gebracht.

Geändert von TriphunEM (08-02-2012 um 19:08 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 08-02-2012, 19:30
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn du davon ausgehst, dass die ID der nächsthöchste Wert ist, machst du sowieso was falsch. Den generierten Autoindex fragt man ab statt ihn zu erraten, dann kommen auch definitiv keine Daten durcheinander.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 08-02-2012, 19:31
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Wenn du mit der ID weiter arbeitest um z.B. mehrere Tabellen zu verknüpfen, ist das schon ein Problem.
Nein. Warum sollte das ein Problem sein?

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Was denkst du wie schnell der AI-Wert in die Höhe schnellen kann. Es ist auf jeden Fall nicht zu ignorieren.
Wieviele Milliarden Datensätze hast du vor zu speichern?
Mit Zitat antworten
  #6 (permalink)  
Alt 12-02-2012, 00:38
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.272
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Der Auto_Increment-Wert generiert Dir automatisch einen automatischen Schlüssel ... mehr nicht.

Wie soll Deiner Meinung nach die Datenbank 2 parallele Transaktionen handeln, die beiden einen Auto_Increment anfordern, für die erste allerdings, nachdem die 2. Ihren Wert bekommen hat, ein Rollback durchgeführt wird?
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #7 (permalink)  
Alt 13-02-2012, 09:13
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja okay. Da hast du recht. Aber ich werd über kurz oder lang Millionen von Datensätzen anlegen, irgendwann ist auch ein LongInt erschöpft. Dann ist schluss. In InnoDB ein String als Primärschlüssel nehmen ist auch nicht das wahre, wie ich mich informiert habe.
Mit Zitat antworten
  #8 (permalink)  
Alt 13-02-2012, 09:34
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ein Maximum von 18446744073709551615 reicht dir nicht?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #9 (permalink)  
Alt 13-02-2012, 09:40
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

MySQL :: MySQL 5.0 Reference Manual :: 10.1.1 Numeric Type Overview

Wenn dir 10^19 nicht ausreichen, hast du ein Speicherplatzproblem. Selbst wenn ein Datensatz nur 8 Byte groß wäre (so viel braucht man alleine für die bigint-Spalte), würdest du 134.217.728 Terabyte Speicherplatz benötigen, bevor du an das Limit von bigint anstößt. Sofern du nicht Google bist, gehe ich davon aus, dass du ohnehin nicht so viel zur Verfügung hast
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (13-02-2012 um 09:44 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 13-02-2012, 09:53
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Okay. Auch wieder wahr. Nur werden es ja nicht so viele Datensätze sein. Aber durch Rollbacks und parallelen Zugriffen schnellt der auto increment-Wert so schnell hoch, das ich da kein guten Bauchgefühl habe. Bei Test hab ich schon erlebt das der 10. Datensatz schon einen auto increment-Wert weit über 100 hatte, und da hab ich schon von schlimmeren werte gelesen!
Mit Zitat antworten
  #11 (permalink)  
Alt 13-02-2012, 10:00
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Okay, dann teil den Wert durch 10 oder meinetwegen sogar durch 10.000. Bei letzterem sind es immer noch 13.400TB oder 1,8 Trillionen Datensätze. Die entscheidende Frage ist, ob du lang genug lebst, so viele Daten zu sammeln.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #12 (permalink)  
Alt 13-02-2012, 10:08
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Okay. Auch wieder wahr. Nur werden es ja nicht so viele Datensätze sein. Aber durch Rollbacks und parallelen Zugriffen schnellt der auto increment-Wert so schnell hoch, das ich da kein guten Bauchgefühl habe. Bei Test hab ich schon erlebt das der 10. Datensatz schon einen auto increment-Wert weit über 100 hatte, und da hab ich schon von schlimmeren werte gelesen!
Hmmm....
Wenn du so viel, auf INSERT folgende Rollbacks, hast, dann scheint mir irgendwas am Konzept faul zu sein.

Sach doch mal, wie es zu so vielen kommt....
__________________
Wir werden alle sterben
Mit Zitat antworten
  #13 (permalink)  
Alt 13-02-2012, 11:08
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Okay. Auch wieder wahr. Nur werden es ja nicht so viele Datensätze sein. Aber durch Rollbacks und parallelen Zugriffen schnellt der auto increment-Wert so schnell hoch, das ich da kein guten Bauchgefühl habe. Bei Test hab ich schon erlebt das der 10. Datensatz schon einen auto increment-Wert weit über 100 hatte, und da hab ich schon von schlimmeren werte gelesen!
Ich würde mich an das halten, was combie sagt, aber nur als Anmerkung nebenbei: Du kannst statt Integer-Werte auch UUIDs als Primärschlüssel verwenden.
Mit Zitat antworten
  #14 (permalink)  
Alt 13-02-2012, 11:32
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Na okay. Ich werde es mal so versuchen.
Ich hab jetzt nochmal nach gedacht, was damals mein Problem war. Ich glaube es ist das Problem mit dem LAST_INSERT_ID, was fehlerhaft funktioniert.

Wenn ich Tabellen abhängig von einander beschreibe und will die letzte angelegte Id ermitteln, bekam ich oft die falsche Id und so ist alles durcheinander gekommen, was ja als Grund parallele Zugriffe haben könnte!

Kann es sein das LAST_INSERT_ID unabhängig von einer transaktion läuft?

Es geht um ein Statistik-Tool, was also bedeutet das pro Seitenaufruf einiges an Daten in den Tabellen gespeichert werden.

Und Rollbacks kommen nicht als so oft vor, aber parallele Zugriffe schon.
Mit Zitat antworten
  #15 (permalink)  
Alt 13-02-2012, 11:41
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Na okay. Ich werde es mal so versuchen.
Ich hab jetzt nochmal nach gedacht, was damals mein Problem war. Ich glaube es ist das Problem mit dem LAST_INSERT_ID, was fehlerhaft funktioniert.

Wenn ich Tabellen abhängig von einander beschreibe und will die letzte angelegte Id ermitteln, bekam ich oft die falsche Id und so ist alles durcheinander gekommen, was ja als Grund parallele Zugriffe haben könnte!

Kann es sein das LAST_INSERT_ID unabhängig von einer transaktion läuft?

Es geht um ein Statistik-Tool, was also bedeutet das pro Seitenaufruf einiges an Daten in den Tabellen gespeichert werden.

Und Rollbacks kommen nicht als so oft vor, aber parallele Zugriffe schon.
Wenn du LAST_INSERT_ID() immer unmittelbar nach dem INSERT verwendest, sollte es keine Probleme geben. Aber warum rufst du selber LAST_INSERT_ID() auf? Überlass das doch der mysql-Extension von PHP.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit ID, auto_increment, Daten bearbeiten Pepy SQL / Datenbanken 2 28-10-2006 15:52
Problem mit insert BLOB / InnoDB Zool-78 SQL / Datenbanken 0 19-10-2005 16:40
Problem mit Auto_Increment SW!SH PHP Developer Forum 3 10-07-2005 19:45
Auto_increment Problem deschmiddi SQL / Datenbanken 3 27-10-2004 14:49
auto_increment problem icon SQL / Datenbanken 4 18-07-2004 23:22

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

EJS TreeGrid ansehen EJS TreeGrid

EJS TreeGrid is DHTML component written in pure JavaScript to display and edit data in table, grid, tree view or grid with tree on HTML page

09.04.2019 coqsoft@ | Kategorie: JAVASCRIPT/ Components
Suchmaschine redaktionell, Branchenportal zum Geld verdienen

Programmbeschreibung Die Bezahl-Suchmaschine ist in Perl und PHP programmiert (eigenes CGI-Verzeichnis notwendig), benötigt PHP aber keine MySQL-Datenbank. Webmaster haben mit dieser Suchmaschine neben der normalen kostenlosen Registrierung von Lin

06.04.2019 skripte@ | Kategorie: PHP/ Suchmaschinen
Oog Photo-Video-Gallery

Mit Oog Photo-Gallery können Sie einfach und stilvoll Bilder (auch Video & Audio) auf Ihrem PHP5-Webserver veröffentlichen und verwalten. Lizenz: GNU GPL v2

06.04.2019 trottbrand@ | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:26 Uhr.