автоинкремент как первичный ключ, вызывающий повторяющиеся записи - PullRequest
1 голос
/ 26 мая 2011

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

Ответы [ 4 ]

2 голосов
/ 26 мая 2011

Я думаю, что вы сделали что-то вроде этого

CREATE TABLE table1
   id unsigned integer autoincrement,
   name varchar,
   ....
   primary key (id,name)

Этот первичный ключ не выбирается по уникальному имени, поскольку идентификатор автоинкремента всегда делает ключ в целом уникальным, даже с дубликатами name -полей.

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

Измените это на

CREATE TABLE table1
   id unsigned integer autoincrement primary key,
   name varchar,
   ....
   unique index `name`(name)
2 голосов
/ 26 мая 2011

Если вы хотите, чтобы он был уникальным по имени, вам нужно добавить уникальный индекс в поле имени, а затем вы можете использовать синтаксис mysql для дублирующего ключа: ссылка mysql для дублирующего ключа

0 голосов
/ 26 мая 2011

Добавьте UNIQUE (your_column_name), где вы должны заменить your_column_name на столбец в вашей базе данных.

0 голосов
/ 26 мая 2011

Вы можете применить уникальный индекс к своему полю имени или, если вы храните людей, разрешить повторяющиеся имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...