繁体   English   中英

MySQL表关系/外键?

[英]Mysql tables relationships / Foreign key?

我很难弄清楚如何在PHP / MySql项目中链接数据库行。 我的订单提交脚本当前将信息拆分并将其存储到2个表中。

第一个称为“订单”,其中包含:

$OrderId, $CustomerName, $CustomerEmail, $OrderTotal, $OrderTaxes
//and other infos about the ORDER

第二个称为“商品”,其中包含所有BOUGHT产品的信息:

$ProductId, $OrderedQty 
//for each one and such...

之所以必须这样,是因为“项目”表将由不同的“部门”搜索,这些“部门”将仅显示其负责的订单部分。 但他们所有人都必须获取“订单”信息以进行运输。

知道“ OrderId”列是在“ Orders”表本身上生成的主键,并且我的INSERT TO命令都同时执行,如何在两个表中链接“ Order Id”列?

我是否需要生成一些随机密钥来匹配它们?

如果我要使用外键,由于数据库是同时提交的,数据库将如何知道哪个产品按哪个订单进行?

还是在“订单”-> SELECT $ OrderID->在“项目”中插入INSERT的速度足够快?

通常如何做到这一点? 无法弄清楚这一点。

在此先感谢您的宝贵帮助!

购买产品信息应在购买产品表中有一个额外的列,称为orderid,以便您知道哪些产品属于哪个订单。 至于插入数据库,这取决于您用于执行查询的内容。 一些查询类允许您一次运行多个查询语句,如果是这种情况,则可以运行类似于以下内容的代码:

INSERT INTO Orders (OrderId, CustomerName, CustomerEmail, OrderTotal, OrderTaxes) Values(...)
SET @order_id = LAST_INSERT_ID();
INSERT INTO boughtItems (OrderId,ProductId,OrderedQty) Values (@order_id, :productid_1, :name_1),(@order_id, :productid_2, :name_2),(@order_id, :productid_3, :name_3) ....

在订单情况下,您将需要对订单运行insert语句,然后获取主键。 看一下这些链接:

在其他情况下,您可以使用允许您获取最后插入的ID的类。 此ID是受连接限制的,因此不会出现任何问题(只要插入有效,您就不会在一个查询中进行多次插入,回滚或其他奇怪的操作)。 在这种情况下,您将执行插入操作,然后调用辅助函数来获取插入的ID。 请参阅以下链接:

或者,您也可以执行2个查询。 首先是插入查询,然后是此查询:

SELECT LAST_INSERT_ID() as id;

其他相关链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM