Столбец активного флага с одновременными обновлениямиMySql

Форум по Mysql
Ответить
Anonymous
 Столбец активного флага с одновременными обновлениями

Сообщение Anonymous »

Итак, я имею дело с проектом, в котором у нас есть объекты, имеющие имя, и хотя несколько объектов могут иметь одно и то же имя, только один из этих объектов может быть активным одновременно. Поэтому для каждого обновления/вставки, если новый/обновленный объект имеет active = TRUE, все остальные записи с этим именем должны иметь active = FALSE.
My проблема в том, что если две вставки происходят одновременно, то, по-видимому, бывают случаи, когда две записи оказываются активными = TRUE с одним и тем же именем, я думаю, потому что, когда база данных проверяется на наличие записей с этим именем, для установки значения false , ни одна из строк отсутствует, поэтому программа заключает, что обе записи могут иметь active = TRUE, несмотря на одно и то же имя.
Чтобы привести пример в псевдокоде:

Код: Выделить всё

CREATE TABLE entity (
id INT(11),
name VARCHAR(50),
active bit(1)
);
когда я получаю новую запись с именем «имя», я
ВЫБРАЮ id FROM объект WHERE name = «name» AND active = TRUE;
I получить идентификатор этого объекта, назовем его, затем я обновлю эту запись

Код: Выделить всё

UPDATE entity SET active=FALSE WHERE id=
Затем я вставляю новую запись

Код: Выделить всё

INSERT INTO entity (id,active) VALUES ('name',TRUE)
Насколько я могу судить, эта настройка не может работать, если я каким-то образом не заблокирую всю таблицу для каждой вставки/обновления, чтобы предотвратить одновременные обновления.
Альтернатива, о которой я думаю, — это не активный столбец, а вторая таблица, например

Код: Выделить всё

CREATE TABLE active_entity (
name VARCHAR(50),
active_record INT(11)
);
где active_record — это внешний ключ, идущий к таблице сущностей, и когда мне нужны активные записи, просто выполняйте соединение через них. Есть ли способ избежать этого?
Для справки: я использую mysql 8.0, но мне интересно, как это будет работать с другими базами данных

Подробнее здесь: https://stackoverflow.com/questions/793 ... nt-updates
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»