Переназначение значений таблицы PK случайным образом - PullRequest
1 голос
/ 01 июня 2009

Какой самый простой способ выполнить следующее в MySQL 5.1?

У меня есть таблица с первичным ключом в качестве целого числа, в настоящее время работающая от 1 до 220. PK запускается последовательно в зависимости от порядка, в котором строки были записаны в таблицу.

Я хочу иметь возможность случайным образом переназначить это значение первичного ключа, чтобы, например, строка 1 (с PK на данный момент равным 1) стала 19 (например), строка 2 стала 142 (например), строка 3 становится 99 (например) и т. д. и т. д., так что все числа от 1 до 220 будут переназначены на ПК.

Есть ли простой способ сделать это?

Спасибо, Тим

Ответы [ 4 ]

2 голосов
/ 01 июня 2009

Нет простого способа сделать это полностью в SQL. (Скорее всего, есть сложный способ, который не стоит того.) Я рекомендую вам сделать это обязанностью логики уровня приложения.

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

1 голос
/ 14 июня 2009

Спасибо за ваши ответы. Тем не менее, я нашел ответ на пост, который делает именно то, что мне нужно. Это здесь:

Запрос MySQL для присвоения уникального случайного числа каждой строке

0 голосов
/ 01 июня 2009

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

0 голосов
/ 01 июня 2009

Обновите поле первичного ключа с помощью функции Rand . Чтобы получить целое число, вам нужно умножить его на 100, 1000 и т. Д. (В зависимости от того, насколько большое число вы хотите), а затем усечь оставшееся десятичное число.

Ваш сценарий, который, я бы предположил, вы написали для этого, должен был гарантировать, что дублированный номер не был сгенерирован и, следовательно, была предпринята неудачная попытка обновления. Я бы сделал это через цикл, из-за того, как работает Рэнд, не мог бы работать один оператор обновления. (По крайней мере, для других СУБД)

Для нас важно знать причину, по которой вы это делаете? Причина может изменить мой ответ ...

...