gpt4 book ai didi

MySQL UNIQUE 键不工作

转载 作者:可可西里 更新时间:2023-11-01 06:41:06 27 4
gpt4 key购买 nike

我在库存表上构建 as 类型,通过 6 个不同的因素跟踪库存。我使用的 I 查询很像这个查询:

INSERT INTO inventory ( productid, factor1, factor2, factor3, factor4, factor5, factor6, quantity, serial_number)
VALUES (242332,1,1,1,'V67',3.30,'NEW',10,NULL)
ON DUPLICATE KEY UPDATE `quantity` = VALUES(`quantity`) + quantity;

inventory 表有一个唯一键(productid, factor1, factor2, factor3, factor4, factor5, factor6, serial_number)。出于某种原因,它没有获取 key ,只是 INSERTing 而不是 UPDATEing。谁能解释为什么?我错过了什么?

这是建表语句:

CREATE TABLE `inventory` (
`stockid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`productid` int(11) unsigned NOT NULL,
`factor1` int(11) unsigned NOT NULL,
`factor2` int(11) unsigned NOT NULL,
`factor3` int(11) unsigned NOT NULL,
`factor4` varchar(8) NOT NULL,
`factor5` decimal(10,2) NOT NULL,
`factor6` enum('A','B','C','D','NEW') NOT NULL,
`quantity` int(11) NOT NULL,
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`serial_number` varchar(11) DEFAULT NULL,
PRIMARY KEY (`stockid`),
UNIQUE KEY `serial_number` (`serial_number`),
UNIQUE KEY `productid_2` (`productid`,`factor1`,`factor2`,`factor3`,`factor4`,`factor5`,`factor6`,`serial_number`),
KEY `productid` (`productid`),
KEY `factor1` (`factor1`),
KEY `factor2` (`factor2`),
KEY `factor3` (`factor3`),
CONSTRAINT `books_stock_ibfk_2` FOREIGN KEY (`productid`) REFERENCES `produx_products` (`productid`),
CONSTRAINT `books_stock_ibfk_5` FOREIGN KEY (`factor1`) REFERENCES `table_factor1` (`factorid`),
CONSTRAINT `books_stock_ibfk_6` FOREIGN KEY (`factor2`) REFERENCES `table_factor2` (`factorid`),
CONSTRAINT `books_stock_ibfk_7` FOREIGN KEY (`factor3`) REFERENCES `table_factor3` (`factorid`)
)
ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=latin1

更深入:

此表的目的是保存库存数量。我认为这很简单。区分这些数量的因素如下:

  • factor1 = storeid(拥有此数量的商店的唯一标识符)。

  • factor2 = supplierid(我们从中获取数量的供应商的唯一标识符)

  • factor3 = warehouseid(所在仓库的唯一标识)

  • factor4 = locationid(位置的唯一字符串。它实际绘制在架子上)

  • factor5 = 成本(我们为每个数量支付的费用)

  • factor6 = condition (enum ['NEW','USED','RENTAL','PREORDER']。前三个很简单,第四个是我们订购的数量,想卖,但还没有还没收到。)

我知道这是一个沉重的 key ,但我不得不保持这种状态。我有很多建议将成本或条件移至产品表。我不能做到这一点。成本并不总是相同的,因为我们从拍卖或其他成本和条件非常可变的地方购买了很多东西。

我希望这有助于更多地解释我正在尝试做的事情。

最佳答案

Mysql 允许在唯一约束中使用多个 NULL。在您的 serial_number 列中将 NULL 替换为一个值并触发约束,请参阅:

http://sqlfiddle.com/#!2/9dbd19/1

a UNIQUE index permits multiple NULL values for columns that can contain NULL

Docs

使列 NOT NULL 并使用空的 ''

关于MySQL UNIQUE 键不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156301/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com