Comment ajouter une contrainte non nulle à une colonne existante dans MySQL

164

J'ai un nom de table appelé "Personne" avec les noms de colonne suivants

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

J'ai oublié de donner une NOT NULLcontrainte à P_Id.

Maintenant, j'ai essayé avec la requête suivante pour ajouter une NOT NULLcontrainte à la colonne existante appelée P_Id,

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

Je reçois une erreur de syntaxe ...

mymotherland
la source

Réponses:

261

Utilisez simplement une ALTER TABLE... MODIFY...requête et ajoutez-la NOT NULLà votre définition de colonne existante. Par exemple:

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

Un mot d'avertissement: vous devez spécifier à nouveau la définition de colonne complète lors de l'utilisation d'une MODIFYrequête. Si votre colonne a, par exemple, une DEFAULTvaleur ou un commentaire de colonne, vous devez le spécifier dans l' MODIFYinstruction avec le type de données et le NOT NULL, sinon il sera perdu. La pratique la plus sûre pour se prémunir contre de tels incidents consiste à copier la définition de colonne à partir de la sortie d'une SHOW CREATE TABLE YourTablerequête, à la modifier pour inclure la NOT NULLcontrainte et à la coller dans votre ALTER TABLE... MODIFY...requête.

Shakti Singh
la source
4
@Positive pourquoi avez-vous écrit INT(11)et pas seulement INT? Quel est l'effet du 11?
Suzanne Dupéron
2
Le 11 n'est qu'un exemple, il définit la longueur du P_Id. je ne sais pas s'il est nécessaire de l'ajouter à nouveau même si vous ne souhaitez même pas le modifier.
Gerard
2
@Pacerier avec changevous modifiez le nom de la colonne
Javier P
1
@Victor MODIFYest également pris en charge par Oracle. Et PostgreSQL ne prend pas en charge à la CHANGEplace, il fournit une ALTER [COLUMN]déclaration.
M. Deathless
1
note à moi-même: le langage de requête structuré n'est pas un langage de requête standard ...
Dmitry
20

Essayez ceci, vous connaîtrez la différence entre changer et modifier,

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]
  • Vous pouvez modifier le nom et le type de données de la colonne particulière en utilisant CHANGE.
  • Vous pouvez modifier le type de données de colonne particulier à l'aide de MODIFY. Vous ne pouvez pas modifier le nom de la colonne à l'aide de cette instruction.

Espérons, je l'ai bien expliqué en détail.

Maran Manisekar
la source
5
Vous effectuez l'opération MODIFY pour changer mais l'inversion n'est pas possible?
Navrattan Yadav
1
Bizarrement, j'obtenais une erreur (MySQL 5.6, Workbench 6.3) changeant / modifiant une colonne que j'avais nommée null_heart_rate_count, l'erreur était # 1138, utilisation invalide de la valeur NULL. J'ai dû abandonner et ajouter la colonne à la place.
William T.Mallard
@NavrattanYadav Je pense qu'il voulait dire renommer, pas inverser
shaahiin