#php #mysql #primary-key #auto-increment
#php #mysql #primary-key #автоинкремент
Вопрос:
Я хочу, чтобы идентификатор и имя были первичным ключом для моей таблицы. Я хочу увеличивать идентификатор с каждой вставкой, поэтому я установил для него значение auto_increment. Проблема в том, что когда я вставляю в таблицу новую запись с тем же именем, она вставляет ее с новым идентификатором, и появляются повторяющиеся записи с тем же именем и разными идентификаторами. Я не хочу заранее искать таблицу, чтобы увидеть, есть ли какая-либо запись заранее. Пожалуйста, помогите мне, как исправить эту проблему.
Ответ №1:
Я думаю, вы сделали что-то вроде этого
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)
Комментарии:
1. спасибо за совет… Не знал об этом .. Об этом тоже позаботимся.. Еще раз спасибо..
Ответ №2:
Если вы хотите, чтобы он был уникальным по имени, вам нужно добавить уникальный индекс в поле name, а затем вы можете использовать синтаксис mysql для on duplicate key: ссылка mysql для on duplicate key
Ответ №3:
Вы могли бы применить уникальный индекс к своему полю имени или, если вы сохраняете людей, разрешить дублирование имен.
Ответ №4:
Добавьте UNIQUE( your_column_name
), который вы должны заменить your_column_name
на столбец в вашей базе данных.
Комментарии:
1. Это сработает, но оператору также необходимо изменить определение первичного ключа, если он хочет, чтобы его запросы не были медленными.