Ich probiere es mal aus, melde mich dann.
Tabellen Informationen
Einklappen
X
-
*winks*
Gilbert
------------------------------------------------
Hilfe für eine Vielzahl von Problemen!!!
http://www.1st-rootserver.de/
-
gut klappt.
Aber wie mache ich es jetzt möglich ein Update zufahren.
Irgendwie steh ich heute neben mir oder auch
*brettvorkopf*
Ich bekomme es einfach nicht hin.
Beim Update soll geprüft werden welche Tabellen schon da sind und welche noch nicht. Die noch nicht da sind sollen erstellt werden und die Spalten die sich geändert haben von Typ sollen geändert werden.
Kannst du mir dabei helfen, aufbauend auf die Install-Scripte?*winks*
Gilbert
------------------------------------------------
Hilfe für eine Vielzahl von Problemen!!!
http://www.1st-rootserver.de/
Kommentar
-
Der erste Wunsch von Dir ist denke ich ansich erledigt, da in einer Datenbank nicht zwei Tabellen mit dem gleichen Namen vorkommen dürfen und du beim Create table einen Fehler bekommst, wenn eine Tabelle mit demselben Namen bereits vorhanden ist.
Punkt zwei, sofern keine Spalte hinzukommt könnte es auf die Einfache wie folgt funktionieren, ohne viel Abfragen zu müssen.
Select * from tabelle;
drop tabelle;
create tabelle; // mit den neuen Definitionen
und dann alle Records, die Du ganz zu Beginn ausgelesen hast wieder einzeln inserten.
insert into tabelle values (....
Das sollte ja eigentlich nicht so oft vorkommen oder? Es kommt aber sicher darauf an, wieviele Records sich in den Tabellen befinden der Performance wegen.
Wie oft erfolgen tatsächlich Typkonvertierungen?
Zweite Methode:
Ich könnte mir vorstellen, daß Du für die Typkonvertierung eine Konvertierungstabelle zu Beginn erstellst, die alle Informationen beinhaltet, wie Tabellenname, Feldname, Feldtyp.
Dann das Skript, das Du ja schon im Ansatz hast, durchlaufen läßt und jedesmal wenn Du bei einem Feld mit seinem Typ vorbeischleifst direkt auf die Typkonvertierungstabelle zugreifst. Ist der Typ gleich, gehts weiter, ansonsten muß der Typ geändert werden.
Nach dem Durchlauf kann die Typkonvertierungstabelle wieder gedropped werden.
Ohne Typkonvertierungstabelle ginge es natürlich auch, über einen mehrdimensionalen Array, den Du ebenfalls zuvor aufbauen mußt, und auf seine Inhalte über convertarray[$table] [$name] zugreifst, abgehandelt werden.Zuletzt geändert von hand; 10.04.2002, 18:06.
Kommentar
-
Original geschrieben von hand
Punkt zwei, sofern keine Spalte hinzukommt könnte es auf die Einfache wie folgt funktionieren, ohne viel Abfragen zu müssen.
Select * from tabelle;
drop tabelle;
create tabelle; // mit den neuen Definitionen
und dann alle Records, die Du ganz zu Beginn ausgelesen hast wieder einzeln inserten.
insert into tabelle values (....
Das sollte ja eigentlich nicht so oft vorkommen oder? Es kommt aber sicher darauf an, wieviele Records sich in den Tabellen befinden der Performance wegen.
Wie oft erfolgen tatsächlich Typkonvertierungen?
Zweite Methode:
Ich könnte mir vorstellen, daß Du für die Typkonvertierung eine Konvertierungstabelle zu Beginn erstellst, die alle Informationen beinhaltet, wie Tabellenname, Feldname, Feldtyp.
Dann das Skript, das Du ja schon im Ansatz hast, durchlaufen läßt und jedesmal wenn Du bei einem Feld mit seinem Typ vorbeischleifst direkt auf die Typkonvertierungstabelle zugreifst. Ist der Typ gleich, gehts weiter, ansonsten muß der Typ geändert werden.
Nach dem Durchlauf kann die Typkonvertierungstabelle wieder gedropped werden.
Ohne Typkonvertierungstabelle ginge es natürlich auch, über einen mehrdimensionalen Array, den Du ebenfalls zuvor aufbauen mußt, und auf seine Inhalte über convertarray[$table] [$name] zugreifst, abgehandelt werden.*winks*
Gilbert
------------------------------------------------
Hilfe für eine Vielzahl von Problemen!!!
http://www.1st-rootserver.de/
Kommentar
-
Mit drop table vernichtest Du eine Tabelle die Daten beinhaltet in wenigen Millisekunden, dafür ist drop table ja da.
Probiers mal.
Gesetzten Falles drop table würde das nicht können, was es aber tut, könnte man das noch immer über
delete from tabelle;
drop tabelle;
create tabelle;
berwekstelligen, was aber nicht notwendig ist.
Ebenso kann über drop database eine Datenbank in wenigen Milliskeunden vernichtet werden, auch wenn Tabellen darin enthalten sind und in den jeweiligen Tabellen Daten.
Kommentar
-
Kannst du das mal als Code zusammenfassen?*winks*
Gilbert
------------------------------------------------
Hilfe für eine Vielzahl von Problemen!!!
http://www.1st-rootserver.de/
Kommentar
-
Eine Lösung der Variante zwei:
PHP-Code:<?
// Alle oder nur jene Felder müssen definiert werden, deren
// Typ geändert werden soll.
// $array[tabellenname][Feldname] = "typ-format";
$konvert[table1][name] = "char(50)";
$konvert[table1][************] = "char(5)";
$datenbank = "test";
$res = mysql_query("SHOW TABLES FROM $datenbank") or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
echo "<hr>";
echo "Tabelle: $row[0]<br>";
$r = mysql_query("SHOW COLUMNS FROM $datenbank.$row[0]") or die(mysql_error());
while ($ro = mysql_fetch_array($r)) {
$typneu = $konvert[$row[0]][$ro[Field]];
echo " $ro[Field] $ro[Type]";
if ($typneu <> "" && $typneu != $ro[Type]) {
print " <- <b>
Achtung !! Typkonvertierung des Feldes
$row[0].$ro[Field] von $ro[Type] auf $typneu</b>";
// Hier den ALTER einbauen zur Typkonvertierung
// den neuen Typ beinhalten die Variable $typneu
// mysql_query("ALTER TABLE $datenbank.$row[0] MODIFY $ro[Field] $typneu") or die(mysql_error());
}
echo "<br>";
}
}
echo "<hr>";
?>Zuletzt geändert von hand; 10.04.2002, 19:35.
Kommentar
-
Original geschrieben von Wotan
Ich will ein Installscript schreiben, bei dem ich erst prüfen müß ob die Tabellen/Spalten schon da sind oder nicht.
create table if not exists TABELLENNAME ( ... )
mit den Feldern geht´s ähnlich:
alter TABELLENNAME ....
wenn´s einen Fehler gibt, war das Feld schon da
Kommentar
Kommentar