2013-05-14 13 views
7

Próbuję wstawić jeden rekord do tabeli dim_channel z zerem dla klucza podstawowego (unsigned int).mysql nie może wstawić rekordu z niepodpisanym kluczem podstawowym będącym zero

Mysql polecenia:

INSERT INTO dim_channel 
set channel_id=0,name='Other',parent_channel_id=0,parent_channel_name='Other'; 

Wyniki:

select * from dim_channel; 
+------------+-------+-------------------+---------------------+ 
| channel_id | name | parent_channel_id | parent_channel_name | 
+------------+-------+-------------------+---------------------+ 
|   1 | Other |     0 | Other    | 
+------------+-------+-------------------+---------------------+ 

Uwaga CHANNEL_ID dostał wartość 1, a nie 0, jak się spodziewałem.

Każdy wie, dlaczego tak się dzieje.

Nawiasem mówiąc, mogę zaktualizować rekord jako: update dim_channel set channel_id = 0 where channel_id = 1;

Po prostu chcę wiedzieć, dlaczego nie mogę wstawić rekordu z channel_id = 0 na pierwszym miejscu.

Wielkie dzięki.

====== polecenia MySQL, aby przetestować ====

- Tworzenie tabeli

CREATE TABLE `dim_channel` (
    `channel_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` char(80) DEFAULT NULL, 
    `parent_channel_id` int(10) unsigned NOT NULL DEFAULT '0', 
    `parent_channel_name` varchar(80) DEFAULT NULL, 
    PRIMARY KEY (`channel_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

- wstawić rekord

INSERT INTO dim_channel set channel_id=0,name='Other',parent_channel_id=0,parent_channel_name='Other'; 

- zobacz wynik

select * from dim_channel; 
+0

mysql zakłada 0 oznacza "podaj mi kolejny identyfikator" dla kolumn auto_increment. Jeśli naprawdę chcesz mieć 0, gdzie nie należy, użyj aktualizacji po wstawieniu. –

Odpowiedz

6

To dlatego, że masz auto-inkrementacja klucza podstawowego w tym polu. Jeśli przypiszesz NULL lub 0 dla tej wartości przy wstawianiu, jawnie otrzymasz następny numer w sekwencji dla tabeli.

+0

Dzięki. Wydaje się, że muszę użyć dwóch komend mysql do wstawienia tego rekordu. – user1828513

+0

@ user1828513 Zwróć uwagę, że jeśli masz zamiar wprowadzić "0" jako wartość dla wielu rekordów, nie będziesz mógł mieć klucza podstawowego lub unikalnego indeksu niewpisanego w tym polu. Z pewnością zastanowiłbym się, dlaczego robisz to w pierwszej kolejności i zastanawiasz się, czy ustawienie wartości klucza automatycznego klucza głównego dla 0 jest naprawdę najlepszym sposobem reprezentowania tego, co próbujesz reprezentować w swoich danych. –

+0

@MikeBrant ma nadzieję, że nie chce wstawić 0 do wielu wierszy, czyniąc to CAŁKOWICIE przełamać pojęcie "id" – Felype

25

Wiem, że to stary post, ale tak czy owak:

Zastosowanie:

SET sql_mode='NO_AUTO_VALUE_ON_ZERO'; 

przed włożeniem wartość 0 w swoich wymiarach.

+0

Lifesaver! To jest właściwie poprawna odpowiedź. –

Powiązane problemy