Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ваши id для новых элементов.

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: Vyacheslav Tsv.   (16.02.2011 в 20:36)   письмо автору
 
   для: cheops   (16.02.2011 в 20:33)
 

Ваши слова меня успокоили. Благодарю, Игopь Вячecлaвoвич.

  Ответить  
 
 автор: cheops   (16.02.2011 в 20:33)   письмо автору
 
   для: Vyacheslav Tsv.   (16.02.2011 в 20:29)
 

>точно ли mysql_insert_id возвратит мне последний созданный id или могут быть проблемы при
>большом количестве запросов одновременно?
Точно. Дело в том, что mysql_insert_id() возвращает только тот номер, который был вставлен в рамках текущей сессии, т.е. между INSERT-запросом и вызовом mysql_insert_id() может успеть вставиться еще пяток запросов, но вам будет возвращен номер того, который вставлялся именно вашим запросом.

  Ответить  
 
 автор: Vyacheslav Tsv.   (16.02.2011 в 20:29)   письмо автору
 
   для: cheops   (16.02.2011 в 20:26)
 

Верно, уже несколько лет как )

Появился правда ещё один вопрос, я им сам задался щас, когда решил сменить некоторые запросы к базе данных с учётом нововведений и сразу же столкнулся с такой проблемой: раньше-то я заранее знал, какой id будет записан, потому как сначала генерировал его, а уж потом использовал. Сейчас же получится наоборот. Я сначала его запишу, а потом мне нужно узнать какой он. Я так понял мне поможет mysql_insert_id, но вот загвоздка — точно ли mysql_insert_id возвратит мне последний созданный id или могут быть проблемы при большом количестве запросов одновременно?

  Ответить  
 
 автор: cheops   (16.02.2011 в 20:26)   письмо автору
 
   для: neadekvat   (16.02.2011 в 20:23)
 

Вячеслав выше сообщал, что на базу данных он перешел, только механизм AUTO_INCREMENT до сих пор предпочитал не использовать.

  Ответить  
 
 автор: neadekvat   (16.02.2011 в 20:23)   письмо автору
 
   для: Vyacheslav Tsv.   (16.02.2011 в 19:56)
 

То ли еще будет.
Переход с файлов на базу данных открывает колоссальные возможности.

  Ответить  
 
 автор: Vyacheslav Tsv.   (16.02.2011 в 19:56)   письмо автору
 
   для: Vyacheslav Tsv.   (16.02.2011 в 14:03)
 

Всех благодарствую.

Я привык к файлам, и потому использовал именно их. Создал функцию, для простого назначения нового id, но новый вариант действительно упрощает жизнь. Что ж, перейду тогда на него. Я немного его потестировал и мне понравился результат.

Спасибо.

  Ответить  
 
 автор: Владимир55   (16.02.2011 в 16:49)   письмо автору
 
   для: Trianon   (16.02.2011 в 16:39)
 

Совершенно с Вами согласен.

  Ответить  
 
 автор: Trianon   (16.02.2011 в 16:39)   письмо автору
 
   для: Владимир55   (16.02.2011 в 15:42)
 

>Разрешение у сервера более одной микросекунды, так что, как мне кажется, совпадение технически невозможно.
>Разве не так?

С одной стороны, даже если совпадение невозможно сейчас, нет гарантии, что это не случится в будущем.
С другой, для хранения точного времени в достаточно длинном интервале потребуется поле большей разрядности.
Поиск по такому полю потребует более толстого ингдекса и проходить будет медленее.

Кроме того, использование секвенции позволяет определять факт удаления строк, выявлять смежные записи, хоть это и не прямое её назначение.
И главное, от очереди запросов все равно никуда не уйти.

Вот и получается, что выгоды от применения времени в качестве ключа - никакой.
А потери есть.

С другой стороны, применение механизма AUTO_INCREMENT в качестве суррогатного первичного ключа никто не навязывает. Если Вы хотите применять метку времени (или еще что-то) - Вы вполне можете так поступить.
Вот только будет ли профит...

  Ответить  
 
 автор: Trianon   (16.02.2011 в 16:26)   письмо автору
 
   для: Vyacheslav Tsv.   (16.02.2011 в 14:37)
 

> И он будет увеличивать каждый раз число, даже если последняя запись была удалена?

Именно так.
Механизм ориентируется не на последнюю имеющуюся запись, а на последнее выданное число.
Его, конечно, тоже можно поменять - явным запросом.
Но это будет означать, что администратор сам желает изменить последовательность выдачи.
Более того, поменять его на число меньше, чем уже имеющийся первичный ключ в таблице, ему просто не дадут.

  Ответить  
 
 автор: cheops   (16.02.2011 в 16:04)   письмо автору
 
   для: Владимир55   (16.02.2011 в 15:42)
 

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

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования