2012-07-03 33 views
115

mam następujący błąd podczas próby zmieniać typ danych kolumna i ustawienie nowej wartości domyślnej:Jak zmienić kolumnę i zmienić wartość domyślną?

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

ERROR 1064 (42000): masz błąd w składni SQL; sprawdzić instrukcję który odpowiada twojej wersji serwera MySQL dla prawego składnię używaną w pobliżu „VARCHAR (255) NOT NULL ustawić domyślne«{}»” w linii 1

+0

Nie myślisz potrzebujesz SET przed DEFAULT –

Odpowiedz

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

Druga możliwość, która robi taka sama (dzięki juergen_d):

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

'' column' jest opti onal. Możesz po prostu użyć 'ALTER TABLE foobar_data MODIFY col VARCHAR (255) NOT NULL DEFAULT '{}';' lub 'ALTER TABLE foobar_data CHANGE col col VARCHAR (255) NIE MA NULL DEFAULT '{}';', a wynik będzie taki sam . – kapad

65

jako uzupełnienie, jeśli po prostu chcesz ustawić domyślną, całkiem pewien, że można użyć .. składnię sET ALTER. Tylko nie wkładaj tam wszystkich innych rzeczy. Jeśli chcesz umieścić resztę definicji kolumny, użyj składni MODIFY lub CHANGE zgodnie z zaakceptowaną odpowiedzią.

Zresztą, składnia ALTER na ustawienie domyślne kolumny, (ponieważ to właśnie szukałem kiedy przyszedłem tutaj):

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

Dla których „dosłowny” może być również pewną liczbę (np ...SET DEFAULT 0) . Nie próbowałem go z ...SET DEFAULT CURRENT_TIMESTAMP, ale dlaczego nie eh?

+3

Wygląda na to, że nie działa dla DEFAULT CURRENT_TIMESTAMP dla mnie ... – Malaise

+2

Również current_timestamp nie działał dla mnie, jeśli jest cytowany. Musiałem użyć następującego: 'ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NIE NULL DEFAULT current_timestamp;' – Nereis

+2

+1 Najlepsza odpowiedź dla mnie, ponieważ w ten sposób nie muszę określać typu kolumny i innych rzeczy, które nie będą zmiana! – user2342558

1

W przypadku powyższego nie działa dla Ciebie (tj którym pracujemy nowego SQL lub Azure) wykonaj następujące czynności:

1) spadek istniejące ograniczenie kolumny (jeśli istnieje):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint 

2) tworzyć nowe:

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

Jeśli chcesz dodać domyślną wartość dla już utworzonej kolumnie Thi s działa dla mnie:

ALTER TABLE Persons 
ALTER credit SET DEFAULT 0.0'; 
0

za zwłokę 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; 

Uwaga podwójne deklaracja NazwaKolumny

Usuwanie DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename 
ALTER COLUMN columnname1 DROP DEFAULT, 
ALTER COLUMN columnname2 DROPT DEFAULT; 
Powiązane problemy