2012-05-05 14 views
10

MySQL veritabanındaki birincil anahtarlar için "NOT NULL" kısıtlamalarını bildirmek gerekli midir? Birincil anahtar NULL değerlerine sahip olamaz, çünkü auto_increments zaten ve alan kaydını otomatik olarak doldurur. Yani, bu, birincil anahtarlarım için "NOT NULL" kısıtlamasını kaldırabileceğim anlamına mı geliyor?MySQL - Ana anahtarlar için "NULL değil" kısıtlaması var mı?

+1

Sütunda bulunanlar _does değil hurt_ ve tablo tanımını okurken _explicit_ şeyler yapar. Gelecekte, birincil anahtar kısıtlamasını değiştirirseniz, hala "NOT NULL" kısıtlamasına sahip olursunuz. – Oded

+4

İçinde olmaması gereken iki kavram var. Bir birincil anahtarın bir otomatik arttırma sütunu olması gerekmez, ne de (bir tablonun bir tane varsa) bir birincil arttırma sütununun birincil anahtar olması gerekir. Sadece birlikte kullanılmaları * eğilimindikleri için aynı şey oldukları anlamına gelmez. –

cevap

11

(Sizin soru etiketlidir olarak) MySQL içinde, bunu açıkça yapmanız gerekmez. the manual Gönderen:

A PRIMARY KEY tüm anahtar sütunları NOT NULL olarak tanımlanması gerekir benzersiz endeksidir. Açıkça NOT NULL olarak bildirilmezlerse, MySQL onları çok gizli (ve sessizce) olarak bildirir.

Eğer sen netlik için istemeyebilirsiniz anlamına gelmez etmek yok mu sırf Tabii

, vb

+1

Sadece PK sütunlarını "NULL" olarak değil, aynı zamanda "NULL" olarak nitelendirildiyse, onları "NULL" olarak geçersiz kılar/değiştirir. –

1

Evet ve hayır Sen, "boş değil" kaldırmasını edebilirsiniz kısıtlamayı kaldırmaz. Şahsen onları içeride bırakırdım, onları dışarı çıkarmaya değecek hiçbir şey kazanamazsın.

+0

Hayır, yapamazsınız. Bir sütun birincil anahtarın parçasıysa, Boş Değil Not kısıtlaması boş olarak değiştirilemez. –

+1

@ypercube "NULL olarak değiştir" demedi, "NOT NULL" u kaldır dedi. Sadece NULL olmayan DDL metninde değil, yürürlükte olduğu anlamına gelmez. –

+0

@Branko: "Tanımdan" NOT NULL "ifadesini kaldırması gerekiyorsa, evet, kabul ediyorum. Tekrar okuma, haklısın, muhtemelen ne anlama geliyordu. –

0

Birincil anahtar, null sütunları içermemelidir. auto_increment bir denetim kısıtlaması değildir (varsayılan bir kısıtlamadır), bu nedenle'un varlığından bağımsız olarak birincil anahtarın bir parçası olan sütunun tanımından not null'u kaldıramazsınız. Mysql'deki birincil anahtar tablosunu oluştururken, not null yazmanız gerekmez, çünkü motor bu kısıtlamayı otomatik olarak ekler.

0

Sütunu açıkça boş olarak bildirmemize gerek yoktur, çünkü birincil anahtar kısıtlaması sütunu NULL DEĞİL yapar. Oracle’ı kontrol ettim.

İlgili konular