Как вы останавливаете условия гонки в MySQL? проблема в руке вызвана простым алгоритмом:mysql insert race состояние
- выбрать строку из таблицы
- , если он не существует, вставить его
и затем либо вы получите дубликат строки, или если вы предотвратите это с помощью уникальных/первичных ключей, ошибка.
Теперь, как правило, я думаю, что здесь помогают транзакции, но поскольку строка не существует, транзакция фактически не помогает (или я что-то не хватает?).
LOCK TABLE звучит как перебор, особенно если таблица обновляется несколько раз в секунду.
Единственное другое решение, о котором я могу думать, это GET_LOCK() для каждого другого идентификатора, но нет ли лучшего способа? Здесь нет проблем с масштабируемостью? А также, делая это для каждой таблицы, звучит немного неестественно, так как это звучит как очень распространенная проблема в барах с высоким уровнем параллелизма для меня.
Идите с INSERT IGNORE. Триггеры вызывают слишком много накладных расходов, они не стоят этого, если бизнес-логика не является сложной. – captainspi 2013-06-08 21:30:03
Что не так с помощью `INSERT`-ing с уникальным ограничением и ловушками ошибок, чтобы сказать« хорошо, запись уже существует ».? – KeatsKelleher 2014-05-22 14:03:11