外部キーを使用してデータを更新しますエントリ。などSQLiteのトリガ私は、ユーザーが新しいエントリとして前の行をコピーして、以前に頼っていたすべてのデータを変更します列を編集することができますsqliteはでトリガーを作成しようとしています
CREATE TABLE "Menu"
("ProductID" INTEGER PRIMARY KEY AUTOINCREMENT,
"Description" VARCHAR, "Code" VARCHAR, "Price_Pence" INTEGER)
CREATE TABLE "OrderItems"
("OrderItemsID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
"ProductID" INTEGER, "Quantity" INTEGER,
FOREIGN KEY(ProductID) REFERENCES Menu (ProductID))
メニューのデータを格納する:これらは、関連するテーブルです
OrderItemsID | ProductID | Quantity
------------------------------------
1 | 3 | 1
2 | 2 | 1
etc.
私は、価格を変更することができますどこにそれを持って期待していた。
ProductID | Description | Code | Price_Pence
----------------------------------------------
1 | Egg Salad | ESL | 200
2 | Ham Salad | HSL | 200
3 | Cheese Sandwich | CSD | 150
etc.
のOrderItems店のようなデータ例えば製品のもし私がチーズサンドイッチ= 200を望むなら、私はそれを更新することができます。もし私が以前の注文が間違った価格になってしまったら、メニューに新しい行を挿入して自動的に行に新しいProductIDを与えるトリガーを持たなければならないでしょう。この場合、それは次のようになります:
ProductID | Description | Code | Price_Pence
----------------------------------------------
1 | Egg Salad | ESL | 200
2 | Ham Salad | HSL | 200
3 | Cheese Sandwich | CSD | 200
4 | Cheese Sandwich | CSD | 150
これは、OrderItemsの以前のエントリを変更する必要があります。
OrderItemsID | ProductID | Quantity
------------------------------------
1 | 4 | 1
2 | 2 | 1
現在、私はこのトリガを持っている:
CREATE TRIGGER "menuArchive"
BEFORE UPDATE OF Price_Pence ON Menu
BEGIN
INSERT INTO Menu
(Description, Code, Price_Pence)
VALUES (old.Description, old.Code, old.Price_Pence)
;END
これは私が必要なメニューに新しいエントリを挿入します。しかし、注文ごとにproductIDを変更することなくOrderItemのProductIDを更新するには、私は最も良い方法を確信していません。
WHEREで行をフィルタリングできます。 –
@ CL。 私はどこで使用しようとしましたが、トリガーがBEFORE UPDATEトリガーであるため、OrderItemsテーブルに新しいProductIDを挿入する方法が不明でした。確かに新しいProductIDを見るためにAFTER INSERTなどを使用する必要がありますか? – TomRGarr
トリガは、更新する行の新しい値を既に知っています。 –