2010-04-09 4 views
40

Diciamo che c'è una tabella creata nel modo seguente:Come può essere eliminato un vincolo non nullo?

create table testTable (colA int not null) 

Come ti eliminare il vincolo non nullo? Sto cercando qualcosa sulla falsariga di

ALTER TABLE testTable ALTER COLUMN colA DROP NOT NULL; 

che è come sarebbe se avessi usato PostgreSQL. Con mio grande stupore, per quanto sono stato in grado di trovare, i documenti MySQL, Google e sì, anche StackOverflow (nonostante dozzine o centinaia di domande relative a NULL) non sembrano portare a una singola istruzione SQL semplice che farà il lavoro.

risposta

57

vorrei provare qualcosa di simile

ALTER TABLE testTable MODIFY COLUMN colA int; 
+0

Per qualche motivo, 'alter table testTable modify col int default null' non sembra funzionare quando l'ho provato: quanto sopra è in effetti l'affermazione corretta, anche se senza le virgolette singole (le sto rimuovendo per abbinare ciò che funzionava). –

+0

ottima risposta :) –

8

In MySQL, il nullability è una parte del tipo di dati, non un vincolo. Quindi:

ALTER TABLE testTable MODIFY COLUMN colA int null; 
+0

'alter table x alter column a int nullo' restituisce" Si è verificato un errore nella sintassi SQL; controllare il manuale corrispondente alla versione del server MySQL per la sintassi corretta da utilizzare vicino a "int nullo" alla riga 1 [SQL Stato = 42000, DB Errorcode = 1064] " Ho anche provato' alter table testTable modifica un valore predefinito null; 'e' alter table x alter column a int default null': il risultato è lo stesso. Sto usando mysql 5.1. –

+0

Siamo spiacenti, è "MODIFY COLUMN", non "ALTER". Modificato. –

3

La sintassi era vicino la sua realtà:

ALTER TABLE testTable CHANGE colA colA int null; 
0
ALTER TABLE test.tbl_employee 
CHANGE COLUMN `DepartmentId` `DepartmentId` INT(11) NULL; 
1

Prova

ALTER TABLE testTable MODIFY COLUMN columnA int; 
+0

Puoi fornire un po 'più di contesto per la tua risposta? – dethtron5000

0

Questo funziona per me

ALTER TABLE table_name 
MODIFY COLUMN column_name VARCHAR(25) UNIQUE; 
0

Quando si modifica vincolo di tabella o tipo di dati in MySQL Workbench poi mostra il codice che sta per eseguire per completare la richiesta. E questa è la query che ho ricevuto da quella casella.

ALTER TABLE `table_name`.`column_name` CHANGE COLUMN `column_name` `colunm_name`datatype NULL ; 

Ma il fermo qui è che non si può avere la chiave primaria come nulla si deve impostare unico posto.