Jak dodać ograniczenie niezerowe do istniejącej kolumny w MySQL

164

Mam tabelę o nazwie „Osoba” z następującymi nazwami kolumn

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

Zapomniałem dać NOT NULLOgraniczenie P_Id.

Teraz próbowałem za pomocą następującego zapytania dodać NOT NULLograniczenie do istniejącej kolumny o nazwie P_Id,

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

Otrzymuję błąd składni ....

mymotherland
źródło

Odpowiedzi:

261

Po prostu użyj ALTER TABLE... MODIFY...zapytania i dodaj NOT NULLdo istniejącej definicji kolumny. Na przykład:

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

Uwaga: podczas korzystania z zapytania należy ponownie określić pełną definicję kolumny MODIFY. Jeśli twoja kolumna ma na przykład DEFAULTwartość lub komentarz do kolumny, musisz określić ją w MODIFYinstrukcji wraz z typem danych i NOT NULL, lub zostanie utracony. Najbezpieczniejszą praktyką ochrony przed takimi niefortunnymi wypadkami jest skopiowanie definicji kolumny z wyniku SHOW CREATE TABLE YourTablezapytania, zmodyfikowanie jej tak, aby zawierało NOT NULLograniczenie, i wklejenie jej do ALTER TABLE... MODIFY...zapytania.

Shakti Singh
źródło
4
@Pozytywne dlaczego napisałeś, INT(11)a nie tylko INT? Jaki jest efekt 11?
Suzanne Dupéron
2
11 to tylko przykład, ustawia długość P_Id. nie jestem pewien, czy konieczne jest dodanie go ponownie, mimo że możesz nawet nie chcieć go zmieniać.
Gerard
2
@Pacerier z changeTobą zmodyfikuj nazwę kolumny
Javier P
1
@Victor MODIFYjest również obsługiwany przez Oracle. A PostgreSQL nie obsługuje CHANGEzamiast tego dostarcza ALTER [COLUMN]instrukcji.
Mr. Deathless,
1
uwaga dla siebie: ustrukturyzowany język zapytań nie jest standardowym językiem zapytań ...
Dmitry
20

Spróbuj tego, poznasz różnicę między zmianą a modyfikacją,

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]
  • Możesz zmienić nazwę i typ danych konkretnej kolumny za pomocą CHANGE.
  • Możesz zmodyfikować konkretny typ danych kolumny za pomocą MODIFY. Nie możesz zmienić nazwy kolumny za pomocą tej instrukcji.

Mam nadzieję, że szczegółowo wyjaśniłem.

Maran Manisekar
źródło
5
Wykonujesz operację MODIFY, aby zmienić, ale odwrócenie nie jest możliwe?
Navrattan Yadav
1
Co dziwne, otrzymywałem błąd (MySQL 5.6, Workbench 6.3) zmieniając / modyfikując kolumnę, którą nazwałem null_heart_rate_count, błąd to # 1138, Nieprawidłowe użycie wartości NULL. Zamiast tego musiałem upuścić i dodać kolumnę.
William T. Mallard
@NavrattanYadav Myślę, że chciał powiedzieć zmień nazwę, a nie odwróć
shaahiin