【发布时间】:2014-02-06 03:23:25
【问题描述】:
我的 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(50) NOT NULL,
PRIMARY KEY (`id`)
)
我想按日期跟踪某些产品的销售情况。
我想要实现的是:假设操作员今天输入17.01.2014 产品banana,数量为4。那天晚些时候,他将插入apples,数量为10 .同一天他将插入数量为1的banana和数量为12的apples。
明天他也会这样做,插入bananas,数量为2,但日期为18.01.2014。这应该是新的一行,因为它是同一产品,但日期不同。
在这种情况下,我需要我的数据库执行以下操作:
检查banana是否插入17.01.2014。如果没有,插入数量0+4。
如果香蕉已经插入17.01.2014,则更新数量4+1。
第二天它会检查banana是否被插入到18.01.2014。如果没有,插入数量2。如果是,更新数量。
所以:我不能有任何唯一的列,因为apples 和banana 的日期可以相同,日期和数量也可以相同。
我怎样才能做到这一点? 我想了几种方法,但效率不高:
Select (product,date) from evolution where product=banana AND date=18.01.2014如果这返回任何内容,那么我将执行更新。 如果这没有返回任何内容,那么我将执行插入。创建一个唯一的列
product-date。我将在其中插入例如banana 17.01.2014。这会更容易,但我不喜欢这种方式,它很脏。
如果我可以在重复键上执行双重操作,这一切都会变得如此简单。尝试插入 banana and date。然后,如果组合已经存在,请进行更新。
为了让它更短更容易理解:
这是有效的:
+-------+----------+
|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|
+-------+----------+
所以他们(product 和 date)可以自己重复但不能在一起。
很抱歉这篇长文...我希望我不会错过任何简单而干净的方法,但我可能会而且我当然希望如此,我是编程的初学者。 谢谢,晚安!
【问题讨论】:
-
在(产品、日期)上有一个唯一的密钥!?!?!
-
似乎您正在追求产品和日期的独特限制。可以在事后添加它或使其成为 create table 语句的一部分。之后执行此操作将如下所示:
ALTER TABLE evolution ADD CONSTRAINT uc_product UNIQUE (product,date)