Триггер Mysql для удаления значений из таблицы и добавления в другую

Нужен триггер в БД MySQL

Есть три таблицы: Заказы, Выполнено, Завершено.

Таблица «Заказы» с указанием ордера, наименования акций, цены, количества закупаемых акций, даты

1, ball, 10, 100, 21/5/16

выполнение может происходить со ссылкой на orderid, небольшими партиями заказов. Таким образом, когда необходимое количество акций не будет куплено, скажем, в 3 небольших транзакциях, которые хранятся в «выполненной» таблице, которые следующие детали

executeid, orderid, наименование акции, цена покупки, количество купленных акций, дата

1,1,ball, 10, 25, 21/5/16

2,1,ball, 10, 25, 22/5/16

3,1,ball, 10, 50, 23/5/16

затем, когда заказы завершены, нам нужно перенести строку идентификатора заказа из таблицы заказов в таблицу «Завершено», которая будет выглядеть следующим образом

comepletedid, orderids, executeids, имя акции, цена покупки, количество акций не куплено, дата

1,1,1,ball, 10, 25, 21/5/16

2,1,2,ball, 10, 25, 22/5/16

3,1,3,ball, 10, 50, 23/5/16

(№ заказа = выполнено нет с тем же идентификатором заказа, затем удалите из таблицы заказов и поместите его в завершенную таблицу), чтобы убедиться, что в таблице заказов есть только отложенные заказы, а не выполненные записи заказов.

Как записать этот триггер в коде БД для этого — удалить значения из таблицы заказов и вставить их в конкурирующую таблицу, когда количество приобретаемых акций не равно количеству приобретенных акций. Например, для 100 акций, необходимых для покупки, на уровне 50 купленных акций я хочу, чтобы таблица транзакций была обновлена ​​для 50 акций, а в таблице заказов требуемое количество уменьшено до 50, а затем, когда заказы = выполнены, затем удалите данные из таблицы заказов. ,

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

CREATE TABLE `stocks` (
`stockid` int(11) NOT NULL AUTO_INCREMENT,
`stockname` varchar(255) NOT NULL,
`stockprice` varchar(255) NOT NULL,
`availablequantity` varchar(255) NOT NULL,
PRIMARY KEY (`stockid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `stocks` (`stockid`, `stockname`, `latestassetprice`, `availablequantity`) VALUES
(1, 'ball', '10', '2000');CREATE TABLE `order` (
`orderid` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`stockname` varchar(255) NOT NULL,
`stockprice` varchar(255) NOT NULL,
`stockquantity` varchar(255) NOT NULL,
`orderdate` varchar(255) NOT NULL,
PRIMARY KEY (`orderid`)
);

INSERT INTO `order` (`orderid`, `stockname`, `stockprice`, `stockquantity`, `orderdate`) VALUES
(1, 'ball', '10', '100', '23-1-16');

CREATE TABLE `executed` (
`execid` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`orderid` INTEGER NOT NULL,
`stockname` varchar(255) NOT NULL,
`stockexecprice` varchar(255) NOT NULL,
`stockexecutedquantity` varchar(255) NOT NULL,
`transactiondate` varchar(255) NOT NULL,
PRIMARY KEY (`execid`)
);

INSERT INTO `executed` (`execid`, `orderid`, `stockname`, `stockexecprice`, `stockexecutedquantity`, `transactiondate`) VALUES
(1, 1, 'ball',  '10', '25', '21-5-16'),
(2, 1, 'ball',  '10', '25', '22-5-16'),
(3, 1, 'ball',  '10', '50', '23-5-16');CREATE TABLE `completed` (
`compid` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`orderid` INTEGER NOT NULL,
`execid` INTEGER NOT NULL,
`stockname` varchar(255) NOT NULL,
`stockquantity` varchar(255) NOT NULL,
`stockprice` varchar(255) NOT NULL,
`orderdate` varchar(255) NOT NULL,
`stockexecprice` varchar(255) NOT NULL,
`stockexecutedquantity` varchar(255) NOT NULL,
`transactiondate` varchar(255) NOT NULL,
PRIMARY KEY (`transid`)
);

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …