2010-06-01 62 views
0

我需要一些真正简单的东西,出于某种原因,我无法完成这一点。整数代理键?

我也一直无法令Google惊讶的回答。我需要为不同表格中的条目进行唯一编号。我知道MySQL中的AUTO INCREMENT,并且它会涉及到。我的情况是如下:

如果我有像

表例子

 
    ID - INTEGER 
    FIRST_NAME - VARCHAR(45) 
    LAST_NAME - VARCHAR(45) 
    PHONE - VARCHAR(45) 
    CITY - VARCHAR(45) 
    STATE - VARCHAR(45) 
    ZIP - VARCHAR(45) 

这将是该表的设置,其中ID是一个整数,每次自动递增一个条目被插入到表格中。我需要的是我不想在将数据插入数据库时​​考虑到这个字段。从我的理解,这将是一个代理键,那我可以告诉数据库自动递增,我没有把它列入INSERT语句

因此,而不是:

 INSERT INTO EXAMPLE VALUES (2,'JOHN','SMITH',333-333-3333,'NORTH POLE'....

我可以离开出了第一ID列,只是写类似:

INSERT INTO EXAMPLE VALUES ('JOHN','SMITH'.....etc)

通知我不会定义ID列...

我知道这是一个非常COMM在任务上做,但由于某种原因,我不能达到它的底部。

我正在使用MySQL,只是为了澄清。

非常感谢

回答

1

此:

INSERT INTO EXAMPLE VALUES ('JOHN','SMITH'.....etc) 

...将返回一个MySQL错误#1136,因为列在表上的号码不匹配指定的列数在VALUES条款。所以你有两种选择:

  1. 使用NULL来填写自动增量列的值。 IE:

    INSERT INTO EXAMPLE VALUES (NULL, 'JOHN','SMITH'.....etc) 
    
  2. 指定提供值的表的列的列表。IE:

    INSERT INTO EXAMPLE 
        (FIRST_NAME, LAST_NAME, PHONE, CITY, STATE, ZIP) 
    VALUES 
        ('JOHN','SMITH'.....etc) 
    
+0

对于这些示例中的任何一个,如果我将自动指定ID列为AUTO INCREMENT,它会正确处理它吗? – TheJediCowboy 2010-06-01 21:50:07

+0

@CitadelCSAlum:是的,如果ID列设置为AUTOINCREMENT - 请使用我提供的示例。 – 2010-06-01 21:52:04

+0

我使用了你的第一个选项,它最适合我的需求,我相信它将具有最少的重构。非常感谢! – TheJediCowboy 2010-06-01 22:11:04

3

IDauto_increment如图所示here。插入一行时,您不必为auto_increment字段提供值,数据库将为您提供该值。请注意,在这种情况下,您仍然必须使用insert语法,以便提供这些字段的名称,并且您只需省略ID字段。

1

我不了解mysql,但在SQL Server中,您需要指定插入的字段(无论如何您都应该这样做,作为最佳实践)。

你试过

insert into Example(field1, field2) 
values ('John', 'Smith') 
+1

如果你没有该表后面列出的列,你是依靠在表中列的序号位置。这绝不是一个好主意,因为你的代码可能会意外中断。 – 2010-06-01 20:46:45

+2

或者更糟糕的是,没有出现中断(即没有错误消息),但将数据放在worng的地方。在有人注意到之前,这可能会持续一段时间,并且修复受此类影响的不良数据确实很难。 – HLGEM 2010-06-01 21:00:55