Столбец, который автоматически увеличивается в MYSQL

0

Мне нужно создать столбец, который автоматически увеличивается с 1- (однако количество строк есть). Тем не менее, мне нужен столбец для изменения порядка в зависимости от столбца "Порядок моей вероятности". Возможно ли это?

  • 0
    Отредактируйте свой вопрос и предоставьте образцы данных и желаемых результатов.
  • 0
    Может быть, триггер AFTER INSERT мог бы добиться цели ...
Показать ещё 3 комментария
Теги:
database

2 ответа

0
Лучший ответ

Обычно я рекомендую не применять такой порядок расчета как явное поле таблицы. Сохранение такой информации в актуальном состоянии будет создавать все больше и больше накладных расходов, поскольку таблица растет. Вместо этого вы можете просто ЗАКАЗАТЬ по столбцу вероятности; или если вам действительно нужен "ранг" в результатах запроса, есть несколько способов сделать это, что-то вроде этого должно работать:

SELECT @seq := seq + 1, d.*
FROM theRealData AS d, (SELECT @seq := 0) AS init
ORDER BY theRealData.probability
;

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

CREATE PROCEDURE theProc (newID INT)
BEGIN
   DECLARE newProb INT; //Not sure if it is int, but for the sake of example
   DECLARE seqAt INT;
   SET newProb = SELECT probability FROM theTable WHERE ID = newID;
   SET seqAt = SELECT IFNULL(min(seq), 1) FROM theTable WHERE probability > newProb;
   UPDATE theTable SET seq = seq + 1 WHERE seq >= seqAt;
   UPDATE theTable SET seq = seqAt WHERE ID = newID;
END

Если вы передадите все вставленные поля, а не только новый идентификатор строки после его вставки, то процедура может сама выполнить вставку и использовать last_insert_id() для выполнения остальной части работы.

  • 0
    Вы знаете другой путь? Это не работает для меня. Для типа таблицы, которую я делаю, я собираюсь вставить еще одну строку в таблицу и ранжировать эти данные по сравнению с данными, уже имеющимися в таблице.
  • 0
    Одиночные (предположительно нечастые) вставки могут снизить производительность; Вы можете создать хранимую процедуру для обновления порядка. Он может быть вызван после вставки, или вы можете использовать его для вставки И переупорядочения.
0

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

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

В качестве альтернативы, поскольку @Uueerdo говорит, что вы можете просто использовать ORDER BY при запросе строк таблицы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню