我對我的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
。後來那一天,他將插入與數量10
。當日他將插入banana
與數量爲1
和,數量爲12
。
,明天他將做同樣的,與數量2
但日期18.01.2014
。這應該是因爲它的同一個產品一個新的行,但在不同的日期插入bananas
。
在這種情況下,我需要我的數據庫執行以下操作: 檢查banana
插在17.01.2014
。如果沒有,用數量0+4
插入。 如果香蕉已插入17.01.2014
更新數量4+1
。
第二天會檢查是否在18.01.2014
上插入了banana
,如果沒有,則插入數量爲2
,如果是,則更新數量。
所以:我不能有任何的專欄,因爲日期可以是相同的和banana
和相同的日期,當然,數量。
我該如何做到這一點? 我想到了幾個辦法,但它是不是很有效:
Select (product,date) from evolution where product=banana AND date=18.01.2014
如果返回任何東西的話,我會執行更新。 如果這不返回任何東西,然後我會執行一個插入。製作一列
product-date
這將是唯一的。其中我會插入例如banana 17.01.2014
。這會更容易,但我不喜歡這種方式,它的骯髒。
這一切都將是那麼容易,如果我可以做重複key.Try像一張雙人牀和插入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
)可以有重複由他們自己但不在一起。
對不起,很長的文章...我希望我不會錯過任何簡單和乾淨的方式做到這一點,但我只是可能,我當然希望如此,我是一個初學者在編程。 謝謝,祝你有個美好的夜晚!
在(產品,日期)上有一個唯一的密鑰!?!?! – Strawberry
似乎你是在對產品和日期進行獨特約束之後。可以在事實之後添加它,或者使其成爲create table語句的一部分。這樣做後,會看起來像這樣:'ALTER TABLE evolution ADD CONSTRAINT uc_product UNIQUE(product,date)' – Durandal