обновить столбец через триггер mysql

Есть 3 таблицы, задача обновить в таблице wallet столбец total, после того как будут добавлены значения в таблицу orders_tank_shop. Конкретнее надо вычесть из значения total столбец price из таблицы tank_shop.

p.s Чтобы добавить в таблицу orders_tank_shop значения order_id, оно соответственно должно быть добавлено и в таблицу orders, а только потом можно добавить заказ в orders_tank_shop.

Триггер срабатывает только 1 раз, и после insert в следующий раз ничего не меняется, но без триггера сам запрос работает.

DROP TABLE IF EXISTS tank_shop;
CREATE TABLE tank_shop(
    id SERIAL PRIMARY KEY,
    technics_id BIGINT unsigned COMMENT 'id танка',
    ttc_id BIGINT unsigned COMMENT 'внешний ключ тактико технических характеристик',
    price BIGINT(11) COMMENT 'Цена');
   
LOCK TABLES `tank_shop` WRITE;
INSERT INTO `tank_shop`(technics_id, ttc_id, price) VALUES 
(4, 2, 2300);
UNLOCK TABLES; 

DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  account_id BIGINT unsigned COMMENT 'аккаунт', 
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата создания заказа',
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Текущая дата',
  -- FOREIGN KEY (account_id) REFERENCES accounts(id) ON UPDATE CASCADE ON DELETE CASCADE
) COMMENT = 'Заказы';

LOCK TABLES `orders` WRITE;
INSERT INTO `orders`(account_id) VALUES 
(1),
(2),
(4);
UNLOCK TABLES;

DROP TABLE IF EXISTS orders_tank_shop;
CREATE TABLE orders_tank_shop(
  id SERIAL PRIMARY KEY,
  order_id BIGINT unsigned COMMENT 'id заказа внешний ключ',
  tank_shop_id BIGINT unsigned COMMENT 'id товара в магазине',
  UNIQUE INDEX idx_order_tnk_shop(order_id, tank_shop_id),
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата создания заказа',
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Текущая дата',
  FOREIGN KEY (tank_shop_id) references tank_shop(id),
  FOREIGN KEY (order_id) references orders(id)
) COMMENT = 'Состав заказа';
    
LOCK TABLES `orders_tank_shop` WRITE;
INSERT INTO `orders_tank_shop`(order_id, tank_shop_id) VALUES 
(1, 1),
(2, 1),
(3, 1);
UNLOCK TABLES;

DROP TABLE IF EXISTS wallet;
CREATE TABLE wallet(
account_id BIGINT UNSIGNED NOT NULL UNIQUE ,
total decimal(11,4) COMMENT 'всего д/с',
-- FOREIGN KEY (account_id) REFERENCES accounts(id) ON UPDATE CASCADE ON DELETE cascade);
   
LOCK TABLES `wallet` WRITE;
INSERT INTO `wallet`(account_id, total) VALUES 
(1, 4500),
(2, 6000),
(4, 7000),
(3, 5000),
(5, 10000),
(7, 20000);
UNLOCK TABLES; ```


-- ТРИГГЕР

DELIMITER //
CREATE TRIGGER total_wallet
after insert on orders_tank_shop
FOR each row
begin
    update wallet 
    set total = total - (select price from tank_shop)
    where account_id in (select account_id from orders where id = last_insert_id());
end//
DELIMITER ; 

Ответы (0 шт):