2015-09-21 3 views
0

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

Таким образом, данные

  1. Джеймсе
  2. JHON
  3. патрик

и так далее

И я хочу, чтобы вставить строку во втором ряду

  1. Джеймсе
  2. подветренной
  3. Джон
  4. патрик

Как я могу это сделать?

Должен ли я обновлять все строки после «lee» и изменять идентификатор?

Есть ли более простой способ сохранить заказ?

Спасибо. Я много узнаю здесь

+0

является основным ключом 'id' column' AutoIncrement' – wiretext

+1

Это ужасный дизайн базы данных. Вы можете SELECT row_number() over (order by name) - вместо этого и сохранить идентификатор по мере того, как данные были вставлены. Изменение первичных ключей, подобных этому, никогда не должно происходить. Представьте, что у вас есть внешние ключи, указывающие на ваш первичный ключ, и их тоже нужно будет изменить. –

+0

Я могу выполнить идентификацию AutoIncrement. Это поможет? –

ответ

1

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

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

+0

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

+0

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

+0

Итак, если я правильно понимаю - я использую действительный номер в столбце «index», и когда я вставляю свою строку, я выбираю строку before и row after и фиксирую индекс между двумя числами. это обычный способ? –

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