Como adicionar restrição não nula à coluna existente no MySQL

164

Eu tenho o nome da tabela chamado "Pessoa" com os seguintes nomes de coluna

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

Eu esqueci de dar NOT NULLrestrição a P_Id.

Agora eu tentei com consulta a seguir para adicionar NOT NULLrestrição para a coluna existente chamado P_Id,

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

Estou recebendo erro de sintaxe ....

terra da mãe
fonte

Respostas:

261

Basta usar uma ALTER TABLE... MODIFY...consulta e adicionar NOT NULLà sua definição de coluna existente. Por exemplo:

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

Uma palavra de cautela: você precisa especificar a definição completa da coluna novamente ao usar uma MODIFYconsulta. Se a sua coluna tiver, por exemplo, um DEFAULTvalor ou um comentário na coluna, será necessário especificá-lo na MODIFYinstrução junto com o tipo de dados e o NOT NULL, ou ele será perdido. A prática mais segura de se proteger contra esses contratempos é copiar a definição da coluna da saída de uma SHOW CREATE TABLE YourTableconsulta, modificá-la para incluir a NOT NULLrestrição e colá-la na sua ALTER TABLE... MODIFY...consulta.

Shakti Singh
fonte
4
@ Positivo Por que você escreveu INT(11)e não apenas INT? Qual é o efeito do 11?
Suzanne Dupéron
2
O 11 é apenas um exemplo, ele define o comprimento do P_Id. não tenho certeza se é necessário adicioná-lo novamente, mesmo que você nem queira alterá-lo.
Gerard
2
@Pacerier com changevocê modifica o nome da coluna
Javier P
1
O @Victor MODIFYtambém é suportado pela Oracle. E o PostgreSQL não suporta, CHANGEmas fornece uma ALTER [COLUMN]declaração.
Mr. Deathless
1
note to self: linguagem de consulta estruturada não é uma linguagem de consulta padrão ...
Dmitry
20

Experimente, você saberá a diferença entre alterar e 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]
  • Você pode alterar o nome e o tipo de dados da coluna específica usando CHANGE.
  • Você pode modificar o tipo de dados da coluna específico usando MODIFY. Você não pode alterar o nome da coluna usando esta instrução.

Espero, expliquei bem em detalhes.

Maran Manisekar
fonte
5
Você executa a operação MODIFY para alterar, mas não é possível reverter?
Navrattan Yadav 31/03
1
Estranhamente, eu estava recebendo um erro (MySQL 5.6, Workbench 6.3) ao alterar / modificar uma coluna que eu havia chamado null_heart_rate_count, o erro era # 1138, uso inválido do valor NULL. Eu tive que largar e adicionar a coluna.
William T. Mallard
@NavrattanYadav Eu acho que ele quis dizer renomear, não inverter #
shaahiin 28/10/1919