2009-11-20 5 views
50

Mam tabelę z kolumną typu timestamp, która domyślnie current_timestamp i aktualizacje current_timestamp na każdej aktualizacji.Jak zmienić wartości domyślne kolumny tabeli mysql?

Chcę usunąć funkcję "przy aktualizacji" w tej kolumnie. Jak napisać instrukcję alter?

Próbowałem następujące:

ALTER TABLE mytable alter column time set DEFAULT now(); 

ale to nie działa.

+0

Jesteś pewien, że nie używasz wyzwalacza do aktualizacji? –

+0

To pytanie powinno zostać przeniesione do StackExcange: Administratorzy baz danych –

Odpowiedz

75

Pete był prawie poprawne, ale używany w niewłaściwy składnię 'zmiany':

ALTER TABLE mytable CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

Zawiadomienie musisz powtórzyć nazwę kolumny. Upewnij się także, że używasz odsunięć zamiast pojedynczych cudzysłowów, aby uciec od nazwy kolumny, co uniemożliwia jej interpretację jako typu kolumny mysql.

Po określeniu DEFAULT z CURRENT_TIMESTAMP, MySQL nie będzie automatycznie aktualizował kolumny. Z MySQL Manual:

Z klauzuli DEFAULT CURRENT_TIMESTAMP i bez klauzuli ON UPDATE, kolumna ma aktualny timestamp na wartość domyślną, ale nie jest automatycznie aktualizowana.

9

AFAIK nie może używać funkcji takich jak NOW() jako domyślny.

Spróbuj

ALTER TABLE `mytable` CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

(red dodać ucieczki i drugie użycie nazwy pola)

+0

Mam następujące informacje: mysql> ZMIANA TABELI wiadomości ZMIEŃ czas TIMESTAMP NIE NULL DEFAULT CURRENT_TIMESTAMP; BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "NOT NULL DEFAULT CURRENT_TIMESTAMP" w linii 1 mysql> ALTER TABLE wiadomości ZMIEŃ czas kolumny TIMESTAMP NIE NULL DEFAULT CURRENT_TIMESTAMP; BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "NOT NULL DEFAULT CURRENT_TIMESTAMP" w linii 1 – Tihom

+0

Niestety zapomniałeś dodać escaping, a nazwa pola pojawia się dwukrotnie. – Pete