私は自分の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
彼が挿入されます、その日.Laterapples
量で10
【選択同じ日には、彼が挿入されますbanana
量と1
し、apples
数量で12
。
明日、彼は同じことを行い、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
)は、単独では重複できますが、一緒にはできません。
長い投稿で申し訳ありません...私はこれを行うための簡単でクリーンな方法を見逃していないことを願っていますが、私はプログラミングの初心者です。ありがとう、おやすみなさい!
製品と日付に複合キーが必要なようです。
PRIMARY KEY (product, date)
複合主キーは、基本的に、複数のキーを使用してモノの一意性を判断する方法です。たとえば、青または赤のハンマーと釘のみを販売している店舗がある場合、データベース内でハンマーまたは青として識別できなかったため、両方を使用する必要があります
tool | color | quantity
hammer blue 4
hammer red 3
nail blue 1
nail red 6
ここでのPKはツールと色になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加