Datenbank Backup scheitert an ID

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbank Backup scheitert an ID

    Hallo,

    ich bin totaler Neuling in Sachen MySQL.

    Ich habe eine Tabelle mit ca. 300 Datensätzen und möchte die nun um ein altes Backup erweitern. Das Backup was ich einspielen möchte, hat ca. 500.000 Datensätze.

    Wenn ich nun versuche das Backup hinzuzufügen kommt die Fehlermeldung, das die ID schon vorhanden ist.

    Code:
    INSERT INTO `predb` (`id`, `vorname`, `nachname`, `alter`, `extra`,) VALUES
    (1, 'hans', 'mustermann', '10', NULL);
    ID1 ist schon da.

    Was muss ich machen, das die alten Daten einfach hinten an gehangen werden und die vorhandene ID praktisch ignoriert und dann neu vergeben wird?

    TerraBrain
    Zuletzt geändert von TerraBrain; 29.04.2013, 21:10.

  • #2
    Die ID beim INSERT weg lassen.

    Kommentar


    • #3
      Das habe ich schon versucht. Und zwar so:
      Code:
      NSERT INTO `predb` (`vorname`, `nachname`, `alter`, `extra`,) VALUES (1, 'hans', 'mustermann', '10', NULL);
      aber dann kommt der Fehler:
      #1136 - Column count doesn't match value count at row 1

      Kommentar


      • #4
        Natürlich musst du auch die ID in VALUES () weg lassen.

        Kommentar


        • #5
          Genau das ist ja das Problem.
          Es sind >500.000 Datensätze. Auf die schnelle wüsste ich nicht, wie ich da jeweils die ID raus nehmen oder duch NULL ersetzen kann.

          Bin für jeden Vorschlag dankbar.

          Kommentar


          • #6
            Ich habe noch eine Frage.

            Wenn ich das backup importiere und er stösst zb. auf einen doppelten Eintrag wie zb 'nachname'. Normalerweise bricht der import dann ab.
            Was kann ich tun, damit dieser Datensatz dann einfach übersprungen wird ?
            Oder sollte ich anstatt INSERT lieber UPDATE nehmen ?

            Kommentar


            • #7
              Zitat von TerraBrain Beitrag anzeigen
              Wenn ich das backup importiere und er stösst zb. auf einen doppelten Eintrag wie zb 'nachname'. Normalerweise bricht der import dann ab.
              Was kann ich tun, damit dieser Datensatz dann einfach übersprungen wird ?
              Oder sollte ich anstatt INSERT lieber UPDATE nehmen ?
              Entweder INSERT IGNORE oder ON DUPLICATE KEY UPDATE. Oder REPLACE.

              MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.4 INSERT
              MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.6 REPLACE

              Kommentar


              • #8
                ID raus nehmen oder duch NULL ersetzen kann.

                Bin für jeden Vorschlag dankbar.


                -------------------------------
                ****
                Zuletzt geändert von Kropff; 30.04.2013, 13:44. Grund: Spam entfernt

                Kommentar


                • #9
                  Es sind >500.000 Datensätze. Auf die schnelle wüsste ich nicht, wie ich da jeweils die ID raus nehmen oder duch NULL ersetzen kann.
                  Esrtens sind 500.000 Datensätze und mehr eher wenig, zweitens wurde Dir ja schon gesagt, dass die ID beim Import ignoriert werden kann bzw SOLL.
                  Drittens geht ein Import mittels INSERT INTO... SELECT prinzipiell schneller:
                  Code:
                  INSERT INTO `predb` (`vorname`, `nachname`, `alter`, `extra`) 
                  SELECT `vorname`, `nachname`, `alter`, `extra` FROM `backup_db`;
                  Wenn die ID vom Typ AUTOINCREMENT ist, dann wird für jeden neu importierten/eingefügten Datensatz aus der Backup-Tabelle die ID automatisch generiert und eingefügt.
                  Sofern diese ID NICHT als Verweis auf/in andere Tabellen notwendig ist, mag das so funktionieren...

                  auf einen doppelten Eintrag wie zb 'nachname'
                  Es können rein theoretisch (und eigentlich auch praktisch) mehrere Einträge mit dem gleichen Nachnamen vorhanden sein, aber mit verschiedenen Vornamen.
                  Und wenn Nachname und Vorname gleich sind (auch das soll es ja geben)?

                  Kommentar


                  • #10
                    Zitat von raiguen Beitrag anzeigen
                    Esrtens sind 500.000 Datensätze und mehr eher wenig, zweitens wurde Dir ja schon gesagt, dass die ID beim Import ignoriert werden kann bzw SOLL.
                    Drittens geht ein Import mittels INSERT INTO... SELECT prinzipiell schneller:
                    Code:
                    INSERT INTO `predb` (`vorname`, `nachname`, `alter`, `extra`) 
                    SELECT `vorname`, `nachname`, `alter`, `extra` FROM `backup_db`;
                    Wenn die ID vom Typ AUTOINCREMENT ist, dann wird für jeden neu importierten/eingefügten Datensatz aus der Backup-Tabelle die ID automatisch generiert und eingefügt.
                    Sofern diese ID NICHT als Verweis auf/in andere Tabellen notwendig ist, mag das so funktionieren...
                    Nein, die ID enhält keinen Verweis.
                    Aber ich kann diese Methode doch auch nur anwenden, wenn ich das ID-Feld vorher aus der Datenbank entferne oder ?

                    Kommentar


                    • #11
                      Zitat von TerraBrain
                      Aber ich kann diese Methode doch auch nur anwenden, wenn ich das ID-Feld vorher aus der Datenbank entferne oder ?
                      NEIN! Die ID aus der Quelltabelle (=deine Backuptabelle) muss NICHT entfernt werden! Sie wird im SELECT-Teil einfach nicht mit ausgewählt für den 'Transfer'! Jeder Datensatz der Quelltabelle bekommt automatisch nach/beim Einfügen in die ZielTabelle eine neue, aufsteigende ID zugewiesen!

                      Kommentar

                      Lädt...
                      X