Mysql触发器从表中删除值并添加到另一个表中

时间:2016-05-23 03:06:16

标签: php mysql database database-design database-trigger

在MySQL db中需要触发器

有三个表,Orders,Executed,Completed。

'订单'带有orderid,stockname,价格,要购买的股票数量,日期

的表格
1, ball, 10, 100, 21/5/16

执行可以参考orderid,小批量订单。因此,当需要购买所需的股票时,可以在3个小型交易中说明,这些交易存储在'执行'表格以下详情

executionid,orderid,stockname,购买价格,没有购买的股票,日期

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

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

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

然后当订单完成时,我们需要将订单ID行从订单表转移到已完成的表,这看起来像

comepletedid,orderids,executionids,stockname,购买价格,没有购买的股票,日期

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

(订单号=执行没有相同的订单ID然后从订单表中删除并将其放入已完成的表中),以确保订单表只有挂单未完成的订单条目。

如何在db代码中为此编写此触发器 - 从订单表中删除值并将其插入竞争表中,当要购买的股票数量不等于购买的股票时。 ex对于需要购买的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`)
);

0 个答案:

没有答案