MySQL Увеличение значения до уникальности в одном запросе - PullRequest
0 голосов
/ 18 марта 2020

Есть ли способ увеличить значение, пока оно не станет уникальным в одном запросе MySQL?

Допустим, у вас есть таблица, в которой записана метка времени Unix в микротайме, и вы хотите вставить строку но вы можете увеличивать микротайм, пока он не станет уникальным. В одном запросе это возможно?

В псевдокоде что-то вроде (используя PHP):

INSERT INTO items (time) VALUES (WHILE((SELECT COUNT(*) WHERE time={$newValue})>0,time = time+0.000001));

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

1 Ответ

0 голосов
/ 18 марта 2020

Вот общая стратегия, которая сделает это:

  • Во-первых, убедитесь, что вы не используете microtime в качестве первичного ключа ... (это не относится к следующему - это просто хорошая практика)

Сейчас:

  1. BEGIN TRANSACTION (с подходящим уровнем изоляции)
  2. SELECT MAX(microtime) FROM .. ... чтобы найти наибольшее значение, которое сейчас хранится.
  3. INSERT ... с подходящим временем.
  4. COMMIT

Транзакции, при правильном использовании, будут чтобы шаги # 1-4 были atomi c. Вы можете выполнять шаги # 2 и # 3, зная, что никакой гонки не произойдет. В «шаге № 3» вы можете выполнить столько же операций, сколько и sh, и все из них произойдут одновременно. (Или, если вы вместо этого ROLLBACK, ни один из них не сделал.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...