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

Форум MySQL

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

 

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

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

тема: Блокировка?

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

 
 автор: cheops   (10.09.2005 в 00:36)   письмо автору
 
   для: Евгений Петров   (09.09.2005 в 21:17)
 

Ну да не изменится... так и не нужно чтобы это значение изменялось, так как оно предназначено для организации связи между таблицами, т.е. если вы вставили значение с AUTO_INCREMENT вы можете его узнать для того, чтобы поместить это значение в качестве вторичного ключа в другую таблицу. Если значение будет "плыть" никакой связи не получится. Так ведь больше и надобности нет - число записей всегда можно узнать при помощи функции count() - ей и следует пользоваться и ничем другим, а новые значения AUTO_INCREMENT - это внутреннее дело базы данных.

   
 
 автор: Loki   (09.09.2005 в 22:17)   письмо автору
 
   для: Евгений Петров   (09.09.2005 в 21:17)
 

Более того, last_insert_id относится не просто к текущему скрипту, но и к текущему запросу. То есть если выполнить еще какой-то запрос после добавления записи, то last_insert_id уже не вернет значение (читал об этом - сам не пробовал:)

   
 
 автор: Евгений Петров   (09.09.2005 в 21:17)   письмо автору
 
   для: cheops   (09.09.2005 в 19:59)
 

Ну вот например вставляется запись в таблицу а потом где то извлекается значение mysql_insert_id(). Так вот если в промежутке времени между запросом и вызовом mysql_insert_id() кто нибудь занесет в б.д. еще одно значение, то изменится ли id или нет. Я лично думаю что нет, т.к. опытным путем проверил, что id возвращается именно тот который был сгенерирован последним запросом а ТЕКУЩЕМ скрипте, а не вообще запросом к б.д.

   
 
 автор: cheops   (09.09.2005 в 19:59)   письмо автору
 
   для: Евгений Петров   (09.09.2005 в 16:54)
 

Хм... А в смысле не успеет?

   
 
 автор: Евгений Петров   (09.09.2005 в 16:54)   письмо автору
 
   для: cheops   (09.09.2005 в 01:30)
 

Т.е. если кто то успеет добавить что нибудь в БД то last_insert_id будет другим?

   
 
 автор: cheops   (09.09.2005 в 01:30)   письмо автору
 
   для: Настя   (08.09.2005 в 23:41)
 

Не очень понятно в чём проблема last_insert_id () - возвращает счётчик таблицы, операция вставки атомарна, поэтому никаких сбоев не должно быть, если значение last_insert_id используется после, то следует прибегать либо к блокировке таблицы при помощи LOCK TABLES, либо к транзакциям. К сожалению, транзакции в MyISAM не доступны и необходимо использовать InnoDB, которая в несколько раз медленнее таблицы MyISAM.

   
 
 автор: Евгений Петров   (09.09.2005 в 00:24)   письмо автору
 
   для: Евгений Петров   (09.09.2005 в 00:16)
 

Хотя нет все правильно ч только что проверил.
Запустил скрипт:

<?
  mysql_query
("INSERT INTO tbl(text) VALUES('Строка')");
  
sleep(10);
  echo 
mysql_insert_id();
?>

И за те 10 секунд которые скрипт спит занес в таблицу ещё одну запись и сркипт выдал мне именно тот id который был сгенерирован именно этим скриптом. Т.е. все должно работать проблема (если она есть) не в этом.

   
 
 автор: Настя   (09.09.2005 в 00:22)
 
   для: Евгений Петров   (09.09.2005 в 00:16)
 

Потому что в моем случае без разницы, что max(), что last_id()
Считай, я его использую, после того, как загружаю строку в таблицу fanfics, чтобы получить $ficid

   
 
 автор: Евгений Петров   (09.09.2005 в 00:16)   письмо автору
 
   для: Настя   (08.09.2005 в 23:41)
 

В том коде что ты привела last_insert_id() нигде не вызывается. Где она используется?

   
 
 автор: Настя   (08.09.2005 в 23:41)
 
   для: Евгений Петров   (08.09.2005 в 23:15)
 

>Вообще фиг его знает, я прочитал мануал по MySQL так там
>вроде написано, что данные сохраняются на сервере т.е.
>last_insert_id() возвращает id последнего запроса к таблице
>вообще. Хотя если это так, то я тогда не понимаю смысл этой
>функции. Толку с неё...

Действительно?..

Может, кто-то еще знает? Ау? Просто если эта функция относится к таблице, а не к пользователю, то моя проблема остается - то, что пользователь может пролучить чужой id (тот, котрый уже прошел следом за его).

   

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

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

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