alter table an Bedingung knüpfen

Hallo,

ich möchte einen alter table Befehl an eine Bedingung knüpfen, habe aber
leider keine Idee wie das funktionieren kann. Das ganze sollte unter 4.0.x
laufen, wie auch unter 5.0.x

Ich hatte mir folgendes vorgestellt:

IF Index auf Tabelle existiert nicht THEN
lege Index an
ELSE
tue nichts
ENDIF

Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
Suchwörter für google sind?

Viele Grüße

Thomas

--
Thomas Baum [ So, 22 April 2007 14:45 ] [ ID #1694751 ]

Re: alter table an Bedingung knüpfen

Thomas Baum schrieb:
>
> ich möchte einen alter table Befehl an eine Bedingung knüpfen, habe aber
> leider keine Idee wie das funktionieren kann. Das ganze sollte unter 4.0.x
> laufen, wie auch unter 5.0.x

Schade, daß das auf so steinalten Versionen noch lauffähig sein soll.
Sonst gäbe es die Möglichkeit, eine Stored Procedure [1] zu bauen, die
das Vorhandensein prüft und im negativen Fall den Index anlegt.

> Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
> Suchwörter für google sind?

Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
auszuführen. Existiert bereits ein Index mit dem gleichen Namen, gibt es
eine Fehlermeldung, ansonsten funktioniert es einfach.

Alternativ kannst du natürlich über ein Stück externen Code erst prüfen,
ob das Teil existiert und wenn nicht, das Statement absetzen.

Ebenfalls gerne genutzt: Eine Versionskontrolle innerhalb der DB und
dann alle ausführen, was zwischen der aktuell in der DB vorhandenen
Version und der neuesten verfügbaren liegt. Dann darf halt niemand etwas
manuell ändern...

[1] http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.htm l

Grüße,
Dominik
Dominik Echterbruch [ So, 22 April 2007 15:34 ] [ ID #1694754 ]

Re: alter table an Bedingung knüpfen

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Andreas Kretschmer [ Mo, 23 April 2007 07:41 ] [ ID #1695254 ]

Re: alter table an Bedingung knüpfen

Andreas Kretschmer wrote:
> begin Dominik Echterbruch schrieb:
>>> Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
>>> Suchwörter für google sind?
>> Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
>> auszuführen. Existiert bereits ein Index mit dem gleichen Namen, gibt es
>> eine Fehlermeldung, ansonsten funktioniert es einfach.
>
> Gibt es denn keine Katalog-Tabellen zum nachguggen?

In 5.0 ja. Der OP fragte aber leider nach Kompatibilität bis 4.0.

Grüße
Kai

--
This signature is left as an exercise for the reader.
Kai Ruhnau [ Mo, 23 April 2007 08:06 ] [ ID #1695255 ]

Re: alter table an Bedingung knüpfen

Kai Ruhnau schrieb:
> Andreas Kretschmer wrote:
>> begin Dominik Echterbruch schrieb:
>>>> Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
>>>> Suchwörter für google sind?
>>> Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
>>> auszuführen. Existiert bereits ein Index mit dem gleichen Namen, gibt
>>> es eine Fehlermeldung, ansonsten funktioniert es einfach.
>>
>> Gibt es denn keine Katalog-Tabellen zum nachguggen?
>
> In 5.0 ja. Der OP fragte aber leider nach Kompatibilität bis 4.0.

Es gibt doch die SHOW-Befehle; soweit ich das überblicke, kann man damit
so ziemlich alle Metadaten auslesen, und zwar schon aufgeschlüsselt
(z.B. eine Zeile pro Feld des Index, je eine Spalte für Feldname,
Indextyp usw.)

Man kriegt es wahrscheinlich nicht mit einer einzigen Query hin, aber
mit SHOW INDEX FROM <tabelle> kann man auf jeden Fall nachschauen,
welche Indexe es bereits gibt, und ggf. fehlende Indexe mit einem
separaten ALTER TABLE nachrüsten.
Joachim Durchholz [ Mo, 23 April 2007 16:20 ] [ ID #1695263 ]

Re: alter table an Bedingung knüpfen

Joachim Durchholz schrieb:
>>>> Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
>>>> auszuführen. Existiert bereits ein Index mit dem gleichen Namen,
>>>> gibt es eine Fehlermeldung, ansonsten funktioniert es einfach.
>
> Es gibt doch die SHOW-Befehle; soweit ich das überblicke, kann man damit
> so ziemlich alle Metadaten auslesen, und zwar schon aufgeschlüsselt
> (z.B. eine Zeile pro Feld des Index, je eine Spalte für Feldname,
> Indextyp usw.)

Sicher gibt es die. Und ich hatte ja auch einen Absatz dazu geschrieben.
Meine Aussage wurde nur leider völlig aus dem Zusammenhang gerissen ;)

> Man kriegt es wahrscheinlich nicht mit einer einzigen Query hin, aber
> mit SHOW INDEX FROM <tabelle> kann man auf jeden Fall nachschauen,
> welche Indexe es bereits gibt, und ggf. fehlende Indexe mit einem
> separaten ALTER TABLE nachrüsten.

Genau so hatte ich mir das vorgestellt. Aber wir wissen ja nicht, ob es
noch eine Anwendung außenrum gibt, die das Ergebnis auswerten würde.
Deshalb habe ich auch die o.g. Option angeführt.

Grüße,
Dominik
Dominik Echterbruch [ Mo, 23 April 2007 19:35 ] [ ID #1695266 ]
Datenbanken » de.comp.datenbanken.mysql » alter table an Bedingung knüpfen

Vorheriges Thema: Java Frage
Nächstes Thema: Kompatibilitätzwischen unterschiedlichen MySQL-Versionen auf Client und Server