-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0730.sql
132 lines (92 loc) · 2.25 KB
/
0730.sql
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
VIEW - 보안과 빠른 속도를 위해 쓰인다
PROCEDURE - 리턴 없는 함수
FUNCTION - 리턴 o
Author: N
Date : 2024-07-30
Objective: VIEW
Environment : Windows10, MySQL Workbench 8.0.38, MySQL 8.0.63
view
OR REPLACE
*/
/* VIEW */
CREATE VIEW aaa
AS
SELECT empno, ename, job
FROM emp
WHERE deptno=10;
SELECT *
FROM aaa;
/* JOIN 된 VIEW가 만들어졌다 */
CREATE VIEW bbb
AS
SELECT empno, ename, dname, loc
FROM emp JOIN dept ON (emp.deptno = dept.deptno)
WHERE dept.deptno = 30;
SELECT * FROM bbb;
/* view 만들면서 컬럼 이름 바꾸기 */
CREATE OR REPLACE VIEW EMP21(ENO, NAME, PAYROLL)
AS
SELECT empno, ename, sal
FROM emp
WHERE deptno =20;
/* 바뀐 컬럼명으로 나타나는 걸 확인할 수 있다 */
SELECT * FROM EMP21;
/* VIEW 정보 보기 */
DESC INFORMATION_SCHEMA.VIEWS;
SELECT * FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME='emp21';
/* 단순 뷰 - 단순뷰는 READ, WRITE 가 된다
=====> INSERT 쿼리를 쓸 수 있다는 뜻 */
CREATE VIEW EMP_30_VU
AS
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 30;
SELECT *
FROM EMP_30_VU;
INSERT INTO EMP_30_VU
VALUES(1112, 'Jimin', 500, 30);
/* WITH CHECK OPTION -- 업데이트 방지(안전장치) */
CREATE OR REPLACE VIEW emp_20
AS
SELECT * FROM emp
WHERE deptno = 20
WITH CHECK OPTION;
SELECT *
FROM emp_20;
/* WITH CHECK OPTION 때문에 업데이트 안 됨. */
UPDATE emp_20
SET deptno = 30
WHERE empno = 7369; /* 오류 나는 거 정상 */
/* INDEX 인덱스 - 속도 때문에 쓴다 */
SHOW INDEX FROM emp;
CREATE INDEX i_emp_ename ON emp(ename);
/* pdf 12장 - stored procedure는 보안, 퍼포먼스 좋지만
JPA에서는 에러 메시지가 잘 안 떠서 안 쓴다.
jpa 에서는 sql문을 쓴다. */
/* delimiter : 시작 ~ 끝 $$ 로 써도 됨 */
delimiter //
CREATE PROCEDURE if_test()
BEGIN
DECLARE var INT;
SET var := 51;
IF var % 2 = 0 THEN
SELECT 'Even Number';
ELSE
SELECT 'Odd Number';
END IF;
END
//
delimiter ; /* ; 를 한칸 띄어줘야 오류가 안 난다*/
CALL if_test();
/* 13장 */
/* 파라미터 없는 프로시저. 콜 바이 네임(이름으로 호출하기)*/
DELIMITER $$
CREATE procedure helloworld()
BEGIN
SELECT 'hello world';
END
$$
DELIMITER ;
CALL helloworld();