So fügen Sie einer vorhandenen Spalte in MySQL eine Nicht-Null-Einschränkung hinzu

164

Ich habe einen Tabellennamen namens "Person" mit folgenden Spaltennamen

P_Id(int),
LastName(varchar),
FirstName (varchar).

Ich habe vergessen, NOT NULLConstraint zu geben P_Id.

Jetzt habe ich versucht , mit folgenden Abfrage hinzuzufügen NOT NULLConstraint zu vorhandenen Spalt genannt P_Id,

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

Ich erhalte einen Syntaxfehler ....

mein Mutterland
quelle

Antworten:

261

Verwenden Sie einfach eine ALTER TABLE... MODIFY...Abfrage und fügen Sie sie NOT NULLIhrer vorhandenen Spaltendefinition hinzu. Beispielsweise:

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

Ein Wort der Vorsicht: Sie müssen die vollständige Spaltendefinition erneut angeben, wenn Sie eine MODIFYAbfrage verwenden. Wenn Ihre Spalte beispielsweise einen DEFAULTWert oder einen Spaltenkommentar enthält, müssen Sie diesen in der MODIFYAnweisung zusammen mit dem Datentyp und dem angeben. Andernfalls geht er NOT NULLverloren. Die sicherste Methode, um sich vor solchen Pannen zu schützen, besteht darin, die Spaltendefinition aus der Ausgabe einer SHOW CREATE TABLE YourTableAbfrage zu kopieren , sie so zu ändern, dass sie die NOT NULLEinschränkung enthält, und sie in Ihre ALTER TABLE... MODIFY...Abfrage einzufügen.

Shakti Singh
quelle
4
@ Positiv warum hast du geschrieben INT(11)und nicht nur INT? Was bewirkt das 11?
Suzanne Dupéron
2
Die 11 ist nur ein Beispiel, sie legt die Länge der P_Id fest. Ich bin mir nicht sicher, ob es notwendig ist, es erneut hinzuzufügen, obwohl Sie es möglicherweise nicht einmal ändern möchten.
Gerard
2
@ Pacerier mit changeIhnen ändern den Namen der Spalte
Javier P
1
@ Victor MODIFYwird auch von Oracle unterstützt. Und PostgreSQL unterstützt nicht, CHANGEsondern liefert eine ALTER [COLUMN]Anweisung.
Mr. Deathless
1
Hinweis für sich selbst: Strukturierte Abfragesprache ist keine Standard-Abfragesprache ...
Dmitry
20

Versuchen Sie dies, Sie werden den Unterschied zwischen Ändern und Ändern kennen.

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • Sie können den Namen und den Datentyp der jeweiligen Spalte mit ändern CHANGE.
  • Sie können den jeweiligen Spaltendatentyp mit ändern MODIFY. Mit dieser Anweisung können Sie den Namen der Spalte nicht ändern.

Hoffe, ich habe es ausführlich erklärt.

Maran Manisekar
quelle
5
Sie führen die MODIFY-Operation aus, um zu ändern, aber ein Rückwärtsfahren ist nicht möglich?
Navrattan Yadav
1
Seltsamerweise wurde ein Fehler (MySQL 5.6, Workbench 6.3) beim Ändern / Ändern einer Spalte mit dem Namen null_heart_rate_count angezeigt. Der Fehler war # 1138, Ungültige Verwendung des NULL-Werts. Ich musste stattdessen die Spalte löschen und hinzufügen.
William T. Mallard
@ NavrattanYadav Ich denke, er wollte sagen, umbenennen, nicht umkehren
shaahiin