전체 글 (315) 썸네일형 리스트형 [SQL, Oracle] DML(Data Manipulation Language)의 lock 발생 관련 내용 정리 DML의 경우, transaction이 commit 또는 rollback으로 정리가 되어야 한다. 그렇지 않을 경우 lock이 발생하기 때문이다. 여기서 말하는 lock 매커니즘은, 동시 자원을 획득하고자 할 때(동시에 데이터를 수정하려는 시도가 있을 경우) 먼저 들어온 세션에 대한 데이터 수정을 허가하고 나중에 뒤늦게 들어온 세션에 대해서는 앞선 작업이 완료가 되지 않으면 먼저 수행된 transaction을 보호하기 위하여 다른 transaction에서 해당 데이터의 수정을 막는 제어장치이다. Oracle은 lock 매커니즘이 잘 만들어져있다. 예를 들어, 아래 창을 살펴보자. 상단의 Orange 창에서 update emp set sal = 5000; 하고 commit이나 rollback을 안 하고 있.. [실습문제] 2023. 11. 8.(수) 문제 풀이(4문제) 실습문제 1. professor_1을 professor와 동일하게 만들고 홈페이지가 없는 직원들은 email_id를 사용하여 다음과 같이 변경하여라. 양선희의 경우 => http://www.test.com/lamb1 먼저 내 코드 결과이다. 내 결과 16번 짤림ㅎ 선생님이 이 방법은 안좋은 예라고 하셨다. 한번의 테이블 스캔으로 가능한 쿼리를 서브쿼리를 사용하여 테이블을 두 번 스캔하는 방식이기 때문이다. 아래는 선생님 해설이다. 실습문제 2. student_1의 테이블을 student과 동일하게 만들고 제1의 전공번호가 301인 학생들과 출생년도와 동일한 학생들을 삭제하여라(제1의 전공번호가 301인 학생 포함) 선생님은 extract 안 쓰시고 to_char로 사용하였다. 실습문제 3. student.. [복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DML의 MERGE + 복습후기(20231108) 4 MERGE: 데이터 병합. 위험한 쿼리이므로 되도록 쓰지 말것. 원본 테이블 기준으로 변경테이블을 수정하므로 old와 new의 관계가 있어야 함. 상당히 좋지 않은 문법을 가짐. 기준테이블 수정할 테이블 ( ) --순서때문에 실수하는 경우가 있음. no price no price 1 1000 1 100 → update 필요 2 2000 2 200 → update 필요 3 3500 3 3500 4 4000 → insert 필요 insert쓰고, update하고 하지말고 한번에 처리하는 방법이 있는가 현업에서는 merge 사용을 금하고 있는 경우가 많음. 시험에는 많이 나옴★ ★문법 문법이 너무 어렵게 생겨서 바로 문제로 적용해보겠다. 예제) merge문 test 위 결과로는 3 rows upserted.. [복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DML의 DELETE 3) DELETE: 행 삭제 문법은 아래와 같다. delete [from] table_name -- 서브쿼리 못 옴 [where 조건]; -- 서브쿼리 올 수 있음 조건절 생략하면 전체 행 삭제 from절에 서브쿼리가 못 오는 이유는, 인라인뷰는 가상의 테이블이므로 가상의 테이블을 지우라는 의미가 될 수 없기 때문이다. where의 조건절을 생략하면 전체 행 삭제가 된다. 예를 들어 emp_t11에서 deptno=1000인 부서를 삭제하라고 한다면 delete from emp_t11 where deptno = 1000 commit; 하면 된다. 예제를 하나 풀어보자 student_t1 테이블에서 이미경과 같은 나이(출생년도가 같은)의 학생 정보를 삭제하여라 추가 예제이다. student_t1 테이블에서 .. [복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DML의 UPDATE 2) UPDATE: 데이터 수정(cell 단위로 수정하며 여러 셀 수정이 가능함) 여러 행의 특정 컬럼 값 하나를 수정이 가능하다. 여러 컬럼 동시에 수정이 가능하나 권하지 않으며 지양해야하는 점이 있다. 먼저 문법은, UPDATE table_name set 수정대상 = 수정값 [where 조건] 예) select * from emp_t2; update emp_t2 set sal = 3000 where name = 'KING'; 과 같이 KING의 sal 변경이 가능하다. 예제) student_t1 테이블에서 박동호와 같은 학년 학생의 제2전공번호를 101으로 수정하여라 select * from student_t1 where grade = (select grade from student_t1 where .. 이전 1 ··· 50 51 52 53 54 55 56 ··· 63 다음