Как добавить ненулевое ограничение к существующему столбцу в MySQL

164

У меня есть имя таблицы с именем "Person" со следующими именами столбцов

P_Id(int),
LastName(varchar),
FirstName (varchar).

Я забыл дать NOT NULLограничение P_Id.

Теперь я попытался с помощью следующего запроса добавить NOT NULLограничение в существующий столбец с именем P_Id,

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

Я получаю синтаксическую ошибку ....

mymotherland
источник

Ответы:

261

Просто используйте ALTER TABLE... MODIFY...запрос и добавьте NOT NULLв существующее определение столбца. Например:

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

Предупреждение: вам нужно снова указать полное определение столбца при использовании MODIFYзапроса. Если в вашем столбце есть, например, DEFAULTзначение или комментарий столбца, вам необходимо указать его в MODIFYоператоре вместе с типом данных и NOT NULL, или он будет потерян. Самым безопасным способом защиты от таких ошибок является копирование определения столбца из выходных данных SHOW CREATE TABLE YourTableзапроса, изменение его для включения NOT NULLограничения и вставка его в ваш ALTER TABLE... MODIFY...запрос.

Шакти Сингх
источник
4
@ Позитивно, почему ты написал, INT(11)а не только INT? Каков эффект 11?
Сюзанна Дюперон
2
11 - это просто пример, он устанавливает длину P_Id. я не уверен, стоит ли добавлять его еще раз, хотя вы можете даже не захотеть его менять.
Джерард
2
@Pacerier с changeвами изменить имя столбца
Хавьер P
1
@Victor MODIFYтакже поддерживается Oracle. И PostgreSQL не поддерживает, CHANGEвместо этого он предоставляет ALTER [COLUMN]заявление.
Мистер Бессмертный
1
примечание к себе: структурированный язык запросов не является стандартным языком запросов ...
Дмитрий
20

Попробуйте это, вы узнаете разницу между изменением и изменением,

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • Вы можете изменить имя и тип данных конкретного столбца, используя CHANGE.
  • Вы можете изменить конкретный тип данных столбца, используя MODIFY. Вы не можете изменить имя столбца, используя этот оператор.

Надеюсь, я объяснил подробно.

Маран Манисекар
источник
5
Вы выполняете операцию MODIFY, чтобы изменить, но отмена невозможна?
Навраттан Ядав
1
Как ни странно, я получаю сообщение об ошибке (MySQL 5.6, Workbench 6.3), изменяющее / модифицирующее столбец, который я назвал null_heart_rate_count, ошибка # 1138, Недопустимое использование значения NULL. Мне пришлось отказаться и добавить столбец вместо.
Уильям Т. Маллард
@NavrattanYadav Я думаю, что он хотел сказать, переименовать, а не наоборот
Shaahiin