2013-04-07 3 views
1

Я много читал о том, почему это плохая идея, но вот почему я хочу это сделать. Я хочу, чтобы мой стол выглядел так:создать столбец автоматического увеличения, который не является первичным ключом

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

И так далее. В резоне, почему я не хочу, чтобы мой идентификатор был основным ключом, потому что я хочу, чтобы мой LINK был основным ключом ... таким образом, когда я запускаю работу Cron для получения большего количества данных, у меня не будет дубликатов полей в моем Таблица. Я могу использовать INSERT IGNORE, и он не будет включать те же ссылки дважды. Но я все еще хочу, чтобы id автоматически увеличивался, поэтому я могу использовать «бесконечную прокрутку», используя идентификаторы.

Это можно сделать? Я действительно надеюсь, потому что я думаю, что это - хорошая причина, чтобы иметь это ...

+2

Честно говоря, я все равно сделаю 'id' основным ключом и сделаю' link' альтернативным ключ: http://en.wikipedia.org/wiki/Alternate_key#Alternate_key – NPE

+0

Я бы просто пометил ссылку как уникальный, и он не будет дублировать мои записи? – user2025469

ответ

1

Вы не можете автоматически увеличивать текстовое поле.

Также, если вы не хотите, чтобы Id был вашим ключом, почему вы хотите идентификатор? Похоже, что вам нужно изменить способ запуска вашего хрон, а не ваша схема

-

Если вы все еще хотите знать, как создать поле AI:

link_id int NOT NULL AUTO_INCREMENT 

И для имеющиеся данные:

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

Я написал, что хочу, чтобы идентификатор с автоматическим добавлением мог запускать бесконечный прокрутки, например кнопку «загрузить больше». Я все еще хочу, чтобы id был int, и поэтому он автоматически указывал – user2025469

+0

. Тогда ID действительно кажется все, что вам нужно, и у вас есть уникальное ограничение по ссылке? Если вы ожидаете много строк с URL-адресами, где меняются только частичные изменения, я бы также рассмотрел возможность просто сохранить измененную часть, а не www. и т. д., чтобы сохранить размер базы данных dowm. –

+0

Да, я думаю, что у меня это получилось. Сохранение идентификатора как первичного и размещение уникальной ссылки не дублирует записи. Это здорово и просто, потому что я видел другие записи, где люди делали второстепенные временные таблицы, чтобы избавиться от дубликатов. Это намного проще! – user2025469

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"); 

Возможно, это не лучший дизайн стола, но он отвечает на ваш вопрос.

Смежные вопросы