# [mySQL] Spaltennamen ohne Angabe des Typs ändern?



## Frezl (22. April 2010)

Hey allerseits,

ich würde in meinem PHP-Skript gerne die Möglichkeit implementieren, die Spaltennamen einer Tabelle zu ändern. Allerdings verlangt die mySQL-Funktion 
	
	
	



```
ALTER TABLE tabellennamen CHANGE alter_name neuer_name TYP
```
den neuen Typ der Spalte. Da ich diesen nicht ändern möchte (und mir außerdem die Mühe ersparen möchte, diesen auszulesen), suche ich eine Möglichkeit, die Spaltennamen ohne Angabe des Typs zu ändern.

Gibt es dafür eine Möglichkeit?

Gruß und Dank,
Frezl


----------



## Yaslaw (23. April 2010)

Spaltennamen sollte man nicht einfach so ändern. Das bedeutet, dass man alle Queries im Scriptm alle Views etc. mit anpassen muss.

Wenn es nur darum geht, dass die Spalte nach aussen anders heisst, kannst du eine View hinterlegen die die Spalten unbenannt


----------



## Frezl (25. April 2010)

> Spaltennamen sollte man nicht einfach so ändern.



Wohl wahr. In meinem Falls hat es aber durchaus Sinn. Ich habe ein Plugin für Redaxo erstellt, mit dem man Tabellen aus einer CSV-Datei in die Datenbank laden kann. Dabei wird für jede CSV-Tabelle eine eigene mySQL-Tabelle erstellt. Als Spaltennamen werden die Spaltennamen (= 1. Zeile) der CSV-Datei verwendet. Im nächsten Schritt soll der Benutzer die Möglichkeit haben, eigene Module zu schreiben, in denen er diese Daten aus der Datenbank ausliest und ausgibt.

Die Spaltennamen sind in der CSV-Tabelle aber oft sehr lang und enthalten überflüssige Informationen. Außerdem werden Sonderzeichen beim Import durch Underlines ersetzt. Mit den Namen, die dabei rauskommen, ist natürlich umständlich zu arbeiten. Deshalb biete ich die Möglichkeit, diese zu ändern.

Ob dabei wirklich die Spaltennamen geändert werden, oder nur ein Alias erzeugt wird, ist eigentlich egal. Hauptsache, der Benutzer kann über den selbst gewählten Namen auf die Spalten zugreifen.

Wären Views also die Lösung meines Problems?

Gruß und Dank,
Frezl


----------



## Yaslaw (26. April 2010)

Sicher sind Views eine mögliche Lösung


```
CREATE OR REPLACE VIEW vw_table AS
SELECT 
	feld_1_mit_unnuetzem_zusatz AS feld1
	feld_2_koioi AS feld2
FROM
	myTable;
```


----------



## Nalamar (26. April 2010)

Frage doch den Typ der Spalte ab, und füge ihn einfach beim Script "hardcoded" an, also so das der User den Typ gar nicht verändern kann, aber er eben dennoch mit angegeben wird .....

Bei SQlite 3 mit deren ich grad mein Programm in C++ entwickle ginge das über 
	
	
	



```
GetDeclaredColumnType
```

EDIT: Sorry, hab den beisatz mit der ersparten mühe erst beim 2. durchlesen wahr genommen .....


----------



## Frezl (27. April 2010)

Vielen Dank für eure Antworten!

Ich hab mich jetzt mal in das Thema "Views" eingelesen. Soweit ich das richtig verstanden habe, sind Views Aliases für ganze mySQL-Abfragen. Ich brauche jedoch nur Aliases für die Tabellen-Spalten. Gibts auch dafür ne Funktion in mySQL? Prinzipiell fände ich das auf jeden Fall ne bessere Lösung, als die Spaltennamen direkt zu ändern!

Gruß und Dank,
Frezl


----------



## Xervos (3. Mai 2010)

Hallo,

ich verstehe deine Frage nicht ganz 


```
SQL> CREATE TABLE TABTestTabelle
  2  (
  3  nlfdId                                        number(9)                                                 NOT NULL,
  4  szName                                        varchar2(50)                                              NOT NULL,
  5  CONSTRAINT TABTestTabelle_PK PRIMARY KEY (nlfdId) USING INDEX TABLESPACE USER_INDEXES)
  6  STORAGE(INITIAL 12k NEXT 160k MINEXTENTS 1 MAXEXTENTS unlimited PCTINCREASE 0);

Tabelle wurde angelegt.

SQL> CREATE OR REPLACE FORCE VIEW TABMeineTabelle AS Select nlfdId ID, szName NAME from  TABTestTabelle;

View wurde angelegt.

SQL> INSERT INTO TABTestTabelle values(1,'Christoph');

1 Zeile wurde erstellt.

SQL> Commit;

Transaktion mit COMMIT abgeschlossen.

SQL> Select * from TABMeineTabelle;

        ID NAME
---------- --------------------------------------------------
         1 Christoph
```

Hier hast du sogar genau das was du Brauchst ? 

Du kannst auch ein insert auf die View machen das dieses dann in die Tabelle weiterleitet


```
SQL> Insert INTO TABMeineTabelle Values(2,'Manfred');

1 Zeile wurde erstellt.
```


```
SQL> Select * from TABMeineTabelle;

        ID NAME
---------- --------------------------------------------------
         1 Christoph
         2 Manfred
```


```
SQL> Select * from TABTestTabelle;

    NLFDID SZNAME
---------- --------------------------------------------------
         1 Christoph
         2 Manfred
```

Das Brauchst du doch oder nicht ? 

lg


----------

