2013-04-09 68 views
7

我創建了一個表,默認的列值male插入到表

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) 

當我嘗試插入值到Persons表使用插入語句#1 ,我得到下面

列名或提供值的數目顯示不匹配表定義

錯誤但是當我插入Persons using語句#2,它成功地執行。

有些人可以解釋爲什麼會發生這種情況嗎?

回答

5

那麼,在你的聲明#1,如果你忽略列的列表,你必須供應所有三個列,你不這樣做。這就是爲什麼如果你只提供其中兩個值就會失敗。

而且你的說法#2也許應該是:

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

,然後你清楚指定插入到(nameage)的列和你提供填寫需要兩個值兩列 - 這就是爲什麼它的作品。第三列將填充配置的默認值,因爲您沒有爲其指定任何內容。

基於這些原因,我建議總是明確指定要插入數據的列的列表 - 不只是省略名單和假設你得到所有列權... ..

1

第一個失敗,因爲您沒有指定INSERT語句中的任何列。然後你只提供兩列的值而不是全部3,所以它不知道將值放入哪些列......這是行不通的。

第二個工作原理是因爲您明確指出要插入namegender並且您正在爲每列指定一個值。

下面的工作(但我懷疑你想20gender列):

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

或者:

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

我猜測你真的想被插入agegender。您明確指出要將數據插入到哪些列是非常重要的,以便您可以在正確的列中獲取數據。

0

你的表有3列 -

Name 
Age 
Gender 

您已設置性別默認。在查詢(1)中,您爲3列提供了2個值,沒有列列表。因此錯誤。

拉吉

2

如果你不想寫的字段,值必須在表中的字段數相匹配。

您可以使用4個缺省你的目的:

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

真 - 這工作 - 但我仍然認爲這是最好明確地闡明你插入的列的列表。當有人在表格中添加第四列時,這將會中斷... – 2013-04-09 11:08:11

+0

@corretge感謝提示:) – 2013-04-09 11:08:25

+0

是@marc_s,總是希望控制我們插入的數據。只有在您有興趣不解釋所有字段時,我纔在答案中添加DEFAULT子句。 – corretge 2013-04-09 12:15:43