2013-04-07 61 views
1

我读了很多关于为什么这是一个坏主意,但这就是为什么我想这样做。我希望我的桌子看起来像这样:创建一个不是主键的自动增量列

id | article | link | text_cont 
1 | //text | www... | parsed text content 
2 | //text2 | www..2 | parsed text content2 

依此类推。为什么我不希望我的id成为主键是因为我希望我的LINK成为主键......当我运行Cron作业来获取更多数据时,我不会在我的重复字段表。我可以使用INSERT IGNORE,它不会包含两次相同的链接。但我仍然希望id自动增量,所以我可以使用“无限滚动”使用ID的。

这可能吗?我真的希望如此,因为我认为这是一个很好的理由...

+2

老实说,我仍然会让'id'成为主键,并且会让'link'成为一个备用键值:http://en.wikipedia.org/wiki/Alternate_key#Alternate_key – NPE 2013-04-07 17:05:00

+0

我只想标记链接作为独特的,它不会重复我的条目? – user2025469 2013-04-07 17:14:10

回答

1

你不能自动增加文本字段。

此外,如果你不想让身份证作为你的钥匙,你为什么要身份证?好像你需要改变你运行你的cron作业的方式,而不是你的架构

-

如果你还是想知道如何创建一个人工智能领域:

link_id int NOT NULL AUTO_INCREMENT 

而对于现有数据:

ALTER TABLE articles MODIFY COLUMN link_id int(4) auto_increment 
+0

我写道,我想要一个自动递增的ID能够运行无限滚动,如“加载更多”按钮。我仍然希望id是一个整数,所以它自动增量 – user2025469 2013-04-07 17:07:07

+0

然后ID真的看起来像你所需要的一切仍然有一个独特的约束链接?如果你期望有很多只有部分改变的URL,我还会考虑只存储改变的部分,而不是www。等等,以保持数据库的大小dowm – 2013-04-07 17:11:56

+0

是的,我想我得到它的工作。将id保持为主,并且将链接放在唯一链接上不会重复条目。这非常简单,因为我看到了其他人员为了摆脱重复而制作第二张临时表的帖子。这很容易! – user2025469 2013-04-07 17:16:04

0

您不需要主键就可以使其自动递增。这工作正常。

create table dude (
    id int auto_increment, 
    link varchar(255), 
    primary key (link), 
    unique key (id) 
); 

insert into dude values (null, "www.google.com"); 
insert into dude values (null, "www.stackoverflow.com"); 
insert into dude values (null, "www.google.com"); 

它可能不是最好的表的设计,但它回答你的问题。