2012-05-05 19 views
10

jest konieczne zadeklarowanie ograniczeń "NOT NULL" dla kluczy podstawowych w bazie danych MySQL? Klucz podstawowy nie może mieć wartości NULL, ponieważ mimo to auto_increments i automatycznie wypełnia rekord pola. Czy mam rację mówiąc, że to oznacza, że ​​mogę usunąć ograniczenie "NOT NULL" dla moich kluczy podstawowych?MySQL - Czy dla kluczy podstawowych są wymagane ograniczenia "NOT NULL"?

+1

Posiadanie ich w kolumnie _nie robi krzywdy_, a odczytanie definicji tabeli powoduje, że rzeczy stają się wyjątkowe. Jeśli w przyszłości zmienisz ograniczenie klucza podstawowego, nadal będziesz mieć ograniczenie "NOT NULL". – Oded

+4

Masz dwa splecione pojęcia, których nie powinieneś mieć. Klucz podstawowy nie musi być kolumną automatycznej inkrementacji, ani (jeśli tabela ma taką) musi być kolumną automatyczną inkrementującą klucz podstawowy. Tylko dlatego, że * mają tendencję do używania razem, nie oznacza, że ​​są one tym samym. –

Odpowiedz

11

(Jak już zostało oznaczone twoje pytanie mysql.) W MySQL nie musisz tego robić jawnie. Od the manual:

PRIMARY KEY to unikatowy indeks, gdzie wszystkie kolumny klucza musi być zdefiniowany jako NOT NULL. Jeśli nie są jawnie zadeklarowane jako NOT NULL, MySQL deklaruje je tak niejawnie (i cicho).

Oczywiście, tylko dlatego, że nie mająnie znaczy, że nie może chcieć dla jasności itp

+1

Nie tylko deklaruje kolumny PK jako 'NOT NULL', ale wyrównuje je nadpisując/modyfikuje je do' NOT NULL', jeśli zostały zadeklarowane jako 'NULL'. –

1

Tak i nie Można usunąć „NULL”, że nie usunie jednak ograniczenia. Osobiście zostawiłbym je, nie zyskujesz nic wartego, by je zabrać.

+0

Nie, nie możesz. Jeśli kolumna jest częścią Klucza podstawowego, ograniczenie Nie Null nie może zostać zmienione na Null. –

+1

@ypercube Nie powiedział "zmień na NULL", powiedział "remove NOT NULL". Tylko dlatego, że NOT NULL nie znajduje się w tekście DDL, nie oznacza, że ​​nie obowiązuje. –

+0

@Branko: Jeśli miał na myśli "usunąć sformułowanie" NOT NULL "z definicji", tak, zgadzam się. Czytając ponownie, masz rację, to prawdopodobnie miało oznaczać. –

0

Klucz główny nie może zawierać kolumn z zerownikiem. auto_increment nie jest ograniczeniem sprawdzającym (jest to raczej ograniczenie domyślne), więc nie można usunąć not null z definicji kolumny, która jest częścią klucza podstawowego, niezależnie od obecności auto_increment. Nie musisz wpisywać not null podczas tworzenia tabeli dla klucza podstawowego w mysql, ponieważ silnik dodaje to ograniczenie automatycznie.

0

Nie musimy jawnie zadeklarować, że kolumna nie jest pusta, ponieważ ograniczenie klucza głównego sprawia, że ​​kolumna NOT NULL. Sprawdziłem w Oracle.

Powiązane problemy