MySQL唯一索引和NULL值

时间:2017-03-27 21:05:54

标签: mysql

这是整天困扰我的大脑的窘境。

Amazon Orders API由ListOrdersListOrderItems组成。

ListOrders提供AmazonOrderId,然后在ListOrderItems中用作输入,以提供有关订单的其他信息。

问题是AmazonOrderId不是唯一标识符。这排除了向此列添加UNIQUE KEY

实际唯一标识符为OrderItemIdListOrderItemsAmazonOrderId一起检索。

现在我为UNIQUE INDEXAmazonOrderId设置了OrderItemId

. . . .
UNIQUE KEY `unique_orders_index` (`AmazonOrderId`,`OrderItemId`)

问题是,当我从AmazonOrderId输入ListOrders行时,我需要AmazonOrderId充当UNIQUE KEY,并在插入时导致重复的错误消息

如果在AmazonOrderId中双重传递,则允许重复ListOrders行。

此时,我的唯一标识符OrderItemIdNULL(因为尚未从ListOrderItems检索到它。

只有在使用特定ListOrderItems致电AmazonOrderId时才会知道同一OrderItemId中是否有多个订单(或AmazonOrderId),然后有条件地添加如果是这种情况,则需要额外的重复AmazonOrderId

我有什么方法可以解决此问题,以确保只有AmazonOrderId时才会插入一个唯一的OrderItemId行值(因为它必须位于ListOrders {{1} } / call)INSERT

1 个答案:

答案 0 :(得分:0)

AmazonOrderId可能是唯一的 - 按订单 - 但不在订单商品列表中。存储信息的常规方法是两个表,一个用于订单,另一个用于订单项。后者会有一个订单表的外键。

然后您将获得并将订单存储在其表中。之后,您检索订单商品并将其存储在表格中。

如果您认为必须将信息存储在单个表中,则将orderitemid默认为不会是值的值,例如-1或0.如果要插入订单项ID,只需检查该特殊值并进行更新而不是插入。