|
|
|
| хочу услышать мнение людей , которые создавали и создают базы данных для фирм, организаций, чьи базы , прошли обкатку в реальности.
пишу базу.
необходимо выполнить добавление новой записи в несколько таблиц.
как я понимаю, это транзакции.
пока предварительно получается так: будет
1) INSERT ...
2) SELECT ID (извлекаем ключ добавленного)
3) INSERT ... (в зависимую от 1 таблицу добавляем остальную часть информации)
правильно ли это ?
транзакция в таких случаях будут в хранимых процедурах ?
было бы хорошо, если есть какая нибудь справка по таким действиям, с реальными примерами | |
|
|
|
|
|
|
|
для: esboy
(03.04.2010 в 15:44)
| | Если Вам нужно кровь из носу не допустить существования уже добавленной записи в первой таблице но еще недобавленной записи во второй таблице - тогда да, транзакции.
Если же Ваша проблема лишь в том, чтобы во вторую таблицу был помещен номер строки из первой таблицы именно этого сеанса, то она вполне решается средствами mysql_insert_id() или LAST_INSERT_ID() - что удобнее. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2010 в 17:25)
| | да , я это знаю.
хотелось бы услышать все таки насчет реализации транзакций.
его что , поместить в хранимую процедуру ???
и как к ним обращаться с интерфейса | |
|
|
|
|
|
|
|
для: ESBoy
(03.04.2010 в 17:35)
| | необязательно, хотя и возможно.
Ничто не мешает выполнить mysql_query("START TRAN") и mysql_query("COMMIT") | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2010 в 17:47)
| | спасибо.
а еще предложения будут , программисты ??? | |
|
|
|
|
|
|
|
для: ESBoy
(03.04.2010 в 19:11)
| | неужели тут нету продвинутых программистов ??? | |
|
|
|
|
|
|
|
для: ESBoy
(03.04.2010 в 19:11)
| | Способов организации транзакций не так много. Ну можно ещё включить автотранзакцию в my.ini, но это не очень хорошая идея... Кроме того, при использовании транзакции следует помнить, что они полноценно реализованы только в движке InnoDB. | |
|
|
|
|
|
|
|
для: cheops
(04.04.2010 в 15:16)
| | о, наконец то cheops появился. Здравствуй
автовключения не будет.
насчет innoDB знаю.
то есть получается у меня 2 варианта :
первый
старт транзакция
инзерт
селект
инзерт
коммит
|
и второй
все это в хранимой процудуре, (хотя инзерт потом селект , потом обратно инзерт, врядли возможно одной процедурой, потому что в одну сторону 2 обращения не бывает , ну это не важно, не будем на это обращать внимания)
больше вариантов нет ? | |
|
|
|
|
|
|
|
для: ESBoy
(04.04.2010 в 15:27)
| | Даже в хранимой процедуре, все-равно придется транзакции стартовать - здесь это лишь способо организации кода, сами по себе хранимые процедуры не атомизируют операции. | |
|
|
|