Datenbank Backup scheitert an ID

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by TerraBrain; 29-04-2013, 20:10.

  • #2
    Die ID beim INSERT weg lassen.

    Comment


    • #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

      Comment


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

        Comment


        • #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.

          Comment


          • #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 ?

            Comment


            • #7
              Originally posted by TerraBrain View Post
              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

              Comment


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

                Bin für jeden Vorschlag dankbar.


                -------------------------------
                ****
                Last edited by Kropff; 30-04-2013, 12:44. Reason: Spam entfernt

                Comment


                • #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)?

                  Comment


                  • #10
                    Originally posted by raiguen View Post
                    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 ?

                    Comment


                    • #11
                      Originally posted by 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!

                      Comment

                      Working...
                      X