2016-04-18 17 views
1

Ich habe bereits eine Tabelle, vereinfachtes Beispiel geben:Fehlgeschlagen Standardnullwert für die Spalte

CREATE TABLE t (c INT NOT NULL); 

Und ich brauche Spalte Standardwert auf NULL zu ändern, so dass ich versuchte:

ALTER TABLE t ALTER COLUMN c SET DEFAULT NULL; 

aber Ich habe den Fehler "Fehlercode: 1067. Ungültiger Standardwert für 'c'". Es sieht wirklich seltsam aus, weil die Abfrage mit offiziellen Dokumenten übereinstimmt.

Ich habe sogar versucht zu:

ALTER TABLE t ALTER COLUMN c DROP DEFAULT; 

und nachdem er eine 'SET DEFAULT NULL' query zu machen, aber der gleiche Fehler aufgetreten ist. Es ist interessant, dass Abfrage wie:

ALTER TABLE t ALTER COLUMN c SET DEFAULT 1; 

fehlerfrei ausgeführt.

Ich weiß, dass es möglich ist Spalte Standardwert auf NULL in meinem Fall zu ändern, mit:

ALTER TABLE t MODIFY COLUMN c INT NULL; 

aber diese Abfrage ist wirklich langsam auf großen Tischen (es ist viel langsamer, als Abfragen wie ‚SET DEFAULT 1 ')

Also, wie nur den Standardwert auf NULL ändern?

Ich meine, ohne Overhead verursacht durch 'MODIFY COLUMN' Befehl.

Details: MySQL x64 Version 5.7.10, Win8. Getestet mit MySQL Workbench.

+0

Sie die Tabelle mit Nicht Nullable Spalte ‚c‘ erstellt haben, so können Sie nicht machen Es ist standardmäßig NULL. Ohne die Spalte auf Null zu ändern, befürchte ich, dass Sie nie NULL setzen können. Sobald Sie es als Nullwert definieren, sollte es standardmäßig NULL sein, wenn Sie einen neuen Datensatz ohne einen Wert in dieser Spalte hinzufügen. – ydoow

Antwort

1

Wenn Sie eine Spalte als NOT NULL erstellen, haben Sie eine CONSTRAINT erstellt, die deklariert, dass die in diese Spalte eingegebenen Werte niemals NULL sein dürfen.

Ein Standardwert von NULL (auf Null gesetzt ist ein Wert, der während INSERT nicht vorhanden ist) würde ungültige Daten erzeugen.

Wie traurig NULL-Zulässigkeit Einschränkung ist Teil des Datentyps in mysql die einzige Möglichkeit, die Spalte Nullwerte enthalten sein wird, um

ALTER TABLE t MODIFY COLUMN c INT NULL;