Come aggiungere un vincolo non nullo alla colonna esistente in MySQL


164

Ho un nome tabella chiamato "Persona" con i seguenti nomi di colonna

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

Ho dimenticato di dare NOT NULLConstraint a P_Id.

Ora ho provato con la seguente query per aggiungere NOT NULLVincolo alla colonna esistente chiamata P_Id,

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

Ricevo un errore di sintassi ....

Risposte:


261

Basta usare una ALTER TABLE... MODIFY...query e aggiungerla NOT NULLalla definizione della colonna esistente. Per esempio:

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

Un avvertimento: è necessario specificare nuovamente la definizione di colonna completa quando si utilizza una MODIFYquery. Se la tua colonna ha, ad esempio, un DEFAULTvalore o un commento di colonna, devi specificarlo MODIFYnell'istruzione insieme al tipo di dati e il NOT NULL, o andrà perso. La pratica più sicura per evitare tali incidenti è copiare la definizione della colonna dall'output di una SHOW CREATE TABLE YourTablequery, modificarla per includere il NOT NULLvincolo e incollarla nella ALTER TABLE... MODIFY...query.


4
@Positive perché hai scritto INT(11)e non solo INT? Qual è l'effetto di 11?
Suzanne Dupéron,

2
L'11 è solo un esempio, imposta la lunghezza di P_Id. non sono sicuro che sia necessario aggiungerlo di nuovo anche se potresti non voler nemmeno cambiarlo.
Gerard,

2
@Pacerier con changete modifica il nome della colonna
Javier P

1
@Victor MODIFYè anche supportato da Oracle. E PostgreSQL non supporta CHANGEinvece fornisce ALTER [COLUMN]un'istruzione.
Mr. Deathless,

1
nota a se stesso: il linguaggio di query strutturato non è un linguaggio di query standard ...
Dmitry

20

Prova questo, conoscerai la differenza tra cambiamento e modifica,

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]
  • È possibile modificare il nome e il tipo di dati della colonna specifica utilizzando CHANGE.
  • È possibile modificare il tipo di dati della colonna particolare utilizzando MODIFY. Non puoi cambiare il nome della colonna usando questa affermazione.

Spero di aver spiegato bene in dettaglio.


5
Si esegue l'operazione MODIFICA per cambiare, ma non è possibile invertire?
Navrattan Yadav,

1
Stranamente stavo ottenendo un errore (MySQL 5.6, Workbench 6.3) durante la modifica / modifica di una colonna che avevo chiamato null_heart_rate_count, l'errore era # 1138, uso non valido del valore NULL. Ho dovuto rilasciare e aggiungere invece la colonna.
William T. Mallard,

@NavrattanYadav Penso che intendesse dire rinominare, non invertire
shaahiin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.