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 gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
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 gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
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.271
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 gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
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 gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
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

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

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:47 Uhr.