2013-01-15 35 views
-3

我有一个名为Books的表。 其列为indexNum,Bookname,Bookedition, 其中indexNum是主键并自动递增。插入到自动增量的PK表中

我试图插入数据到表中,但插入命令被拒绝。 我尝试了以下声明:

INSERT INTO Books VALUES ('', Birds, a12) 
INSERT INTO Books VALUES (NULL, Birds, a12) 
INSERT INTO Books VALUES (Bookname, Bookedition)(Birds, a12) 

前两个语句不工作。最后的声明是第一次,但是,下一次它说PK是重复的。

如何正确插入多行?

+0

“Bookname”和“Bookedition”还有一个约束吗? “我该如何正确插入多行”是什么意思?你怎么在没有撇号的情况下插入“鸟”和“a12”? – LittleBobbyTables

+0

请同时显示您的表格定义以澄清 –

+0

,并添加一个标记以指明您正在使用哪个数据库服务器 – Gus

回答

1

您的语法有点偏离。我会建议使用列列表。在正确的语法上查看documentation。确保字符串用单引号括起来。

INSERT INTO Books (Bookname, Bookedition) VALUES ('Birds', 'a12') 
+0

嘿,它不起作用。它说其中一列缺失(pk列),它不会自动添加它 –

+1

确切的错误是什么? – Kermit

+1

指定列名称也是防止依赖列顺序的良好预防性药物。如果您不指定列名称,并且基础表的列顺序已更改,则代码将中断。使用指定的列名称,您是安全的。 –

0
INSERT INTO Books (BookName, BookEdition) 
VALUES ('Birds' , 'a12') 

--edit

听起来像是你缺少你标识列。如果你可以改变你的桌子,看看这样做。

如果没有,尝试这样的事情,它使用MAXIFNULL(MySQL的)或ISNULL(对于SQL Server):

INSERT INTO Books (IndexNum, BookName, BookEdition) 
SELECT IFNULL(Max(indexNum),0) + 1 as NewIndexNum, 'Birds', 'a12' 
FROM Books 

这里是SQL Fiddle

+0

它给出了错误1062.对'PRIMARY'键重复输入'0' –

+0

我猜你没有在你的表中设置一个identity/auto_increment字段 - - 看看你的表格结构,如果需要改变。 – sgeddes

+0

@ronnack - 请参阅上面的编辑 - 如果您无法更改您的Books表,插入时,您Max和IFNULL(对于MySQL)。祝你好运。 – sgeddes