MySQL: транзакция? вставить и обновить - PullRequest
0 голосов
/ 17 апреля 2011

Мне нужно сделать 2 запроса.

В основном это

mysql_query("INSERT INTO table ($value1,$value2)");

и

mysql_query("UPDATE table2 SET field1 = '$value1', field2 = '$value2'");

Я думаю, что я могу просто сделать

if (mysql_query("INSERT ...") !== false) {
   mysql_query("UPDATE ...");
}

В этом случае я должен использоватьсделка?И как мне его использовать?
Или я могу оставить все так просто, если?

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Обычно вы будете использовать транзакции, если вам нужно поведение "все или ничего".

В основном с транзакциями вы можете:

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


При работе с функцией mysql_* вам необходимо:

  • Начните транзакцию с START TRANSACTION запроса
  • Ваши вопросы
  • В зависимости от результата этих запросов выполните запрос COMMIT или ROLLBACK.

Чтобы определить, был ли запрос успешным или нет, вы действительно можете проверить возвращаемое значение mysql_query(): в случае ошибки он вернет false.

Примечание: MySQL является старым расширением и не имеет функций для работы с транзакциями; Это означает, что вы должны обращаться с ними как с обычными запросами.


Работая с MySQLi , вы можете использовать:

1 голос
/ 03 мая 2012

Для вставки и обновления у MySQL есть хорошее альтернативное решение - «ON DUPLICATE KEY UPDATE».Он выполняет то, что вы хотите безопасно в одном запросе:

INSERT .... ON DUPLICATE KEY UPDATE

(также ключ должен быть установлен как уникальный в этом сценарии)

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

...