Ищу пример процедуры, которая использует row_count

0

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

Я попытался вложить выражения IF на основе строки, но даже при сбое данных во второй вставке данные все еще вставлены в первую таблицу. Я ищу общее количество 2 затронутых строк.

Может кто-нибудь, пожалуйста, покажите мне, как обращаться с несколькими вставками и откатом, если один из них не работает? Короткий пример будет приятным.

Теги:

2 ответа

0

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

SET autocommit = 0; START TRANSACTION ......

0

Если вы используете таблицы InnoDB (или другой совместимый движок), вы можете использовать функцию Transaction MySQL, которая позволяет вам точно выполнять что вы хотите.

  • В основном вы начинаете транзакцию
  • выполняют проверки запросов для результата
  • Если каждый результат в порядке, вы вызываете CONMIT
  • иначе вы вызываете ROLLBACK, чтобы аннулировать все запросы в транзакции.

Вы можете прочитать и статью с примерами здесь.

НТН!

  • 0
    Я должен был упомянуть об этом в своем посте, но я сделал предположение, что все будут знать, что я уже использую транзакции. Проблема в том, что row_count возвращает 1 для первой вставки, а я предполагаю -1 для второй. Даже при том, что транзакция началась, данные все еще вставляются в первую таблицу, когда вторая вставка завершается неудачно. Я уже тестирую затронутые строки, которые должны равняться 2. Если нет отката, то еще коммит
  • 0
    А использование транзакций с таблицами innoDB не откатывает ли первый запрос?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню