Cómo agregar una restricción no nula a la columna existente en MySQL

164

Tengo el nombre de la tabla llamada "Persona" con los siguientes nombres de columna

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

Olvidé darle NOT NULLRestricción P_Id.

Ahora intenté con la siguiente consulta para agregar NOT NULLRestricción a la columna existente llamada P_Id,

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

Recibo un error de sintaxis ...

mymotherland
fuente

Respuestas:

261

Simplemente use una ALTER TABLE... MODIFY...consulta y agregue NOT NULLa su definición de columna existente. Por ejemplo:

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

Una advertencia: debe especificar la definición de columna completa de nuevo al usar una MODIFYconsulta. Si su columna tiene, por ejemplo, un DEFAULTvalor o un comentario de columna, debe especificarlo en la MODIFYdeclaración junto con el tipo de datos y NOT NULL, o se perderá. La práctica más segura para protegerse contra tales percances es copiar la definición de columna del resultado de una SHOW CREATE TABLE YourTableconsulta, modificarla para incluir la NOT NULLrestricción y pegarla en su ALTER TABLE... MODIFY...consulta.

Shakti Singh
fuente
44
@ Positivo ¿por qué escribiste INT(11)y no solo INT? ¿Cuál es el efecto de la 11?
Suzanne Dupéron
2
El 11 es solo un ejemplo, establece la longitud del P_Id. No estoy seguro de si es necesario agregarlo nuevamente, aunque es posible que ni siquiera desee cambiarlo.
Gerard
2
@Pacerier con changeusted modifica el nombre de la columna
Javier P
1
@Victor MODIFYtambién es compatible con Oracle. Y PostgreSQL no admite CHANGEen su lugar, proporciona una ALTER [COLUMN]declaración.
Mr. Deathless
1
Nota personal: el lenguaje de consulta estructurado no es un lenguaje de consulta estándar ...
Dmitry
20

Pruebe esto, sabrá la diferencia entre cambiar y modificar,

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]
  • Puede cambiar el nombre y el tipo de datos de la columna en particular utilizando CHANGE .
  • Puede modificar el tipo de datos de columna particular usando MODIFY. No puede cambiar el nombre de la columna con esta declaración.

Espero, lo expliqué bien en detalle.

Maran Manisekar
fuente
55
¿Realiza la operación MODIFICAR para cambiar pero no es posible invertir?
Navrattan Yadav
1
Curiosamente recibí un error (MySQL 5.6, Workbench 6.3) al cambiar / modificar una columna que había llamado null_heart_rate_count, el error fue # 1138, Uso no válido del valor NULL. Tuve que soltar y agregar la columna en su lugar.
William T. Mallard
@NavrattanYadav Creo que quiso decir renombrar, no revertir
shaahiin