[PHP/MySQL]Datenbankstruktur überprüfen

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hallo,

also ich habe ein Problem, bzw. eine Frage. Und zwar möchte ich eine Datenbank überprüfen können. Ich habe zum Beispiel Tabelle1 mit den und den Spalten. Dann Tabelle 2 mit den und den Spalten....etc.
Jetzt suche ich irgendwie ne Möglichkeit diese zu überprüfen. Also ich speichere in einer Datei in irgendeiner Form (welche?) wie die Tabellen alle ausschauen müssten. Dann möchte ich die Struktur in der Datei mit der in der Datenbank abgleichen und wenn in der Datei was anders ist als in der DB, soll er die DB eben an die Version der Datei anpassen. Also kann ja drei Fälle geben:
1. Es ist alles gleich -> es wird eben nichts geändert
2. irgendwie ist ein Struktur in der Datenbank falsch -> wird an die Datei angepasst
3. In der DAtei ist was neu -> wird in die Datenbank auch mit eingebaut

Aber jetzt die Frage: Wie schaffe ich es so ein System zu erstellen? Also sowohl in welcher Form sollte ich das abspeichern in der Datei und wie muss dann die Funkion zum Abgleich ausschauen?

Danke für eure Hilfe :roll:

EDIT: Ich entschuldige mich schonmal, dass es wie ein Crossposting ausschaut, allerdings bin ich auf der Suche nach ner Möglichkeit für diese Einzelschritte:

1. Tabelle vergleichen:
- überprüfen ob eine Tabelle vorhanden ist, wenn nicht, dann erstellen.

2. Spalten vergleichen:
- überprüfen ob die Spalte vorhanden ist
--wenn ja, dann überprüfen, ob die Eigenschaften der Spalte übereinstimmen mit welchen, die ich vorgebe. Also ich meine vor allem den Typ, Länge, etc.
--wenn nein, dann erstellen
 
Zuletzt bearbeitet:
Das Grundlegende dafür sollte die DESCRIBE TABLE-Syntax sein, mit der Du die aktuelle Struktur der Tabelle ermitteln kannst:

:arrow: https://dev.mysql.com/doc/refman/5.1/en/describe.html

Wie Du die Daten nun speicherst und vergleichst, ist Dir überlassen. Es gibt dafür keine allgemeingültige Lösung.

Hmh...also hab jetzt mal versucht mir das alles bisschen näher zu bringen, aber irgendwie wird das nichts. Kennst du irgendwie ein Beispiel wo so ne Datenbanküberprüfung mal gemacht wurde, bzw. angrissen wurde?
 
[PHP/MySQL]Datenbanken und Spalten vergleichen.

Hallo,

ich bin auf der Suche nach ein paar Möglichkeiten für folgende Sachen. Wichtig wäre, dass es versucht wird so serversparend wie möglich zu machen, allerdings hab ich eben damit noch nie gearbeitet und hoffe ihr könnt mir helfen:

1. Tabelle vergleichen:
- überprüfen ob eine Tabelle vorhanden ist, wenn nicht, dann erstellen.

2. Spalten vergleichen:
- überprüfen ob die Spalte vorhanden ist
--wenn ja, dann überprüfen, ob die Eigenschaften der Spalte übereinstimmen mit welchen, die ich vorgebe. Also ich meine vor allem den Typ, Länge, etc.
--wenn nein, dann erstellen

Habt ihr eben eine Idee, wie das am besten gemacht werden kann, also wie ich das am besten und einfachste hinbekomme?

Danke für eure Hilfe :roll:;)
 
Ich erinnere mich düster, dass es im klamm-Forum vor Jahrhunderten mal eine Regel gab, die Cross-Posting verboten hat....

*merged*
 
Hmm, hast du das hier schon vergessen ?

Quasi die gleiche Fragestellung und die Antwort ist wieder die gleiche :roll:

Nein, natürlich nicht, allerdings ein komplettes System wie ich vorher drüber nachgedacht hatte, geht so einfach nicht. Daher suche ich jetzt im Prinzip ne Möglichkeit nach Einzelschritten.

Ich erinnere mich düster, dass es im klamm-Forum vor Jahrhunderten mal eine Regel gab, die Cross-Posting verboten hat....

*merged*

In meinen Augen ist es kein Cross-Posting, da ich in diesem Thread ja nach kleinen Einzelschritten suche und eben nicht ein komplettes System, wie ich es vorher in Betracht gezogen hatte.:roll:
 
In meinen Augen ist es kein Cross-Posting, da ich in diesem Thread ja nach kleinen Einzelschritten suche und eben nicht ein komplettes System, wie ich es vorher in Betracht gezogen hatte.:roll:
"komplette[] System[e]" gibts hier eh nicht, sondern lediglich Anregungen, wie man ein Problem löst. Und das Problem ist nun mal dasselbe, auch wenn deine Ansprüche, wieviel andere Leute für dich schreiben sollen, zurückgegangen is.

Die Lösung des Problems steht seit knapp 4 Wochen immer noch in Post #2.

Auch wenn dieser Thread in deinen Augen was ganz was anderes is, als der letzte Thread, so löst besagter Post #2 auch dieses - dir neue - Problem :)
 
1. Tabelle vergleichen:
- überprüfen ob eine Tabelle vorhanden ist, wenn nicht, dann erstellen.


einfach mal den CREATE TABLE absetzen und schauen, was MySQL Dir zurückliefert.
Ist das Ergebnis "OK" dann gabs die Tabelle nicht und sie wurde angelegt ( Fragestellung gelöst )
Ist das Ergebnis "nööö-gibts schon", dann gabs die Tabelle schon ( Fragestellung auch gelöst )

2. Spalten vergleichen:
- überprüfen ob die Spalte vorhanden ist
--wenn ja, dann überprüfen, ob die Eigenschaften der Spalte übereinstimmen mit welchen, die ich vorgebe. Also ich meine vor allem den Typ, Länge, etc.
--wenn nein, dann erstellen

Bitte Problemstellung genauer spezifizieren. Wenn es die Spalte schon gibt, aber mit anderen Attributen, was soll dann genau passieren ? Was, wenn es die Spalte noch nicht gibt ?
 
Bitte Problemstellung genauer spezifizieren. Wenn es die Spalte schon gibt, aber mit anderen Attributen, was soll dann genau passieren ? Was, wenn es die Spalte noch nicht gibt ?

Hallo,

ok das mit CREATE TABLE dankeschön. Jetzt zu deiner Frage:

Wenn es die Spalte gibt, allerdings mit den falschen Attributen, also zum Beispiel ist der Typ "text" und der gewünschte soll "longtext" sein, dann soll er das auf die gewünschten Attribute updaten.
Wenn es die Spalte noch nicht gibt, dann soll er die einfach erstellen.

Danke
 
Letzteres geht alles mit ALTER TABLE.

Für CREATE TABLE gibts auch den IF NOT EXISTS-Zusatz, womit man sich eine Fehlermeldung sparen kann.
 
Wenn es die Spalte gibt, allerdings mit den falschen Attributen, also zum Beispiel ist der Typ "text" und der gewünschte soll "longtext" sein, dann soll er das auf die gewünschten Attribute updaten.
Wenn es die Spalte noch nicht gibt, dann soll er die einfach erstellen.

Danke

Eine eine Spalte erstellen geht nicht. Du meinst wohl, die bestehende Tabelle soll um die neue Spalte erweitert werden. Neue Spalten ans Ende anfügen geht mit ALTER TABLE ( wie theHacker schon bemerkte ).
Auch das Vergrössern von Spalten zB. text -> longtext sollte mit ALTER funktionieren. Wenn der bisherige Spaltentyp text ist und der neue soll numeric ( integer, decimal ... ) sein, kann sowas auch passieren ?
 
Eine eine Spalte erstellen geht nicht. Du meinst wohl, die bestehende Tabelle soll um die neue Spalte erweitert werden. Neue Spalten ans Ende anfügen geht mit ALTER TABLE ( wie theHacker schon bemerkte ).
Auch das Vergrössern von Spalten zB. text -> longtext sollte mit ALTER funktionieren. Wenn der bisherige Spaltentyp text ist und der neue soll numeric ( integer, decimal ... ) sein, kann sowas auch passieren ?

Jaja eine Spalte erstellen mein ich ja alter table, das ist auch nicht das Problem, denn das hab ich ja verstanden. Allerdings gehts mir vor allem um die zwei Fälle.
1. Muss ich ja erstmal überprüfen, ob die Spalte vorhanden ist.
2. Von den Attributen würde ich gern mir alle Wege offen halten wie die geändert werden. Wie würdest du das denn machen? Denn ich gebe also die Attribute vor die sein sollen und wenn die in der Spalte nicht so sind, dann soll er auf diese Attribute ändern.

EDIT: Was ich auch nicht verstehe, wie du von text auf longtext mit Alter arbeiten willst. Denn dann erstell ich doch im Prinzip ne komplett neue Spalte wieder am Ende und ich will die vorhandene ja einfach updaten.
 
Mit ALTER TABLE solltest Du auch in der Lage sein, die Definition einer bestehenden Spalte zu ändern. Tleilax hat Dir ja nachfolgend einen entsprechenden Link gepostet.

Wenn Du allerdings von text nach numerisch ändern willst, musst Du ja erst einmal prüfen, ob in der betreffenden Spalte auch nur numerische Werte drinstehen, sonst kannst Du den Datentyp ja nicht ändern. Oder willst Du bei so einer Änderung alle Datensätze löschen und die Tabelle neu ( leer ) aufbauen ?

Um bestehend <-> neu zu vergleichen, kannst Du Dir mit DESCRIBE TABLE die Informationen ins Programm holen und dort vergleichen. Sofern Dein Datenbanksystem es erlaubt, kannst Du auch direkt den Systemkatalog abfragen. Dritte Möglichkeit ist, die neue Tabelle unter anderem Namen (temporär) anzulegen und zu vergleichen, ob die beiden Definitionen identisch sind.
 
Zuletzt bearbeitet:
Ah ok....gut, also fass ich nochmal zusammen:

1. Create table if not exist - damit erstell ich im Prinzip die Tabelle, wenn sie nicht schon vorhanden ist.
2. Überprüfen, ob Spalte vorhanden ist(wie am besten?)
- wenn ja, dann mit alter table die eigenschaften ändern, allerdings drauf achten, dass eben bei Attribute mit den vorhandenen Werten in den Datensätzen zusammenpassen(sollte aber funktionieren, also denke nicht, dass es damit bei den Daten Problemen geben sollte)
- wenn nein, mit alter table ans Ende der Tabelle diese Spalte anfügen

Passt das so vom System? Und das überprüfen der Spalte über was mache ich das am besten?
 
Und das überprüfen der Spalte über was mache ich das am besten?

Das hängt davon ab.
Willst Du gezielt eine Spalte überprüfen oder willst Du den kompletten Aufbau der "neuen" Tabelle gegen die "bestehende" checken.
Hast Du die Möglichkeit, den Systemkatalog direkt abzufragen ?
Kannst Du besser SQL oder besser PHP ?

Ich habe Dir oben schon drei mögliche Alternativen genannt. Such Dir die aus, die Dir am besten passt. Notfalls probier alle drei nacheinander aus.
 
WordPress hat eine schöne Funktion, die genau das macht, was du willst. dbDelta(). Musst du eben deinen Ansprüchen entsprechend anpassen.

Greetz

paddya