Anzeige: united-domains - Die ganze Welt der Domains
Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.
Jetzt Domain-Check bei united-domains!
sql - change column
Autor: manya
Datum: 21.06.2011 09:26:04
Hallo,
Ich habe mir zum Üben und ein bißchen Herumspielen eine kleine Datenbank aufgebaut, und nun bekomme ich bei den einfachsten Übungen schon Schwierigkeiten. :-(
ZB möchte ich hier den Spaltennamen "gebuehr" in "bezeichnung" ändern, aber ich bekomme nur eine Fehlermeldung, mit der ich nichts anfangen kann.
http://manya.ma.funpic.de/sql/change-column.png
Laut meinem schlauen Buch ist die Syntax des query aber in Ordnung.
Andere Abfragen, bspw mit SELECT, funktionieren einwandfrei.
Außerdem kann ich bei dieser Tabelle auch nicht die Spaltennamen durch Markieren und Klick auf den Pfeil in den query einfügen, sondern muß alles von Hand hinschreiben.
Hat jemand eine Ahnung, woran das liegen könnte?
Gruß
manya
Re: sql - change column
Autor: kicia
Datum: 21.06.2011 09:56:09
> Laut meinem schlauen Buch ist die Syntax des
> query aber in Ordnung.
schau mal:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
> Andere Abfragen, bspw mit SELECT, funktionieren
> einwandfrei.
SELECT ist nicht ALTER. Du musst für jedes statement die richtige schreibweise wissen.
Re: sql - change column
Autor: manya
Datum: 21.06.2011 10:09:51
> schau mal:
>
> http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
mit
ALTER `7-4-kasseneinnahmen`
CHANGE COLUMN gebuehr bezeichnung char(20)
klappt es leider auch nicht. Es kommt die gleiche Fehlermeldung wie zuvor.
Gruß
manya
Re: sql - change column
Autor: kicia
Datum: 21.06.2011 10:48:21
> > schau mal:
> >
> http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
>
> mit
> ALTER `7-4-kasseneinnahmen`
> CHANGE COLUMN gebuehr bezeichnung char(20)
Du hast das TABLE vergessen:
ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...
    [partition_options]
Re: sql - change column
Autor: manya
Datum: 21.06.2011 11:34:46
> ALTER [IGNORE] TABLE tbl_name
> alter_specification [,
> alter_specification] ...
> [partition_options]
>
Mit dieser abstrakten Beschreibung kann ich leider nichts anfangen. :-(
> Du hast das TABLE vergessen:
Tatsächlich!
Vielen Dank!  :-))
Hat jemand auch noch eine Idee, wieso ich bei Abfragen in phpMyAdmin nicht die vorgegebenen Spaltennamen auf der rechten Seite auswählen und mit Klick in den query einfügen kann?
http://manya.ma.funpic.de/sql/change-column.png
Gruß
manya
Re: sql - change column
Autor: kicia
Datum: 21.06.2011 17:11:52
> > ALTER [IGNORE] TABLE tbl_name
> > alter_specification [,
> > alter_specification] ...
> > [partition_options]
> >
>
> Mit dieser abstrakten Beschreibung kann ich
> leider nichts anfangen. :-(
Die beschreibung, was die farben, zeichen und formate bedeuten, findest Du dort:
http://dev.mysql.com/doc/refman/5.6/en/manual-conventions.html
Zur der "abstrakten" Beschreibung:
(nochmal der link http://dev.mysql.com/doc/refman/5.6/en/alter-table.html)
Solche Beschreibungen sind im allgemeinen so aufgebaut, daß ganz oben eine Abfolge von Elementen und Platzhaltern steht, die dann weiter unten genauer beschrieben werden, ggf. wieder mit Platzhaltern, die noch weiter unten beschrieben werden usw.
Zum Beispiel ist auf der Seite die ich verlinkt hatte (12.1.6. ALTER TABLE Syntax) der Platzhalter "alter_specification" ein paar Zeilen tiefer genauer beschrieben, unter anderem mit der option CHANGE, wo wieder ein Platzhalter "column_definition" verwendet wird, der ebenfalls weiter unten beschrieben ist.
(Zu Deiner Frage zum automatischen einfügen weiss ich leider nix, kenne mich mit phpMyAdmin nicht aus.)
Re: sql - change column
Autor: manya
Datum: 22.06.2011 07:35:48
> Zur der "abstrakten" Beschreibung:
> (nochmal der link
> http://dev.mysql.com/doc/refman/5.6/en/alter-table.html)
Ich habe dieses Kapitel in der deutschen Übersetzung gesucht, und nicht gleich gefunden, da sich die Kapitel nicht entsprechen.
http://dev.mysql.com/doc/refman/5.1/de/alter-table.html
In Deutsch liest sich das doch viel flüssiger. ;-)
Gruß und danke nochmal
manya
Re: sql - change column
Autor: T.Jung
Datum: 22.06.2011 14:01:35
> Hat jemand auch noch eine Idee, wieso ich bei
> Abfragen in phpMyAdmin nicht die vorgegebenen
> Spaltennamen auf der rechten Seite auswählen und
> mit Klick in den query einfügen kann?
JS deaktiviert vielleicht?
Und warum willst Du, wenn Du eh mit phpMyAdmin arbeitst, den Spaltennamen per Eingabe des SQL-Queries ändern? Das geht in phpMyAdmin doch auch ohne:
In der Übersicht der Tabelle bei der fraglichen Spalte auf das Stift-Symbol klicken -- neuen Spaltennamen eintippen und auf OK -- fertig.
phpMyAdmin zeigt Dir dann sogar den Query, den es abgesetzt hat, an... so lernst Du dann auch direkt die richtige Syntax. :-)
Gruß,
Tobias
Re: sql - change column
Autor: manya
Datum: 22.06.2011 18:10:03
> Und warum willst Du, wenn Du eh mit phpMyAdmin
> arbeitst, den Spaltennamen per Eingabe des
> SQL-Queries ändern?
Weil ich noch nicht herausgefunden hatte, WO man in phpMyAdmin den Spaltennamen ändern kann.
Aber jetzt habe ich es. Man muß erst den Link "Struktur" anklicken.
> Das geht in phpMyAdmin doch
> auch ohne:
> In der Übersicht der Tabelle bei der fraglichen
> Spalte auf das Stift-Symbol klicken -- neuen
> Spaltennamen eintippen und auf OK -- fertig.
> phpMyAdmin zeigt Dir dann sogar den Query, den es
> abgesetzt hat, an... so lernst Du dann auch
> direkt die richtige Syntax. :-)
Ich habe es jetzt einmal ausprobiert:
phpMyAdmin zeigt mir:
ALTER TABLE `5_1_kunden` CHANGE `kunden_nr` `kd_nr` INT( 11 ) NULL DEFAULT NULL
wobei "NULL DEFAULT NULL" überflüssig ist, was ich gerade durch die Gegenprobe, also durch Eintippen des SQL-Queries,  feststelle.
Gruß
manya
Re: sql - change column
Autor: T.Jung
Datum: 22.06.2011 18:44:55
> Weil ich noch nicht herausgefunden hatte, WO man
> in phpMyAdmin den Spaltennamen ändern kann.
Okay, das ist ein Argument. ;-)
> Aber jetzt habe ich es. Man muß erst den Link
> "Struktur" anklicken.
Richtig, das hab ich so nicht erwähnt... :-/
> Ich habe es jetzt einmal ausprobiert:
> phpMyAdmin zeigt mir:
>
> ALTER TABLE `5_1_kunden` CHANGE `kunden_nr`
> `kd_nr` INT( 11 ) NULL DEFAULT NULL
>
> wobei "NULL DEFAULT NULL" überflüssig ist, was
> ich gerade durch die Gegenprobe, also durch
> Eintippen des SQL-Queries, feststelle.
Naja...
NULL bedeutet: Das Feld darf auch den Wert NULL annehmen; ist das Gegenteil gewünscht, gibt man NOT NULL ein. Ich weiß jetzt gerade nicht, für welche der beiden Varianten MySQL sich entscheidet, wenn diese Angabe fehlt...
DEFAULT NULL bedeutet: Wenn beim Hinzufügen eines Datensatzes nicht gesagt wird, welchen Wert das Feld kunden_nr bekommen soll, bekommt es den Wert NULL.
_Überflüssig_ sind diese Werte also nicht; auch wenn ein ALTER TABLE-Query auch durchaus ohne sie funktioniert. phpMyAdmin bemüht sich halt, möglichst vollständige Queries abzusetzen, was ja auch kein Nachteil ist.
Gruß,
Tobias
Re: sql - change column
Autor: manya
Datum: 22.06.2011 20:30:40
> > ALTER TABLE `5_1_kunden` CHANGE `kunden_nr`
> > `kd_nr` INT( 11 ) NULL DEFAULT NULL
> >
> > wobei "NULL DEFAULT NULL" überflüssig ist, was
> > ich gerade durch die Gegenprobe, also durch
> > Eintippen des SQL-Queries, feststelle.
>
> Naja...
> NULL bedeutet: Das Feld darf auch den Wert NULL
> annehmen;
> ist das Gegenteil gewünscht, gibt man
> NOT NULL ein. Ich weiß jetzt gerade nicht, für
> welche der beiden Varianten MySQL sich
> entscheidet, wenn diese Angabe fehlt...
Standard ist "NULL", wenn man nichts eingibt.
> DEFAULT NULL bedeutet: Wenn beim Hinzufügen eines
> Datensatzes nicht gesagt wird, welchen Wert das
> Feld kunden_nr bekommen soll, bekommt es den Wert
> NULL.
Also bestimmt das erste NULL, daß das Feld nicht unbedingt einen Wert haben muß, und das zweite NULL ist dann der Inhalt des Feldes?
Ist das so richtig?
Ich finde das ziemlich verwirrend.
Man könnte ja auch das zweite NULL weglassen, da das erste NULL ja schon besagt, daß in dem Feld nicht unbedingt etwas drinstehen muß?
Gruß
manya
Re: sql - change column
Autor: T.Jung
Datum: 22.06.2011 21:50:10
> Also bestimmt das erste NULL, daß das Feld nicht
> unbedingt einen Wert haben muß
Jain.
Streggenommen: Ja, denn NULL in Programmiersprachen entspricht »kein Wert«.
Ein Feld, dass auf NOT NULL gesetzt ist, _muss_ aber trotzdem nicht unbedingt einen Wert enthalten, es darf z.B. auch einen Leerstring (der ja auch eigentlich »kein Wert« ist) enthalten.
Ach, anstatt zu versuchen, das zu erklären, verlinke ich einfach Wikipedia, da ist die Bedeutung von NULL ganz gut erklärt:
http://de.wikipedia.org/wiki/Nullwert
> und das zweite
> NULL ist dann der Inhalt des Feldes?
> Ist das so richtig?
Der Inhalt des Feldes, _wenn_ nichts anderes angegeben wird, ja.
> Ich finde das ziemlich verwirrend.
> Man könnte ja auch das zweite NULL weglassen, da
> das erste NULL ja schon besagt, daß in dem Feld
> nicht unbedingt etwas drinstehen muß?
Nein, das erste NULL sagt: Dieses Feld darf schon mal den Nullwert enthalten.
Das zweite sagt eben, welcher Wert eingetragen wird, wenn das Feld beim Anlegen des Datensatzes nicht explizit genannt wird. Wenn es günstig ist, dass dort etwas anderes steht, kann man z.B. schreiben:
ALTER TABLE `5_1_kunden` CHANGE `kunden_nr` `kd_nr` INT( 11 ) NULL DEFAULT '1'
... dann würde per Default halt eine 1 eingetragen.
Gruß,
Tobias
Re: sql - change column
Autor: manya
Datum: 23.06.2011 09:43:04
> > Also bestimmt das erste NULL, daß das Feld
> nicht
> > unbedingt einen Wert haben muß
>
> Jain.
> Streggenommen: Ja, denn NULL in
> Programmiersprachen entspricht »kein Wert«.
> Ein Feld, dass auf NOT NULL gesetzt ist, _muss_
> aber trotzdem nicht unbedingt einen Wert
> enthalten, es darf z.B. auch einen Leerstring
> (der ja auch eigentlich »kein Wert« ist)
> enthalten.
Nachdem ich Dein voriges Posting nun beim Frühstück noch ein zweites Mal gelesen habe, wird es mir jetzt endlich klar, hoffe ich jedenfalls. ;-)
Die Ursache für mein Nicht-Kapieren war, daß die Spaltenbeschreibungen
"INT(11) NULL DEFAULT NULL"
nicht durch ein Zeichen voneinander abgegrenzt waren.
Deshalb habe ich das Ganze so gelesen:
INT(11) -  NULL -  DEFAULT -  NULL
obwohl es so richtig wäre
INT(11) -  NULL -  DEFAULT NULL ?
Nur so passt es zu dem, was Du geschrieben hast.
Falls meine Annahme richtig sein sollte, finde ich das ziemlich schlampig von SQL. ;-)
Wenn man sich den Begrenzer zwischen den Definitionen spart, sollte man auch dafür sorgen, daß die Definitionen aus nur EINEM Wort bestehen.
> Ach, anstatt zu versuchen, das zu erklären,
> verlinke ich einfach Wikipedia, da ist die
> Bedeutung von NULL ganz gut erklärt:
> http://de.wikipedia.org/wiki/Nullwert
Das werde ich mir jetzt gleich zu Gemüte führen.
Vielen Dank und Gruß
manya
Re: sql - change column
Autor: T.Jung
Datum: 23.06.2011 13:44:24
> obwohl es so richtig wäre
> INT(11) - NULL - DEFAULT NULL
> ?
Genau, so muss es gelesen werden.
> Falls meine Annahme richtig sein sollte, finde
> ich das ziemlich schlampig von SQL. ;-)
> Wenn man sich den Begrenzer zwischen den
> Definitionen spart, sollte man auch dafür sorgen,
> daß die Definitionen aus nur EINEM Wort
> bestehen.
Ich finde das auch sehr unübersichtlich.
Der Grund dafür liegt vermutlich in irgendeiner Spezifikation, die 1834 festgelegt wurde und seitdem aus Gründen der Abwärtskompatibilität nicht mehr geändert werden kann... ;-)
Gruß,
Tobias
Re: sql - change column
Autor: manya
Datum: 23.06.2011 16:37:47
> 1834
:-D 
|