Java 关于基于两列的重复键
我的java应用程序有点问题,要么我知道的不够多,要么简单来说这是不可能的。我希望这是第一个选择,因为我是初学者 这是我的桌子:Java 关于基于两列的重复键,java,mysql,sql,Java,Mysql,Sql,我的java应用程序有点问题,要么我知道的不够多,要么简单来说这是不可能的。我希望这是第一个选择,因为我是初学者 这是我的桌子: CREATE TABLE IF NOT EXISTS `evolution` ( `id` int(11) NOT NULL AUTO_INCREMENT, `product` varchar(50) NOT NULL, `quantity` double NOT NULL, `date` date NOT NULL, `operator` varchar(
CREATE TABLE IF NOT EXISTS `evolution` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product` varchar(50) NOT NULL,
`quantity` double NOT NULL,
`date` date NOT NULL,
`operator` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
)
我想按日期跟踪一些产品的销售情况
我想实现的是:假设操作员今天进入,17.01.2014
产品香蕉
数量4
。当天晚些时候,他将插入苹果
数量10
。当天他将插入香蕉
数量1
和苹果
数量12
明天他也会这样做,插入数量为2的香蕉,但日期为2014年1月18日。这应该是新的一行,因为它是相同的产品,但日期不同
在这种情况下,我需要数据库执行以下操作:
检查是否在2014年1月17日插入了香蕉。
如果香蕉已于2014年1月17日插入,则更新数量4+1
第二天,它将检查是否在2014年1月18日插入了香蕉。如果不是,则插入数量2
。如果是,则更新数量
所以:我不能让任何一列是唯一的,因为苹果和香蕉的日期可以相同,当然还有数量
我怎样才能做到这一点?
我考虑了几种方法,但效率不高:
从evolution中选择(产品、日期),其中产品=香蕉,日期=2014年1月18日
如果返回任何内容,那么我将执行更新。
如果这没有返回任何内容,那么我将执行插入
创建一列将是唯一的产品日期
。例如,我将在其中插入banana 17.01.2014
。这会更容易,但我不喜欢这种方式,因为它很脏
如果我可以做一些类似于重复键上的双精度键的操作,那么所有这些都将非常容易。尝试插入香蕉和日期
。然后,如果组合已经存在,请进行更新
为使其更简短、更易于理解:
这是有效的:
+-------+----------+
|product|date |
+-------+----------+
|banana |17.01.2014|
+-------+----------+
|banana |18.01.2014|
+-------+----------+
|apples |17.01.2014|
+-------+----------+
|apples |18.01.2014|
+-------+----------+
这是无效的:
+-------+----------+
|product|date |
+-------+----------+
|banana |17.01.2014|
+-------+----------+
|banana |17.01 2014|
+-------+----------+
|banana |18.01.2014|
+-------+----------+
|banana |18.01.2014|
+-------+----------+
因此,它们(产品
和日期
)可以自己复制,但不能一起复制
很抱歉发了这么长的帖子…我希望我没有错过任何简单明了的方法,但我可能会,我当然希望如此,我是一个编程初学者。
谢谢,祝你晚安 听起来您需要产品和日期的复合键
PRIMARY KEY (product, date)
复合主键本质上是一种使用多个键确定事物唯一性的方法。例如,如果您有一家商店只销售蓝色或红色的锤子和钉子,您无法在db中识别锤子或蓝色,您必须同时使用这两种颜色
tool | color | quantity
hammer blue 4
hammer red 3
nail blue 1
nail red 6
你在这里的主键是工具和颜色 在(产品、日期)上有唯一的键!?!?!看起来你在追求产品和日期的独特约束。可以在事实之后添加,也可以将其作为CREATETABLE语句的一部分。之后再这样做会像这样:ALTER TABLE evolution ADD CONSTRAINT uc_product UNIQUE(product,date)
我不知道,关于复合键,我必须研究并回到这里:d是id&date还是product&date?@MagicMan很好。产品。这个问题我读得不够好,看不到那根香蕉我想,因为他把他的PK标记为id,这就是香蕉。谢谢你btwYes,这正是我需要的,抱歉浪费你的时间问这么一个愚蠢的问题…学习的限制…非常感谢,Brad!哦,是的,当然,我不小心按下了向上的投票,我认为我也接受了,我的错。再次感谢你,抱歉浪费了你两次时间,呵呵。