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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: добавление новой записи с помощью транзакции
 
 автор: esboy   (03.04.2010 в 15:44)   письмо автору
 
 

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

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

1) INSERT ...
2) SELECT ID (извлекаем ключ добавленного)
3) INSERT ... (в зависимую от 1 таблицу добавляем остальную часть информации)

правильно ли это ?
транзакция в таких случаях будут в хранимых процедурах ?

было бы хорошо, если есть какая нибудь справка по таким действиям, с реальными примерами

  Ответить  
 
 автор: Trianon   (03.04.2010 в 17:25)   письмо автору
 
   для: esboy   (03.04.2010 в 15:44)
 

Если Вам нужно кровь из носу не допустить существования уже добавленной записи в первой таблице но еще недобавленной записи во второй таблице - тогда да, транзакции.

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

  Ответить  
 
 автор: ESBoy   (03.04.2010 в 17:35)   письмо автору
 
   для: Trianon   (03.04.2010 в 17:25)
 

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

  Ответить  
 
 автор: Trianon   (03.04.2010 в 17:47)   письмо автору
 
   для: ESBoy   (03.04.2010 в 17:35)
 

необязательно, хотя и возможно.
Ничто не мешает выполнить mysql_query("START TRAN") и mysql_query("COMMIT")

  Ответить  
 
 автор: ESBoy   (03.04.2010 в 19:11)   письмо автору
 
   для: Trianon   (03.04.2010 в 17:47)
 

спасибо.
а еще предложения будут , программисты ???

  Ответить  
 
 автор: ESBoy   (04.04.2010 в 13:30)   письмо автору
 
   для: ESBoy   (03.04.2010 в 19:11)
 

неужели тут нету продвинутых программистов ???

  Ответить  
 
 автор: cheops   (04.04.2010 в 15:16)   письмо автору
 
   для: ESBoy   (03.04.2010 в 19:11)
 

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

  Ответить  
 
 автор: ESBoy   (04.04.2010 в 15:27)   письмо автору
 
   для: cheops   (04.04.2010 в 15:16)
 

о, наконец то cheops появился. Здравствуй
автовключения не будет.
насчет innoDB знаю.
то есть получается у меня 2 варианта :
первый
старт транзакция
инзерт
селект
инзерт
коммит

и второй
все это в хранимой процудуре, (хотя инзерт потом селект , потом обратно инзерт, врядли возможно одной процедурой, потому что в одну сторону 2 обращения не бывает , ну это не важно, не будем на это обращать внимания)

больше вариантов нет ?

  Ответить  
 
 автор: cheops   (05.04.2010 в 11:10)   письмо автору
 
   для: ESBoy   (04.04.2010 в 15:27)
 

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

  Ответить  
Rambler's Top100
вверх

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