Почему я не могу вставить тот же идентификатор в столбец «id» моей таблицы MySQL? - PullRequest
1 голос
/ 09 ноября 2011

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

Моя проблема в том, что когда я пытаюсь ответить на сообщение, я получаю эту ошибку:

Дублирующая запись '98' для ключа 1

Это выглядиткак будто это не позволяет мне использовать один и тот же идентификатор в столбце, но у меня нет уникальной вещи, установленной в таблице AFAIK.

Я также пытался сбросить ПЕРВИЧНЫЙ для столбца id, но получил эту ошибку:

enter image description here

Сообщение:

# 1075 - Неверное определение таблицы;может быть только один автоматический столбец, и он должен быть определен как ключ

Я не понимаю, почему он не позволит мне вставить тот же идентификатор в столбец id, потому что, как вызнаю, что мне нужен идентификатор для каждого разговора.

mysql_query, который я использую для вставки ответа в таблицу:

$sql = "INSERT INTO messages (id, message_id, to_user, message, subject, from_user, date, time, date_short) 
 VALUES ('$id', '$message_id', '$to', '$message', '$subject', '$user', '$date', '$time', '$date_short')";

mysql_query($sql) or die(mysql_error());

Заранее спасибо!

Ответы [ 6 ]

1 голос
/ 09 ноября 2011

Во-первых, снимите отметку с опции AUTO_INCREMENT в вашем столбце и в качестве второго шага попробуйте снова удалить индекс

1 голос
/ 09 ноября 2011

Ваш первичный ключ не может быть повторен, иначе он не так полезен, как ключ, не так ли? Первичный ключ должен однозначно идентифицировать запись.

Причина, по которой вы получаете сообщение об ошибке, заключается в том, что для столбца задан автоматический номер. Вы не добавили этот столбец в отдельный ключ, что является обязательным требованием для столбцов автоматического нумерации в MySQL.

Сначала добавьте его в ключ / индекс с этим столбцом, затем удалите атрибут PK. Убедитесь, что у вас есть ПК в таблице.

1 голос
/ 09 ноября 2011

Я подозреваю, что у вас есть AUTO_INCREMENT настройка в вашем id поле.В этом случае значения в столбце id должны быть уникальными.

Либо удалите атрибут AUTO_INCREMENT для этого столбца (переопределив столбец без AUTO_INCREMENT с помощью команды ALTER TABLE), или не указывайте значение id в своем выражении INSERT.

1 голос
/ 09 ноября 2011

Вы не можете иметь авто_инкремент без ключа

0 голосов
/ 09 ноября 2011

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

0 голосов
/ 09 ноября 2011

PRIMARY KEY s также уникальны. Столбцы auto_increment должны быть первичными ключами. Вы не можете удалить PRIMARY KEY из столбца, не сделав его не auto_increment.

Однако я не думаю, что вам следует менять стол так. Вы должны сохранить свои идентификаторы и либо создать новую таблицу с данными, которые необходимо обновить, либо использовать UPDATE вместо INSERT.

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