Оператор «для обновления» блокирует строку в таблице счетчиков. Это позволяет избежать дубликатов, создаваемых несколькими потоками.
я есть база данных MySQL, которая содержит таблицу пользователей. Первичным ключом таблицы является «идентификатор пользователя», который устанавливается как поле с автоматическим приращением.
Что я хотел бы сделать, так это когда я вставляю нового пользователя в таблицу, чтобы использовать то же значение, которое автоматическое увеличение создает в поле 'userid' в другом поле 'default_assignment'.
например
Я хотел бы заявление, как это:
INSERT INTO users ('username','default_assignment') VALUES ('barry', value_of_auto_increment_field())
поэтому я создаю пользователя «Барри», «идентификатор пользователя» генерируется как 16 (например), но я также хочу, чтобы «default_assignment» имел то же значение 16.
Есть ли способ достичь этого, пожалуйста?
Спасибо!
Обновить:
Спасибо за ответы. Поле default_assignment не является избыточным. Параметр default_assigment может ссылаться на любого пользователя в таблице пользователей. При создании пользователя у меня уже есть форма, которая позволяет выбрать другого пользователя в качестве default_assignment, однако есть случаи, когда его необходимо установить для того же пользователя, поэтому мой вопрос.
Обновить:
Хорошо, я опробовал предложение триггеров обновления, но все еще не могу заставить это работать. Вот триггер, который я создал:
CREATE TRIGGER default_assignment_self BEFORE INSERT ON `users`
FOR EACH ROW BEGIN
SET NEW.default_assignment = NEW.userid;
END;
Однако при вставке нового пользователя default_assignment всегда устанавливается в 0.
Если я вручную установлю ID пользователя, тогда default_assignment будет установлен на ID пользователя.
Следовательно, процесс генерации автоматического назначения явно происходит после того, как срабатывает триггер.