Как можно удалить ненулевое ограничение?

Допустим, есть таблица, созданная следующим образом:

create table testTable ( colA int not null )

Как бы вы отбросили ограничение not null? Я ищу что-то вроде

ALTER TABLE testTable ALTER COLUMN colA DROP NOT NULL;

вот как это выглядело бы, если бы я использовал PostgreSQL. К моему удивлению, насколько мне удалось найти, документы MySQL, Google и да, даже Stackoverflow (несмотря на десятки или сотни вопросов, связанных с NULL), похоже, не ведут к одному простому оператору SQL. который сделает работу.


person Tomislav Nakic-Alfirevic    schedule 09.04.2010    source источник


Ответы (7)


Я бы попробовал что-то вроде этого

ALTER TABLE testTable MODIFY COLUMN colA int;
person michael.zischka    schedule 09.04.2010
comment
По какой-то причине alter table testTable modify col int default null не сработало, когда я попробовал: приведенное выше утверждение на самом деле правильное, хотя и без одинарных кавычек (я удаляю их, чтобы они соответствовали тому, что сработало). - person Tomislav Nakic-Alfirevic; 09.04.2010

В MySQL допустимость значений NULL является частью типа данных, а не ограничением. Так:

ALTER TABLE testTable MODIFY COLUMN colA int null; 
person Seva Alekseyev    schedule 09.04.2010
comment
alter table x alter column a int null возвращает У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «int null» в строке 1 [SQL State = 42000, DB Errorcode = 1064]. Я также пробовал alter table testTable modify a int default null; и alter table x alter column a int default null: результат тот же. Я использую mysql 5.1. - person Tomislav Nakic-Alfirevic; 09.04.2010
comment
Извините, это MODIFY COLUMN, а не ALTER. Отредактировано. - person Seva Alekseyev; 21.05.2013

Синтаксис был близок на самом деле:

ALTER TABLE testTable CHANGE colA colA int null;
person Noah Ternullo    schedule 13.07.2011

Пытаться

ALTER TABLE testTable MODIFY COLUMN columnA int;
person Pratik Kar    schedule 23.07.2015
comment
Не могли бы вы предоставить немного больше контекста для вашего ответа? - person dethtron5000; 24.07.2015

Это работает для меня

ALTER TABLE table_name
MODIFY COLUMN column_name VARCHAR(25) UNIQUE;
person B-shan    schedule 16.10.2016

Когда вы изменяете ограничение таблицы или тип данных в Workbench Mysql, он показывает код, который будет выполняться для выполнения запроса. И это запрос, который я получил из этого ящика.

ALTER TABLE `table_name`.`column_name`  CHANGE COLUMN `column_name` `colunm_name`datatype NULL ;

Но загвоздка здесь в том, что первичный ключ не может быть нулевым, вместо этого вы должны установить его уникальным.

person Tushar Zagade    schedule 29.12.2016

Это сработало для меня в postgres:

ALTER TABLE table_name ALTER COLUMN column_name DROP NOT NULL;
person Loganathan    schedule 13.04.2021