Нужен триггер в БД 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`)
);
Задача ещё не решена.
Других решений пока нет …