MySQL - идентификатор "резервирование" перед вставкой - PullRequest
2 голосов
/ 23 апреля 2011

Мне нужно знать идентификатор (и зарезервировать его) для записи, которую я буду вставлять в базу данных, прежде чем вставить ее, потому что я добавляю продукт и загружаю также изображение для этого продукта, а местоположение изображения связано с продуктом.Я бы.

Я могу найти идентификатор, который будет следовать, но мне также нужно держать его "заблокированным", пока изображение продукта не будет загружено, чтобы быть уверенным, что этот идентификатор пока не используется другим пользователем.

Ответы [ 4 ]

4 голосов
/ 23 апреля 2011

Вы можете разделить это на две операции.

Сначала вы создаете все для продукта и получаете идентификатор.Во втором вы обновляете строку загруженным изображением, которое теперь можно сохранить, так как вы знаете идентификатор.

1 голос
/ 23 апреля 2011

вы можете сделать это как транзакцию

Я прогуглил «транзакцию php mysql», и есть много учебников о том, как это сделать

http://www.linuxdig.com/news_page/1079394922.php

0 голосов
/ 13 мая 2012

Мне нужно почти то же самое - кроме зависимости от каталога.

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

0 голосов
/ 23 апреля 2011

id резервирование может быть сделано только безопасно, если у вас есть собственная реализация автоинкремента.Даже при выполнении транзакции вы не можете точно знать, каким будет следующий идентификатор.Вы просто можете быть уверены, что у вас есть, когда вы запросили это.

Некоторые люди используют mysql_insert_id , чтобы получить последний вставленный идентификатор.Но я где-то имею в виду, что эта функция не является поточно-ориентированной, и вы, вероятно, получите идентификатор другого только что вставленного потока.

Однако в вашем случае мне на ум приходят только два варианта:

1) создайте собственный генератор последовательностей 2) вставьте свой datarow, выберите его снова со всеми значениями в предложении where и используйте этот идентификатор.Запустите вариант 2 в транзакции (как уже было предложено выше)

Я бы выбрал вариант 1. Генерация последовательности обычно используется со всеми другими базами данных (насколько мне известно, только из mysql поддерживает автоинкремент, насколько я знаю),Следовательно, последовательности вполне приемлемы.

Приветствия, Кристиан

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