2014-02-21 4 views
0

У меня есть база данных, которую я открыл в phpMyAdmin. Я нажал кнопку «Вставить», в которой есть значок, показывающий, что одна строка вставлена ​​между двумя другими.Как вставить строки в phpMyAdmin

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

1062 - Дублировать запись «294» для ключа «PRIMARY»

Как получить PHPMYADMIN вставить строку (предположительно путем увеличения всех строк с более высоким номером на 1), поскольку подразумевается значок и термин «Вставка»? Кажется, кажется, что хочет «добавить» строку до конца, а не «Вставить» ее.

Как я уже сказал, значок показывает только одну строку, вставленную между двумя другими, и это то, что я хочу сделать. Как мне заставить его делать то, что он утверждает, что это будет делать?

+0

Зачем вам нужно вставлять между двумя рядами? И я предполагаю, что «между двумя строками» означает, что вы хотите вставить строку с определенным значением первичного ключа? Вы НЕ хотите использовать функцию автоматического увеличения? –

+0

Я предполагаю, что автоинкремент добавит строку в конец.Я хочу, чтобы текущая строка 294 стала 295, 295, чтобы стать 296 и т. Д., Вплоть до конца. Другими словами, используя phpMyAdmin, я хочу вставить строку так же, как и в электронную таблицу Excel, чтобы все строки с более высоким номером перемещались вниз. Значок выглядит так же, как и в Excel, но похоже, что он работает одинаково. – user3338049

+0

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

ответ

0

Во-первых, «INSERT» является стандартной терминологией SQL для размещения чего-либо в базе данных; это не означает, в частности, «перевод его между двумя существующими значениями». Я вижу, как значок может быть немного запутанным, но когда «вставлять» данные нет никакой разницы между помещением чего-либо в конце или в середине базы данных. В этом отношении нет реального неотъемлемого порядка для данных, хранящихся в базе данных; вы можете выбрать много разных способов сортировки при отображении данных (и phpMyAdmin обычно делает хорошую работу, предполагая, что разумно), но данные просто существуют. Вы можете выбрать сортировку по первичному ключу или в алфавитном порядке по имени пользователя или любым другим способом.

Во-вторых, ваш первичный ключ не должен меняться. Это ключ, который объединяет ваши данные; если вы начнете изменять то, что ваши ссылки из других таблиц будут испорчены (см. ниже). Так что не меняйте это.

В-третьих, если у вас есть первичный ключ с auto_increment (флажок A_I в phpMyAdmin), вам не нужно будет устанавливать его или беспокоиться об этом самостоятельно. Все это управляется MySQL. Если вас не устраивает заказ и вы хотите переместить 294 на 295, чтобы вы могли вставить что-то еще на этапе 294, тогда вам нужно настроить настройку базы данных, потому что это не так, как автоматически запускаются первичные ключи auto_incrementing. В качестве простого решения вы можете создать другое поле под названием «sort_value» или что-то, что вы можете изменить.

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

Как я уже говорил, изменение первичного ключа (независимо от того, произведено ли оно автоматически) - это плохая идея, но может быть неясно, почему, если у вас есть только одна таблица. Но реляционные базы данных разработаны таким образом, что вы можете ссылаться на таблицы из других таблиц, поэтому, например, база данных клиента может иметь таблицу для «клиентов», «продуктов» и «покупок», где таблица закупок ссылается на идентификатор первичного ключа от обоих клиентов и продукты ... представьте себе, что ваши данные будут подвергнуты резне, если вы измените значение этих ключей в таблице клиентов. Вы показываете клиентов, связанных с покупками других клиентов. Таким образом, это может не иметь смысла в вашей базе данных, но в целом это лучший способ справиться с ситуациями.

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

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