Почему я не могу вставить тот же идентификатор в столбец ‘id’ моей таблицы MySQL?

#php #mysql #phpmyadmin

#php #mysql #phpmyadmin

Вопрос:

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

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

Дублируйте запись ’98’ для ключа 1

Похоже, что это не позволяет мне использовать тот же идентификатор в столбце, но у меня нет «уникального» значения, установленного в таблице AFAIK.

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

введите описание изображения здесь

Сообщение:

#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());
  

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

Комментарии:

1. Пожалуйста, сбросьте описание вашей таблицы и опубликуйте

2. УНИКАЛЬНЫЙ Да, это ваш ответ… Решение в том, чтобы создать conversation_id…

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

Ответ №1:

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

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

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

Ответ №2:

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

Ответ №3:

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

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

Комментарии:

1. Да, я просто собираюсь создать еще один столбец, conversation_id как предложил webarto в комментариях, и использовать текущий id столбец для уникального идентификатора сообщения.

Ответ №4:

Сначала снимите AUTO_INCREMENT флажок с вашего столбца и в качестве второго шага попробуйте снова удалить индекс

Комментарии:

1. Спасибо, я просто создам другой столбец conversation_id вместо этого, как предложил webarto в комментариях. Текущим id будет уникальный идентификатор сообщения.

Ответ №5:

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

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

Комментарии:

1. Я не могу использовать UPDATE , потому что когда вы отправляете ответ… что бы это обновило?

Ответ №6:

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

Комментарии:

1. Он хочет удалить первичный ключ, он не пытается его добавить