MySQL'de varolan sütuna boş olmayan kısıtlama nasıl eklenir


164

Aşağıdaki sütun adlarıyla "Kişi" adında tablo adım var

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

NOT NULLKısıtlamayı vermeyi unuttum P_Id.

Şimdi NOT NULLdenilen mevcut sütuna Kısıtlama eklemek için aşağıdaki sorgu ile denedim P_Id,

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

Sözdizimi hatası alıyorum ....

Yanıtlar:


261

Bir ALTER TABLE... MODIFY...sorgu kullanın ve NOT NULLmevcut sütun tanımınıza ekleyin . Örneğin:

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

Dikkatli bir kelime: bir sorgu kullanırken tam sütun tanımını tekrar belirtmeniz gerekir MODIFY. Sütun varsa, örneğin, bir DEFAULTdeğer ya da bir sütun yorum, sen bunu belirtmeniz gerekir MODIFYveri türü ve birlikte açıklamada NOT NULL, yoksa kaybolur. Bu tür aksiliklere karşı korunmanın en güvenli yolu, sütun tanımını bir SHOW CREATE TABLE YourTablesorgunun çıktısından kopyalamak , NOT NULLkısıtlamayı içerecek şekilde değiştirmek ve ALTER TABLE... MODIFY...sorgunuza yapıştırmaktır .


4
@Pozitif neden INT(11)sadece yazmadınız INT? Etkisi nedir 11?
Suzanne Dupéron

2
11 sadece bir örnektir, P_Id'nin uzunluğunu ayarlar. değiştirmek istemeseniz bile tekrar eklemeniz gerekip gerekmediğinden emin değilim.
Gerard

2
@Pacerier change, sütunun adını değiştirir
Javier P

1
@Victor MODIFYayrıca Oracle tarafından da desteklenmektedir. PostgreSQL desteklemiyor, CHANGEbunun yerine bir ALTER [COLUMN]ifade sağlıyor.
Bay Deathless

1
kendine not: yapılandırılmış sorgu dili standart bir sorgu dili değildir ...
Dmitry

20

Bunu deneyin, değişim ve değişiklik arasındaki farkı bileceksiniz,

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]
  • Düğmesini kullanarak belirli bir sütunun adını ve veri türünü değiştirebilirsiniz CHANGE.
  • Belirli sütun veri türünü kullanarak değiştirebilirsiniz MODIFY. Bu ifadeyi kullanarak sütunun adını değiştiremezsiniz.

Umarım ayrıntılı olarak açıkladım.


5
Değiştirmek için DEĞİŞTİR işlemi gerçekleştiriyorsunuz ancak geri dönüş mümkün değil mi?
Navrattan Yadav

1
Garip bir şekilde (MySQL 5.6, Workbench 6.3) null_heart_rate_count adlı bir sütunu değiştirme / değiştirme hatası alıyordum, hata # 1138, NULL değerinin geçersiz kullanımı. Sütunu bırakmak ve eklemek zorunda kaldım.
William T. Mallard

@NavrattanYadav Sanırım yeniden adlandırmak, ters değil demek
istedi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.