사용자가 이전 행을 새 항목으로 복사하고 이전 항목에 의존하는 데이터를 변경할 열을 편집 할 수있는 트리거를 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 원이라면 그걸 업데이트 할 수 있어요. 만약 이전 주문에 잘못된 가격이 적용 되었다면 Menu에 새 행을 삽입하여 새 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의 이전 항목을 변경해야합니다.
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
이 내가 필요한 메뉴에 새 항목을 삽입합니다
OrderItemsID | ProductID | Quantity
------------------------------------
1 | 4 | 1
2 | 2 | 1
현재 나는이 트리거를 가지고있다. 그러나 모든 주문에 대해 productID를 변경하지 않고 OrderItem의 ProductID를 업데이트하는 가장 좋은 방법은 확실치 않습니다.
행을 WHERE로 필터링 할 수 있습니다. –
@CL. 그러나 어디에서 사용하려고했는지, 트리거가 BEFORE UPDATE 트리거이므로 OrderItems 테이블에 새 ProductID를 삽입하는 방법이 확실하지 않았습니다. 확실하게 새로운 ProductID를보기 위해 AFTER INSERT 또는 뭔가를 사용해야 할 것입니다. – TomRGarr
트리거는 업데이트 할 행의 새 값을 이미 알고 있습니다. –