Zurück   klamm-Forum > Virtual World > Programmierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17.05.2011, 17:46:13   #1 (permalink)
$_POST => dev/null
Benutzerbild von Lokutos

ID: 298414
Lose-Remote

Lokutos eine Nachricht über Skype™ schicken
Reg: 15.03.2008
Beiträge: 358
Lokutos ist einfach richtig nettLokutos ist einfach richtig nettLokutos ist einfach richtig nettLokutos ist einfach richtig nett
Standard IGNORE ohne Wirkung

MYSQL version 5.5.11


INSERT IGNORE INTO funktioniert
ALTER IGNORE TABLE funktioniert nicht

Folgender Befehl:
Code:
1:
2:
ALTER IGNORE TABLE `vms_userdaten` ADD `sutosurfsort` ENUM( 'aufendhalt', 'verdienst', 'reload', 'zeitverdienst' ) NOT NULL DEFAULT 'verdienst', ADD `sutosurfsorta` ENUM( 'asc', 'desc' ) NOT NULL DEFAULT 'desc';
Wird abgebrochen mit der meldung:
Code:
1:
2:
MySQL meldet: Dokumentation #1060 - Duplicate column name 'sutosurfsort'
Sollte aber durch das IGNORE einfach übersprungen werden.
Suche aktuell nach einer Idee wo das Problem zu Lokalisieren ist.

Besten dank
LKTechnik
Klamm Lose-Statistik Seite
Loseumlauf oder Losevernichtung oder Losemenge oder EF-Accounts
-------------------------------------------------------------------------------------
Actionlink Lösungen prüfen
Neuer Actionlink melden oder Actionlink Prüfen

Geändert von Lokutos (17.05.2011 um 17:51:20 Uhr)
Lokutos ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 17.05.2011, 17:57:44   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
IGNORE ist eine MySQL-Erweiterung zum SQL-Standard. Sie steuert, wie ALTER TABLE funktioniert, wenn Dubletten eindeutiger Schlüssel in der neuen Tabelle vorhanden sind oder (bei aktiviertem striktem Modus) Warnungen auftreten. Wenn IGNORE nicht angegeben ist, wird der Vorgang bei Auftreten von Schlüsseldubletten abgebrochen, und ein Rollback wird durchgeführt. Ist IGNORE angegeben, dann wird nur der erste von mehreren Datensätzen mit Dubletten eindeutiger Schlüssel verwendet. Die übrigen betroffenen Datensätze werden gelöscht. Falsche Werte werden auf den nächstliegenden zulässigen Wert gesetzt.
Quelle: http://dev.mysql.com/doc/refman/5.1/de/alter-table.html

Fazit: IGNORE schützt dich nicht vor Bullshit-Statements , sondern nur vor doppelten Schlüsseln, wenn du durch das ALTER neue Schlüssel zur Tabelle hinzufügst, die das Eindeutigkeitskriterium kaputt machen würden.

Prüfe vorher, ob die Spalte vorhanden is, wenn du dir nicht sicher bist (normal solltest du das aber schon wissen ).
theHacker ist gerade online   Mit Zitat antworten
Alt 17.05.2011, 20:06:19   #3 (permalink)
$_POST => dev/null
Benutzerbild von Lokutos

ID: 298414
Lose-Remote

Lokutos eine Nachricht über Skype™ schicken
Reg: 15.03.2008
Beiträge: 358
Lokutos ist einfach richtig nettLokutos ist einfach richtig nettLokutos ist einfach richtig nettLokutos ist einfach richtig nett
Standard

Gibt es ev. eine Alternative?

Es soll möglich sein die komplette sql Datei auszuführen ohne Abbruch.
Nicht immer sind die kundentabellen auf dem gleichen stand.
Es ist mir daher nicht möglich zu sagen ob eine Spalte bereits existiert, oder nicht.
Ich wollte daher fragen ob es eine Möglichkeit gibt das eine Datei zuende ausgeführt wird und es ignoriert wen die Spalte schon vorhanden ist.

Besten Dank
Klamm Lose-Statistik Seite
Loseumlauf oder Losevernichtung oder Losemenge oder EF-Accounts
-------------------------------------------------------------------------------------
Actionlink Lösungen prüfen
Neuer Actionlink melden oder Actionlink Prüfen
Lokutos ist offline Threadstarter   Mit Zitat antworten
Alt 17.05.2011, 21:04:16   #4 (permalink)
Erfahrener Benutzer

ID: 41688
Lose-Remote

Reg: 28.04.2006
Beiträge: 448
stumpi15 sorgt für eine eindrucksvolle Atmosphärestumpi15 sorgt für eine eindrucksvolle Atmosphäre
Standard

Das Beste ist, wenn man in seiner Datenbank eine Version mitführt und mit jedem Release auch eine neue SQL-Datei für den Update anlegt. Vor der Ausführung prüft man dann die Version und spielt nur die SQL-Dateien ein, die für die vorliegende Version noch nötig sind. Das macht zwar mehr Aufwand, aber man bekommt solche Probleme, wie du sie jetzt hast, nicht. Im Nachhinein wüsste ich jetzt aber leider keine Möglichkeit, das Script auszuführen. Du könntest den Befehl höchstens einzelne Schritte ausführen (also jede Spalte extra anfügen) und die Fehler per PHP (oder mit was auch immer du die Scripte ausführst) abfangen. Ist zwar auch nicht sehr elegant, aber sollte möglich sein.

stumpi
stumpi15 ist offline   Mit Zitat antworten
Alt 17.05.2011, 21:21:27   #5 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von Lokutos Beitrag anzeigen
Gibt es ev. eine Alternative?
Ordentlich programmieren?
Zitat:
Zitat von Lokutos Beitrag anzeigen
Nicht immer sind die kundentabellen auf dem gleichen stand.
Und wie willst du dann ein einheitliches Script schreiben, wenn du zig verschiedene DB-Strukturen hast? Das is ja schon mal ein logisches Problem.

Ansatz - wie schon erwähnt - wäre, zu prüfen, ob die Spalte da is und falls nicht, sie eben anzulegen. Das kannst du aber nicht mit einem SQL-Script machen, sondern brauchst irgendwas drumrum (z.B. ein Setup-Script in PHP), was die aktuelle DB-Struktur einliest und entscheidet, wie das ALTER TABLE-Statement aussehen soll.
Zitat:
Zitat von stumpi15 Beitrag anzeigen
Du könntest den Befehl höchstens einzelne Schritte ausführen (also jede Spalte extra anfügen) und die Fehler per PHP (oder mit was auch immer du die Scripte ausführst) abfangen.
Dann kannst du aber auch gleich wieder die Taktik "Ordentlich programmieren" anwenden.
theHacker ist gerade online   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Profilnachricht und Ignore birnchen Verbesserungsvorschläge 0 27.05.2008 20:26:20
Ignore-Liste Herm Verbesserungsvorschläge 16 08.01.2008 14:01:20
komplettes Ignore birnchen Verbesserungsvorschläge 23 14.10.2007 14:19:47
ICQ Ignore List Christian Multimedia & Kommunikation 20 07.06.2007 20:55:26


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40:49 Uhr.