Скажем, у меня есть две таблицы, пользователи и группы, каждая из которых имеет автоматически увеличивающий первичный ключ. Всякий раз, когда создается новый пользователь, я хотел бы создать группу вместе с этим пользователем (в то же время/одну транзакцию). Тем не менее, пользователи должны знать, к какой группе они принадлежат, поэтому каждый пользователь хранит group_id.Идентификатор автоинкремента резервации Внутри транзакции
Для этого я создаю и вставляю группу в базу данных, выясняю, что первичный ключ этой группы, которую я только что вставил, и, наконец, вставлял пользователя с первичным ключом этой новой группы.
Отметьте, что мне нужно зафиксировать группу в базе данных (таким образом, она за пределами любой транзакции с фиксацией пользователя), чтобы получить первичный ключ, который был назначен.
Хотя это будет работать в большинстве ситуаций, если есть какие-то сбои (сбой питания, системный сбой и т. Д.) Между тем, когда я вставляю группу и узнаю ее первичный ключ, а когда я вставляю пользователя, я закончится несогласованной базой данных.
Есть ли способ сделать что-то вроде резервирования первичного ключа временно, так что если система выйдет из строя, она не окажется в несогласованном состоянии?
Я в основном занимаюсь базами данных MySQL, но если в стандартном SQL есть что-то, что позволит мне это сделать (и, следовательно, совместимо с другими базами данных), я также заинтересован в том, чтобы это знать.
Я должен был уточнить: мне нужно передать группу в базу данных, чтобы узнать, каков ее первичный ключ. Затем я могу зафиксировать пользователя с идентификатором группы. Это мешает мне объединить два в одной транзакции. –
это печально. можете ли вы перейти на реальный rdbms или вы застряли? – 2009-03-06 21:40:00