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-ID: 7000662031

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

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

michi1983
michi1983 03.05.2023 um 14:48:47 Uhr
Goto Top
Hallo,

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

Gruß
martenk
martenk 03.05.2023 aktualisiert um 14:53:44 Uhr
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
Xaero1982
Xaero1982 03.05.2023 um 15:11:57 Uhr
Goto Top
Worüber willst du die denn hinzufügen? Aufm MySQL Server? PhpMyAdmin?
martenk
martenk 03.05.2023 um 15:20:15 Uhr
Goto Top
PhpMyAdmin
SlainteMhath
SlainteMhath 03.05.2023 um 15:22:06 Uhr
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
martenk
martenk 03.05.2023 um 15:24:58 Uhr
Goto Top
magst du mir das an meinem bsp bauen
martenk
martenk 03.05.2023 um 15:26:04 Uhr
Goto Top
ich möchte nun das Feld password hinzufügen als var 255
Xaero1982
Xaero1982 03.05.2023 um 15:35:32 Uhr
Goto Top
martenk
martenk 03.05.2023 um 15:37:22 Uhr
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'
ukulele-7
ukulele-7 03.05.2023 aktualisiert um 15:42:21 Uhr
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.
SlainteMhath
Lösung SlainteMhath 03.05.2023 um 15:40:33 Uhr
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.
Xaero1982
Xaero1982 03.05.2023 um 15:42:51 Uhr
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.
martenk
martenk 03.05.2023 um 15:43:35 Uhr
Goto Top
super klasse SlainteMhath

daran lag es - magst du mir vielleicht erklären, wieso das so ist
ukulele-7
ukulele-7 03.05.2023 um 15:45:31 Uhr
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.
erikro
Lösung erikro 03.05.2023 um 15:46:55 Uhr
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
SlainteMhath
Lösung SlainteMhath 03.05.2023 um 15:48:32 Uhr
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.
martenk
martenk 03.05.2023 um 15:52:21 Uhr
Goto Top
danke face-smile