2014-04-04 15 views
17

dodaję kolumnę do tabeli:MySQL dodać kolumnę NOT NULL

ALTER TABLE t ADD c varchar(10) NOT NULL; 

Kolumna zostanie dodana, a każdy rekord ma pusty łańcuch.

Czy to powinno działać w ten sposób w każdych warunkach (tryb ścisły itp.) W MySQL 5.5+?

+7

tak. W przeciwnym razie nie byłoby możliwe dodanie nowej kolumny do tabeli. Nowe kolumny ustawią ich wartość jako domyślną dla tej kolumny lub odpowiednią "automatyczną wartość domyślną" dla ich typu. Dla 'varchar not null', jest to pusty ciąg. –

+0

@MarcB, właśnie to wymyśliłem. Dziękujemy za weryfikację. –

+2

@MarcB, jak powiedział użytkownik2864740, byłoby to całkowicie możliwe. Musisz tylko określić wartość domyślną, którą inne systemy DBMS wymagają tutaj. –

Odpowiedz

22

W MySQL każdy typ kolumny ma numer "implicit default" value.

Dla typów ciągów [domyślna] wartość domyślna to pusty ciąg znaków.

Jeśli kolumna NOT NULL jest added to a table i ma wyraźnego DEFAULT jest określony, domniemana wartość domyślna jest używany do wypełniania nowych danych kolumn . Podobne zasady obowiązują, gdy określona jest wartość DEFAULT.

Jako taki, oryginalny DDL daje te same rezultaty jak:

-- After this, data will be the same, but schema has an EXPLICIT DEFAULT 
ALTER TABLE t ADD c varchar(10) NOT NULL DEFAULT '' 
-- Now we're back to the IMPLICIT DEFAULT (MySQL stores NULL internally) 
ALTER TABLE t ALTER c DROP DEFAULT 

The „surowe” Ustawienia trybu wpływa oświadczenia DML opierając się na wartości domyślne, ale nie wpływają na niejawny domyślnej Zastosowanie gdy kolumna jest dodawana .

do wprowadzania danych do kolumny NOT NULL, że nie ma wyraźnej klauzuli Domyślnie, jeśli INSERT lub REPLACE oświadczenie zawiera żadnej wartości dla kolumny [jeśli] ścisłe tryb SQL jest włączona, wystąpi błąd ..

Oto an sqlfiddle "proof", że tryb ścisły nie ma zastosowania do instrukcji ALTER TABLE .. ADD.


Jest to funkcja MySQL. Inne silniki, takie jak SQL Server, wymagają wyraźnego ograniczenia DEFAULT (lub NULL) dla takich zmian schematu.