SQL Syntaxfehler beim Einspielen eines MySQL dumps

ElDiablo

Lt. Commander
Registriert
Juli 2009
Beiträge
1.315
Hallo zusammen,

ich versuche grad eine größere Datenbank auf meinem neuen (managed) Server einzuspielen. Da sie bei weitem zu groß für PHPMyAdmin ist und ich sie bei meinem DSL2000 hier nicht mal eben in einem normalen Editor (außer VIM) ansehen kann, würd ich sie gern per Shell updaten.

Da Create Database dort nicht geht, habe ich die Datei schon entsprechend angepasst und die Datenbank manuell angelegt.

Die ersten Tabellen werden wunderbar angelegt.

Nun erhalte ich beim Erzeugen einer Tabelle einen Syntax-Error:

Eingabe rund um die betreffende Zeile:
Code:
CREATE TABLE `oxconfigdisplay` (
  `OXID` char(32) character set latin1 collate latin1_general_ci NOT NULL,
  `OXCFGMODULE` varchar(32) NOT NULL default '',
  `OXCFGVARNAME` char(32) NOT NULL default '',
  `OXGROUPING` varchar(255) NOT NULL default ''
  `OXPOS` int(11) NOT NULL default '0',
  PRIMARY KEY  (`OXID`),
  KEY `list` (`OXCFGMODULE`,`OXCFGVARNAME`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Fehler:
Code:
ERROR 1064 (42000) at line 30362: 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 

'`OXPOS` int(11) NOT NULL default '0',
  PRIMARY KEY  (`OXID`),
  KEY `list` (`OX' at line 6

Jemand eine Idee?

Gruß
El
 
da fehlt ein komma (am ende)

Code:
`OXGROUPING` varchar(255) NOT NULL default ''
 
dariopiz schrieb:
xpos int(11) not null aber default ist 0 ?

siehe bu1137 :D

das NULL und 0 verschiedene sachen sind, ist dir aber schon klar oder....?

NULL heißt soviel wie "nicht gesetzt", also es steht absolut NICHTS drinne, nichtmal 0 oder "" sondern nichts.

0 ist eine Zahl, also ein wert der gespeichert wird.

das gibt es eigentlich in jeder sprache, in ruby ists z.b. nil, in php und java ebenfalls null usw....
 
Zuletzt bearbeitet:
Hallo,

nur eine, vielleicht dumme, Frage. Wie groß ist den Groß?

Ich meine, SQL DBs sind ja Textdateien mit viel nichts drin. Und per gzip in MyPHPAdmin gepackt bleiben auch von zB 1 GB nicht viel über.

Grüße,

Blubbs
 
Das Komma hatte ich auch mal ergänzt - verwunderlich ist, dass die darauf folgende Befüllung nur 6 Felder "breit" ist. Er spuckt mir da direkt den nächsten Fehler aus.

Geht das in MySQL, dass man Insert auf auf 6 Felder macht, obwohl 7 vorhanden sind?

Die Datenbank hat als tar.gz über 100 MB ... das ist bei DSL2000 schon hart zu splitten, um sie per PHPMyAdmin einzulesen .. aber muss ja auch garnicht, da es per Shell auch geht.
 
INSERT auf 6 von 7 geht natürlich, sofern man die Felder angibt. Für die undefinierten nimmts dann den DEFAULT wert.
 
Also, dort wie dein Hochkommata steht gehört danach nen Komma hin, wie das oben schonmal angemerkt wurde.

Wie sehen denn deine Inserts in diese Table aus?
Da gibt es nämlich 2 Möglichkeiten (nur mal grob):
Insert into Table values (wert1, wert2, wert3)
oder:
Insert into Table (Spalte2, Spalte3) values (wert2, wert3)
Hierbei muss es natürlich einen Default-Wert für Spalte1 geben, der dann im zweiten Fall genutzt wird.

Poste mal nen Teil vom Insert für die Tabelle, wahrscheinlich ist da auch ein ähnlicher Fehler drin.

edit: Das oben sind aber nur 5 Spalten?!
 
Hat mit dem Problem jetzt nix zutun, das liegt an dem fehlenden " , " wie schon gesagt, aber ...

`OXGROUPING` varchar(255)

Wäre hier nicht TEXT die bessere Wahl?
 
Danke schonmal für die vielen Tipps.

Update:
okay, hab mal den ganzen Insert-Block mal auskommentiert.
Alle alten User/Tabellenaufrufe gelöscht (auf dem Managed kann ich den Datenbanknamen/Usernamen ja leider nicht frei wählen).

Gibt es ein "Igore all Errors" oder ähnliches für den Import? ;)

Ich kämpfe mich zwar grad langsam durch die Bugs, aber es ist schon sehr zäh


Code:
CREATE ALGORITHM=UNDEFINED DEFINER=`DBUSER`@`localhost` 
SQL SECURITY DEFINER VIEW `DATENBANKNAME`.`oxv_oxactions` AS 
select `DATENBANKNAME`.`oxactions`.`OXID` AS `OXID`,`DATENBANKNAME`.`oxactions`.`OXSHOPID` AS 
`OXSHOPID`,`DATENBANKNAME`.`oxactions`.`OXTYPE` AS 
`OXTYPE`,`DATENBANKNAME`.`oxactions`.`OXTITLE` AS 
`OXTITLE`,`DATENBANKNAME`.`oxactions`.`OXTITLE_1` AS 
`OXTITLE_1`,`DATENBANKNAME`.`oxactions`.`OXTITLE_2` AS 
`OXTITLE_2`,`DATENBANKNAME`.`oxactions`.`OXTITLE_3` AS 
`OXTITLE_3`,`DATENBANKNAME`.`oxactions`.`OXLONGDESC` AS 
`OXLONGDESC`,`DATENBANKNAME`.`oxactions`.`OXLONGDESC_1` AS 
`OXLONGDESC_1`,`DATENBANKNAME`.`oxactions`.`OXLONGDESC_2` AS 
`OXLONGDESC_2`,`DATENBANKNAME`.`oxactions`.`OXLONGDESC_3` AS 
`OXLONGDESC_3`,`DATENBANKNAME`.`oxactions`.`OXACTIVE` AS 
`OXACTIVE`,`DATENBANKNAME`.`oxactions`.`OXACTIVEFROM` AS 
`OXACTIVEFROM`,`DATENBANKNAME`.`oxactions`.`OXACTIVETO` AS 
`OXACTIVETO`,`DATENBANKNAME`.`oxactions`.`OXPIC` AS 
`OXPIC`,`DATENBANKNAME`.`oxactions`.`OXPIC_1` AS 
`OXPIC_1`,`DATENBANKNAME`.`oxactions`.`OXPIC_2` AS 
`OXPIC_2`,`DATENBANKNAME`.`oxactions`.`OXPIC_3` AS 
`OXPIC_3`,`DATENBANKNAME`.`oxactions`.`OXLINK` AS 
`OXLINK`,`DATENBANKNAME`.`oxactions`.`OXLINK_1` AS 
`OXLINK_1`,`DATENBANKNAME`.`oxactions`.`OXLINK_2` AS 
`OXLINK_2`,`DATENBANKNAME`.`oxactions`.`OXLINK_3` AS 
`OXLINK_3`,`DATENBANKNAME`.`oxactions`.`OXSORT` AS `OXSORT` from 
`DATENBANKNAME`.`oxactions`;

Code:
INSERT INTO `oxv_oxactions` VALUES ('oxstart', 'oxbaseshop', 0, 'Startseite unten', 'Start page 
bottom', '', '', '', '', '', '', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '', '', '', '', '', '', 0);


Code:
ERROR 1062 (23000) at line 66635: Duplicate entry 'oxstart' for key 1

Was hab ich hier unter nem doppelten Eintrag zu verstehen? ;)
 
Zuletzt bearbeitet:
die tabelle ist 5 spalten groß
und dein datensatz ist 6 spalten groß und dort liegt das problem.

du kannst in eine tabelle weniger spalten als sie hat hinzufügen, aber nicht mehr.
 
Du meinst das erste Problem?: Ja, so hab ichs mir gedacht - dachte es wird evtl. abgeschnitten, aber wie kommt der MySQL Dump drauf?

Es wurde aus einer funktionierenden Datenbank exportiert.

Die ersten INSERTS habe ich erstmal übersprungen. Werde mir den Inhalt mal nachher genau ansehen und die Tabelle nochmal neu exportieren.
 
Hi,

du hast ein "duplicate entry"-Problem, wenn du einem eindeutigen Wert (z.B. Primärschlüssel, Unique...) zweimal den gleichen Wert zuweisen willst. Daher kommt diese Fehlermeldung.

VG,
Mad
 
Eigentlich sollte ich das nicht tun.
Habe mal die betreffenden Inserts testweise auskommentiert und die Tabelle bleibt leer.

Trotz Abbruch und Fehlermeldung befüllt er mir die Tabelle noch komplett.
Habe in der Hilfe aber grad keinen Parameter gefunden, um den Fehler vielleicht einfach mal zu ignorieren. (Geht das, oder ist es nicht sehr ratsam?)
 
Hi,

Fehler ignorieren ist nie ratsam, das sagt dir doch der gesunde Menschenverstand :)

VG,
Mad
 
Das natürlich, aber wenn das Script läuft wie es vorher lief, dann bin ich schonmal ganz zufrieden :)

Mich wundert allerdings etwas, wie er aus bestehenden Tabellen so einen Dump ziehen kann.
Hatte bisher noch nie Probleme damit - eigentlich kann es auch nicht an verschiedenen MySQL Versionen liegen, oder?

Werds mal zur Sicherheit nochmal exportieren und kopieren.
 

Ähnliche Themen

Zurück
Oben