Як додати ненулеве обмеження до існуючого стовпця в MySQL


164

У мене є ім'я таблиці під назвою "Особа" із наступними назвами стовпців

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);

Я отримую синтаксичну помилку ....

Відповіді:


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
@Positive чому ти писав, INT(11)а не просто INT? Який ефект від 11?
Сюзанна Дюперон

2
11 - лише приклад, він встановлює довжину P_Id. я не впевнений, чи потрібно його ще раз додати, хоча ви навіть не хочете його змінювати.
Джерард

2
@Pacerier з changeвами змінюють назву стовпця
Хав'єр П

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.