Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql触发器从一个表中删除值并添加到另一个表中_Php_Mysql_Database_Database Design_Database Trigger - Fatal编程技术网

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

Php Mysql触发器从一个表中删除值并添加到另一个表中,php,mysql,database,database-design,database-trigger,Php,Mysql,Database,Database Design,Database Trigger,MySQL数据库中需要触发器吗 有三个表,订单,已执行,已完成 “订单”表,包含订单ID、股票名称、价格、要购买的股票数量、日期 1, ball, 10, 100, 21/5/16 1,1,ball, 10, 25, 21/5/16 2,1,ball, 10, 25, 22/5/16 3,1,ball, 10, 50, 23/5/16 1,1,1,ball, 10, 25, 21/5/16 2,1,2,ball, 10, 25, 22/5/16 3,1,3,ball, 10, 50,

MySQL数据库中需要触发器吗

有三个表,订单,已执行,已完成

“订单”表,包含订单ID、股票名称、价格、要购买的股票数量、日期

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

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

3,1,ball, 10, 50, 23/5/16
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
执行可以参照orderid,以小批量的订单进行。因此,当购买所需数量的股票时,比如说在3个小交易中,这些交易存储在“已执行”表中,该表包含以下详细信息

executionid、orderid、stockname、购买价格、购买的股票数量、日期

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

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

3,1,ball, 10, 50, 23/5/16
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行从订单表转移到完成表,如下所示

ComepleteId、OrderId、ExecutionId、stockname、购买价格、购买的股票数量、日期

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

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

3,1,ball, 10, 50, 23/5/16
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代码中为此编写此触发器-当要购买的库存数量等于已购买的库存数量时,从orders表中删除值并将其插入Competite表中。例如,对于需要购买的100只股票,在购买的50只股票的水平上,我希望针对50只股票更新交易表,在订单表中,所需数量减少到50只,然后当订单=已执行时,从订单表中删除数据

我对订单中的订单状态列有一个想法,但放弃了这个想法,因为订单表几乎每秒都会被查询执行情况,从长远来看,让订单表只针对未执行的待处理订单更好

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`)
);

您的意思是当订购的股票数量等于购买的股票数量时,哪里是要购买的股票数量,哪里是您在db中购买的股票数量。。!您需要保存这两个值,以便可以相互比较,如果它们相等,则可以在“已完成订单”表中插入项目。。!您可以首先使用order_id从订单中获取行,然后使用order_id从执行中获取行,然后匹配项目,如果返回相同的项目,则可以从订单中删除行并将其插入到completed中。为什么要使用多个表而不是使用一个表
orders
,并插入一个新列,即
order_status
并添加不同的值,这些值将用于挂起、完成和失败等@UmairShahYousafzai已在上文中澄清,订单表中为待采购库存数量,已执行表中为在建库存数量。需要100,购买25+25+50。我曾想过订单状态,但放弃了这个想法,因为订单表几乎每秒都会被查询执行情况,从长远来看,只有待处理订单未执行订单才有订单表更好。您的意思是,当订购的库存数量等于购买的库存数量时……?哪里是要购买的库存数量,哪里是您在db中购买的库存数量。。!您需要保存这两个值,以便可以相互比较,如果它们相等,则可以在“已完成订单”表中插入项目。。!您可以首先使用order_id从订单中获取行,然后使用order_id从执行中获取行,然后匹配项目,如果返回相同的项目,则可以从订单中删除行并将其插入到completed中。为什么要使用多个表而不是使用一个表
orders
,并插入一个新列,即
order_status
并添加不同的值,这些值将用于挂起、完成和失败等@UmairShahYousafzai已在上文中澄清,订单表中为待采购库存数量,已执行表中为在建库存数量。需要100,购买25+25+50。我曾想过订单状态,但放弃了这个想法,因为几乎每秒都会查询订单表以获取执行情况,从长远来看,让订单表仅用于未执行的待定订单更好