|
автор: Super (21.11.2006 в 23:31) |
|
| Задался практическим вопросом. Есть PHP-процедура, которая выполняет логически законченную функцию и обновляет связанные таблицы в базе данных. Эта функция запускает транзакцию, чтобы гарантированно обновить все что нужно. А что произойдет, если будет вызов функции из какой-то точки, где транзакция уже запущена? Получится транзакция в транзакции. Как MySQL обработает их? Таблицы у меня InnoDB / MySQL версии 4.1 | |
|
|
|
|
|
|
|
для: Super
(21.11.2006 в 23:31)
| | Обычно одна транзакция не выполняется, пока не выполниться другая. Если одна из траназакция будет противоречить другой - изменения производимой одной из транзакций не запишутся в базу данных. Т.е. одна транзакция сработает, а другая нет. | |
|
|
|
|
автор: Super (22.11.2006 в 00:30) |
|
|
для: cheops
(22.11.2006 в 00:17)
| | >Обычно одна транзакция не выполняется, пока не выполниться другая.
Хм... Это как? Вот например, тут и update1 и update2 выполнятся:
START TRANSACTION
update1 ....
START TRANSACTION
update2 .....
COMMIT
COMMIT
? | |
|
|
|
|
|
|
|
для: Super
(22.11.2006 в 00:30)
| | Второй START TRANSACTION автоматически завершает первую транзакцию. Вот список операторов, вызов которых имеет тот же эффект, что и вызов COMMIT
ALTER TABLE
BEGIN
CREATE INDEX
CREATE TABLE
CREATE DATABASE
DROP DATABASE
DROP INDEX
DROP TABLE
DROP DATABASE
LOAD MASTER DATA
LOCK TABLES
RENAME
SET AUTOCOMMIT=1
START TRANSACTION
TRUNCATE TABLE
|
| |
|
|
|
|
автор: Super (22.11.2006 в 03:23) |
|
|
для: cheops
(22.11.2006 в 01:04)
| | О! Спасибо, то что нужно.. Так получается MySQL вообще не поддерживает под-транзакции? Даже MySQL 5-й версии? | |
|
|
|
|
|
|
|
для: Super
(22.11.2006 в 03:23)
| | От чего же подерживает, но не для всех типов таблиц, транзакции поддерживаются в InnoDB, BDB, однако таблицы типа MyISAM не поддерживают транзакции. | |
|
|
|
|
автор: Super (22.11.2006 в 20:40) |
|
|
для: cheops
(22.11.2006 в 12:58)
| | Ну я не имел ввиду транзакции вообще. Я имел ввиду вложенные транзакции (видел разные названия "вложенные транзакции", "подтранзакции"). Когда в транзакцию можно вложить транзакцию, можно ее откатить ее, не затронув главную. | |
|
|
|