2012-07-03 41 views
115

ho ottenuto il seguente errore durante il tentativo di modificare il tipo di dati di una colonna e l'impostazione di un nuovo valore di default:Come modificare una colonna e modificare il valore predefinito?

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}'; 

ERROR 1064 (42000): Hai un errore nella sintassi SQL; controllare il manuale che corrisponde alla versione del server MySQL per il diritto sintassi da utilizzare in prossimità di 'VARCHAR (255) NOT NULL SET DEFAULT '{}'' at line 1

+0

io non credo che si necessario SET prima del DEFAULT –

risposta

180
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}'; 

Una seconda possibilità che fa lo stesso (grazie a juergen_d):

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}'; 
+8

La 'colonna' è opti onale. Si può semplicemente usare 'ALTER TABLE foobar_data MODIFY col VARCHAR (255) NOT NULL DEFAULT '{}';' o 'ALTER TABLE foobar_data CHANGE col col VARCHAR (255) NOT NULL DEFAULT '{}';' e il risultato sarà lo stesso . – kapad

65

Come un follow-up, se si desidera solo per impostare un default, abbastanza sicuro è possibile utilizzare la sintassi .. ALTER sET. Non mettere tutte le altre cose lì dentro. Se vuoi inserire il resto della definizione della colonna, usa la sintassi MODIFY o CHANGE come per la risposta accettata.

In ogni caso, la sintassi ALTER per l'impostazione di un valore predefinito della colonna, (dato che è quello che cercavo quando sono venuto qui):

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal'; 

Per quali 'letterale' potrebbe anche essere un numero (ad es ...SET DEFAULT 0) . Non l'ho provato con ...SET DEFAULT CURRENT_TIMESTAMP ma perché no eh?

+3

Non sembra funzionare per DEFAULT CURRENT_TIMESTAMP per me ... – Malaise

+2

Anche current_timestamp non funzionava per me se quotato. Ho dovuto usare quanto segue: 'ALTER TABLE nome_tabella MODIFY COLUMN nome_colonna TIMESTAMP NOT NULL DEFAULT current_timestamp;' – Nereis

+2

+1 La migliore risposta per me, per questo motivo non ho bisogno di specificare il tipo di colonna e altre cose che non lo faranno modificare! – user2342558

1

Nel caso di cui sopra non funziona per voi (cioè: si sta lavorando con nuovo SQL o Azure) provare quanto segue:

1) eliminare vincolo di colonna esistente (se presente):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint 

2) crearne uno nuovo:

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint DEFAULT getdate() FOR column_name; 
4

Se si desidera aggiungere valore predefinito per la colonna già creato, Thi s funziona per me:

ALTER TABLE Persons 
ALTER credit SET DEFAULT 0.0'; 
0

per inadempienza CURRENT_TIMESTAMP:

ALTER TABLE tablename 
CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; 

Si prega di notare doppia dichiarazione columnname

Rimozione DI DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename 
ALTER COLUMN columnname1 DROP DEFAULT, 
ALTER COLUMN columnname2 DROPT DEFAULT; 
Problemi correlati