2013-04-09 14 views
7

Stworzyłem tabelę z domyślną wartość kolumny maleWstawianie do tabeli z wartości kolumny Domyślny

CREATE TABLE Persons 
(name varchar(20), 
    age int, 
    sex varchar(5) default 'male') 

INSERT # 1:

INSERT INTO Persons values('Bob', 20) 

INSERT # 2:

INSERT INTO Persons(name,sex) values('Bob', 20) 

Kiedy próbuję wstawić wartości do tabeli Persons za pomocą instrukcji wstawiania nr 1 , Pojawia się błąd pokazany poniżej

nazwa kolumny lub liczby wartości dostarczonych nie odpowiada definicji tabeli

Ale kiedy wstawić do Persons using # 2, to z powodzeniem realizuje.

Czy niektórzy mogą wyjaśnić, dlaczego tak się dzieje?

Odpowiedz

5

Cóż, w swoim oświadczeniu # 1 jeśli pominąć lista kolumn, ty koniecznością wartości dostaw dla wszystkie trzy kolumn, a nie robisz tego. Dlatego nie powiedzie się, jeśli podasz tylko dwie z tych wartości.

A twoja wypowiedź # 2 powinny prawdopodobnie:

INSERT INTO Persons(name, age) values('Bob', 20) 

a następnie jesteś wyraźnie określając które kolumny wstawić do (name i age) i jesteś dostarczenie dwóch wartości wymagane do wypełnienia dwie kolumny - dlatego działa. Trzecia kolumna zostanie wypełniona skonfigurowaną wartością domyślną, ponieważ nie podano dla niej nic.

Z tych powodów, polecam do zawsze jawnie określić lista kolumn, które chcesz wstawić dane do - nie tylko pominąć tę listę i zakładać że dostajesz wszystkie kolumny w prawo ... ..

1

Pierwsza z nich kończy się niepowodzeniem, ponieważ nie podajesz żadnej z kolumn w instrukcji INSERT. Wtedy podajesz wartości tylko dla dwóch kolumn zamiast wszystkich 3, więc nie wiesz, w jakie kolumny wstawić wartości do ... to nie zadziała.

Drugi działa, ponieważ wyraźnie oświadczasz, że chcesz wstawić do name i gender i określasz jedną wartość dla każdej kolumny.

Następujące będzie działać (ale wątpię chcesz 20 w kolumnie gender):

INSERT INTO Persons(name,gender) 
values('Bob',20) 

czyli

INSERT INTO Persons(name,age) 
values('Bob',20) 

ja domyślam się, że rzeczywiście chcesz być wstawienie do nie agegender.Bardzo ważne jest, aby wyraźnie określić kolumny, do których wstawiasz dane, aby uzyskać dane we właściwych kolumnach.

0

Twój stół ma 3 kolumny -

Name 
Age 
Gender 

Ustawiono domyślną dla płci. W zapytaniu (1) podajesz 2 wartości dla 3 kolumn bez listy kolumn. Stąd błąd.

Raj

2

Jeśli nie chcesz pisać pól, wartości muszą odpowiadać liczbie pól w tabeli.

Można używać domyślnie cztery swój cel:

INSERT INTO Persons VALUES('Bob', 20, DEFAULT); 
+0

True - To działa - ale nadal uważam, że to korzystne wyraźnie określają listę kolumn jesteś włożeniem. To się zepsuje, gdy tylko ktoś doda czwarte kolumny do tabeli ... –

+0

@corretge Dzięki za cynk :) –

+0

yes @marc_s, zawsze lepiej jest kontrolować dane, które wstawiamy. Dodaję w odpowiedzi klauzulę DOMYŚLNE tylko wtedy, gdy nie chcesz wyjaśniać wszystkich pól. – corretge

Powiązane problemy