Как изменить столбец и изменить значение по умолчанию?

При попытке изменить тип данных столбца и установки нового значения по умолчанию я получил следующую ошибку:

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

ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверить руководство, соответствующее вашей версии сервера MySQL для правильного синтаксис для использования около 'VARCHAR (255) NOT NULL SET DEFAULT' {} '' в строке 1

Ответ 1

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

Вторая возможность, которая делает то же самое (благодаря juergen_d):

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

Ответ 2

В качестве продолжения, если вы просто хотите установить значение по умолчанию, достаточно уверен, что вы можете использовать синтаксис ALTER.. SET. Только не кладите туда все остальное. Если вы включите остальную часть определения столбца, используйте синтаксис MODIFY или CHANGE в соответствии с принятым ответом.

В любом случае, синтаксис ALTER для установки столбца по умолчанию (с тех пор, как я искал, когда пришел):

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

Для которого "литерал" также может быть числом (например, ...SET DEFAULT 0). Я не пробовал это с помощью ...SET DEFAULT CURRENT_TIMESTAMP, но почему бы и нет?

Ответ 3

Если вы хотите добавить значение по умолчанию для уже созданного столбца, это работает для меня:

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';

Ответ 4

Для DEFAULT 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;

Обратите внимание на объявление двойного столбца

Удаление DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;

Ответ 5

Если вышеуказанное не работает для вас (то есть: вы работаете с новым SQL или Azure), попробуйте следующее:

1) удалить существующее ограничение столбца (если оно есть):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2) создайте новый:

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

Ответ 6

Попробуй это

ALTER TABLE 'table_name' CHANGE 'column_name' 'column_name' data_type  NULL DEFAULT '';

как это

ALTER TABLE 'drivers_meta' CHANGE 'driving_license' 'driving_license' VARCHAR(30) NULL DEFAULT '';

Ответ 7

Принятый ответ работает хорошо.

В случае неверного использования значения NULL- значения, для значений NULL обновите все значения NULL до значения по умолчанию в этом столбце, а затем попытайтесь выполнить изменение.

UPDATE foobar_data SET col = '{}' WHERE col IS NULL;

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

Ответ 8

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

ALTER TABLE name_of_table ADD column_name varchar(50) DEFAULT '0';