-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path18_trigger_my.sql
More file actions
90 lines (76 loc) · 1.76 KB
/
Copy path18_trigger_my.sql
File metadata and controls
90 lines (76 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
-- 메뉴 추가 시 update 자동화 trigger 만들기
DELIMITER //
CREATE OR REPLACE TRIGGER after_order_menu_insert
AFTER INSERT
ON tbl_order_menu
FOR EACH ROW
BEGIN
UPDATE tbl_order
SET total_order_price = total_order_price + NEW.order_amount * (SELECT menu_price FROM tbl_menu WHERE menu_code = NEW.menu_code)
WHERE order_code = NEW.order_code;
END//
DELIMITER ;
SHOW TRIGGERS;
DROP TRIGGER after_order_menu_insert;
-- 주문 테이블(tbl_order)에 insert 후 주문 메뉴 테이블(tbl_order_menu)에 주문한 메뉴마다
-- insert 후 주문 테이블에 총 금액이 업데이트 되는지 확인
-- 주문 테이블 INSERT
INSERT
INTO tbl_order
(
order_code
, order_date
, order_time
, total_order_price
)
VALUES
(
NULL
, CONCAT(CAST(YEAR(NOW()) AS VARCHAR(4))
, CAST(LPAD(MONTH(NOW()), 2, 0) AS VARCHAR(2))
, CAST(LPAD(DAY(NOW()), 2, 0) AS VARCHAR(2)))
, CONCAT(CAST(LPAD(HOUR(NOW()), 2, 0) AS VARCHAR(2))
, CAST(LPAD(MINUTE(NOW()), 2, 0) AS VARCHAR(2))
, CAST(LPAD(SECOND(NOW()), 2, 0) AS VARCHAR(2)))
, 0
);
SELECT * FROM tbl_order; -- 주문 확인
-- 주문 메뉴 테이블 INSERT 1
INSERT
INTO tbl_order_menu
(
order_code
, menu_code
, order_amount
)
VALUES
(
1
, 3
, 2
);
SELECT * FROM tbl_order; -- 주문 확인
-- 주문 메뉴 테이블 INSERT 2
INSERT
INTO tbl_order_menu
(
order_code
, menu_code
, order_amount
)
VALUES
(
1
, 6
, 3
);
SELECT * FROM tbl_order;
SELECT * FROM tbl_order_menu;
-- 다시 되돌려 테스트 해보고자 할 경우
-- 1) rollback하기
ROLLBACK;
-- 2) 기존 데이터 지우기
DELETE FROM tbl_order_menu WHERE 1 = 1;
DELETE FROM tbl_order WHERE 1 = 1;
-- 이후 AUTO_INCREMENT도 다시 초기화 해 준다.
ALTER TABLE tbl_order AUTO_INCREMENT = 1;