откат транзакции на основе условия

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

Вот что происходит:

  • foreach ($ menuData as $ item => $ qty ) { if ( empty ($ qty ) || $ qty == '0' ) continue ; $ sqlArray [] = "INSERT INTO food_order (user_id, item_id, количество, order_type, updated_on, updated_by, created_by, created_on) VALUES ($ uid, $ item, $ qty, '$ menu_type', NOW (), $ uid, $ uid, NOW ()) " ; $ sqlArray [] = "UPDATE food_menu SET available_qty = IF ($ qty> = доступно_qty, available_qty - $ qty, available_qty) WHERE item_id = $ item AND type = '$ menu_type' AND DATE (updated_on) = CURRENT_DATE" ; } return ( boolean ) $ this- > db- > exec ($ sqlArray ); значение вычитается из значения ввода q пользователя и значение обновляется в таблице food_menu.
  • записи заказов пользователя вставляются в таблицу food_order.

Вот мой запрос:

$qty
  1. если available_qtyзначение больше available_qtyзначения поля, я хочу прервать всю серию транзакций $sqlArray[].

Могу ли я сделать это в самом запросе?

mysql,sql,transactions,

0

Ответов: 1


1 принят

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

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

MySQL, SQL, транзакции,
Похожие вопросы