martenk
Goto Top

Probleme beim Hinzufügen einer Spalte mysql

Hallo Gemeisnchaft,

möchte in einer Tabelle (am Ende) eine neue Spalte hinzufügen


ALTER TABLE staff ADD spalte INT;


MySQL meldet:

#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'

habt ihr da Erfahrung und könnt helfen

Content-Key: 7000662031

Url: https://administrator.de/contentid/7000662031

Printed on: April 27, 2024 at 10:04 o'clock

Member: michi1983
michi1983 May 03, 2023 at 12:48:47 (UTC)
Goto Top
Hallo,

ALTER TABLE staff
  ADD int varchar(40) NOT NULL
    AFTER $deineAktuellLetzteSpalte;

Gruß
Member: martenk
martenk May 03, 2023 updated at 12:53:44 (UTC)
Goto Top
klappt leider nicht
ALTER TABLE staff
ADD int varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation

#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'int varchar(40) NOT NULL
AFTER is_present' in Zeile 2
Member: Xaero1982
Xaero1982 May 03, 2023 at 13:11:57 (UTC)
Goto Top
Worüber willst du die denn hinzufügen? Aufm MySQL Server? PhpMyAdmin?
Member: martenk
martenk May 03, 2023 at 13:20:15 (UTC)
Goto Top
PhpMyAdmin
Member: SlainteMhath
SlainteMhath May 03, 2023 at 13:22:06 (UTC)
Goto Top
Moin,

für die Spalte "created" ist kein Vorgabewert festgelegt. Setz dann mal korrekt (vermutlich CURRENT_TIMESTAMP oder ähnliches) dann kannst du auch deine Spalte hinzufügen.

lg,
Slainte
Member: martenk
martenk May 03, 2023 at 13:24:58 (UTC)
Goto Top
magst du mir das an meinem bsp bauen
Member: martenk
martenk May 03, 2023 at 13:26:04 (UTC)
Goto Top
ich möchte nun das Feld password hinzufügen als var 255
Member: Xaero1982
Xaero1982 May 03, 2023 at 13:35:32 (UTC)
Goto Top
Member: martenk
martenk May 03, 2023 at 13:37:22 (UTC)
Goto Top
nein - password - oben war ein Fehler

ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation

#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
Member: ukulele-7
ukulele-7 May 03, 2023 updated at 13:42:21 (UTC)
Goto Top
Also in Post #1 soll die Spalte "spalte" heißen mit Datentyp INT. @michi1983 schreibt "int varchar(40)" was nicht gehen kann da muss anstelle von int der Spaltenname rein und der kann natürlich nicht "int" heißen oder müsste escaped werden, daher dein Syntax Fehler.

Im letzten Post geht es jetzt doch um eine VARCHAR(255) Spalte? Eventuell ist password ebenso ein reserviertes Wort. Bei MSSQL müsste man es dann klammern [password], bei MySQL waren das glaube ich diese Striche `password`.

Was die Spalte "created" angeht so hat die wohl einen Default Wert, das heißt der müsste eigentlich überall gesetzt sein. Ich könnte mir vorstellen das der erst nachträglich gesetzt wurde und MySQL jetzt auf die Idee kommt da irgendwas zu prüfen aber MySQL ist da auch speziell und prüft tendenziell eher gar nicht als zu viel.
Member: SlainteMhath
Solution SlainteMhath May 03, 2023 at 13:40:33 (UTC)
Goto Top
magst du mir das an meinem bsp bauen
Eigentlich ungern, weil a) kein Lerneffekt, b) ich deine Anwendung nicht kenne. Bitte teste das NICHT auf einem Produktivsystem!!

ALTER TABLE `staff` 
MODIFY created TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP

dann sollte sich deine Spalte einfügen lassen.
Member: Xaero1982
Xaero1982 May 03, 2023 at 13:42:51 (UTC)
Goto Top
Zitat von @martenk:

nein - password - oben war ein Fehler

ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation

#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'

https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detai ...

Normalerweise nimmt man für solche Spalten sog. Präfixes. Dann hat man kein Problem mit reservierten Worten..

password ist reserviert.
Member: martenk
martenk May 03, 2023 at 13:43:35 (UTC)
Goto Top
super klasse SlainteMhath

daran lag es - magst du mir vielleicht erklären, wieso das so ist
Member: ukulele-7
ukulele-7 May 03, 2023 at 13:45:31 (UTC)
Goto Top
Zitat von @martenk:

super klasse SlainteMhath

daran lag es - magst du mir vielleicht erklären, wieso das so ist

Dazu müsste man wissen was vorher die Tabellendefinition für "created" war und das kannst du jetzt nicht mehr ermitteln, zumindest nicht auf deinem Testsystem.
Member: erikro
Solution erikro May 03, 2023 at 13:46:55 (UTC)
Goto Top
Moin,

Zitat von @martenk:

nein - password - oben war ein Fehler

ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation

#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'

Die Lösung des Problems ist viel einfacher:

Du willst eine Spalte mit dem Attribut NOT NULL erzeugen. Das Feld darf also nicht leer sein. Ich gehe mal davon aus, dass da schon Daten drin sind. Also müssen die beim Erzeugen mit Daten gefüllt werden. Das Feld darf also nicht leer sein. Deshalb ist der Vorgabewert fehlerhaft. Lösung: Befülle das Feld mit einem Vorgabewert beim Erzeugen der Spalte. Dann lösche den Vorgabewert wieder. Wie? Das steht im Handbuch. face-wink

hth

Erik
Member: SlainteMhath
Solution SlainteMhath May 03, 2023 at 13:48:32 (UTC)
Goto Top
magst du mir vielleicht erklären, wieso das so ist
Root-Cause: Schlampiges DB-Design. face-smile

Vermutlich wurde die Tabelle mit einer alten MySQL Version oder mit anderen "sql_mode" Einstellungen erstellt.

Das Feld "created" ist als "NOT NULL" definiert, hat aber keinen Vorgebewert definiert. Der MODIFY von oben legt diesen fest.
Member: martenk
martenk May 03, 2023 at 13:52:21 (UTC)
Goto Top
danke face-smile