Как удалить 'NOT NULL' из столбца в MySQL?
команда show create table показывает следующее:
'columnA' varchar(6) NOT NULL DEFAULT '';
как изменить этот столбец, чтобы удалить NOT null? Мне нужно, чтобы это было:
'columnA' varchar(6) DEFAULT NULL;
Я думал, что следующим будет работать, но это не имеет никакого эффекта:
ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL;
3 ответов
обычно ответ Эрика должен работать:
ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL;
(хотя часть "NULL DEFAULT NULL" необязательна).
но, как и у вас, у меня был случай, который только что вернулся нормально, ничего не делая. В моем случае это связано с тем, что мой ключ был частью первичного ключа. Поэтому мне пришлось сделать следующее:--4-->
ALTER TABLE tbl_name DROP PRIMARY KEY;
ALTER TABLE tbl_name MODIFY columnA varchar(6);
ALTER TABLE tbl_name ADD PRIMARY KEY (columnA);
С этим последним запросом, указывающим, что ваш первичный ключ на самом деле.
кроме того, если кто-то думает, что это слишком многословно, следующий комбинированный запрос не работает, хотя он должен быть идентичным:
ALTER TABLE tbl_name DROP PRIMARY KEY, MODIFY columnA varchar(6), ADD PRIMARY KEY (columnA);
Я предполагаю, что mysql переписывает этот последний запрос в другой порядок, так что первичный ключ все еще существует, когда выполняется изменение, следовательно, необходимо разбить его на три оператора.
FYI, это на mysql 5.1.47, но я еще не нашел никакой документации, указывающей, почему это происходит, поэтому я не знаю, какие версии затронуты.
внесите изменения (локально) в phpMyAdmin. Он покажет запрос, который он использовал для изменения. Выполните этот запрос в production, и все готово.
вы можете использовать эту стратегию в любом инструменте GUI, чтобы увидеть запросы, которые он выполняет. Я лично использую продолжение Pro (для Mac OS X) вместо phpMyAdmin.