-- **데이터의 값을 변경하기 **--
(문) TBL_SAWONINFO 테이블에서 사원번호 1005인 직원의 직급을 '차장'으로 변경하세요.
(답)
UPDATE TBL_SAWONINFO SET JIK = '차장'
WHERE SANO = 1003;
ROLLBACK; -- 업데이트 전으로 (COMMIT 하기 전에 상태로)
--부모테이블과 자식테이블 --
<<TBL_DEPT>> 1행 부모테이블
-----------------------------------------------------------------------
DEPTNO DNAME LOC DTEL
--------------------------------------------------------------------
10 영업부 안산 031-845-1234
20 관리부 수원 031-777-8787
30 총무부 인천 032-545-1234
40 영업부 부천 032-745-1234
--------------------------------------------------------------------
참조받는 컬럼(DEPTNO)은 반드시 고유한 값을 가지는 컬럼이어야만 한다.
즉, 중복된 값이 들어올 수 없다.
그러므로 DEPTNO 컬럼에는 고유한 값만 들어오는 PRIMARY KEY 또는 UNIQUE 제약을 걸어야 한다.
그런데 참조받는 컬럼(DEPTNO)에는 NULL값이 들어올 수가 없다.
그러므로 참조 받는 컬럼(DEPTNO)에는 PRIMARY KEY
또는 NOT NULL 인 UNIQUE 제약을 걸어야 한다.
<<TBL_SAWON>> 다행 자식테이블
--------------------------------------------------------------------------
SANO JUBUN SANAME JIK SAL DEPRNO
------------------------------------------------------------------------
1008 7710092234567 태 연 이사 9999 10
1001 7010091234567 홍길동 사장 5000 20
1002 7110091234567 이순신 부장 4000 20
1003 7210091234567 안중근 과장 3000 20
1004 7310092234567 김옥빈 부장 4000 30
1005 7410091234567 원 빈 차장 5000 30
1006 7510092234567 하지원 대리 2000 40
1007 7610092234567 이나영 사원 2000 40
---------------------------------------------------------------------
참조하는 컬럼(TBL_SAWON 테이블의 DEPTNO)은
참조받는 컬럼의 데이터를 조회해서 그 데이터값만 들어와야 한다.
이렇게 하려면 FOREIN KEY(외부키) 제약조건을 걸어야 한다.
--부서테이블을 만들어 보려고 한다.
CREATE TABLE TBL_DEPT
(DEPTNO NUMBER(10)
,DNAME VARCHAR2(10)
,LOC VARCHAR2(10)
,DTEL VARCHAR2(20)
);
INSERT INTO TBL_DEPT VALUES
(10, '영업부', '안산', '031-845-1234')
INSERT INTO TBL_DEPT VALUES
(20, '관리부', '경기도', '031-775-1287')
INSERT INTO TBL_DEPT VALUES
(30, '생산부', '수원', '032-655-6734')
INSERT INTO TBL_DEPT VALUES
(40, '무역부', '인천', '031-995-9234')
--사원테이블을 만들어 보려고 한다..
CREATE TABLE TBL_SAWON
(SANO NUMBER(4)
,JUBUN CHAR(13)
,SANAME VARCHAR2(10)
,JIK VARCHAR2(10)
,SAL NUMBER(4)
,DEPTNO NUMBER(2)
,CONSTRAINT TBL_SAWON_SANO_PK PRIMARY KEY(SANO)
,CONSTRAINT TBL_SAWON_JUBUN_UQ UNIQUE(JUBUN)
,CONSTRAINT TBL_DEPT_DEPTNO_FK FOREIGN KEY(DEPTNO) REFERENCES TBL_SAWON(SANO)
);--,CONSTRAINT TBL_SAWON_SANO_PK PRIMARY KEY(SANO)
--,CONSTRAINT TBL_SAWON_JUBUN_PK PRIMARY KEY(JUBUN) -->프라이 머리키는 한번만 사용할 수 있다.
INSERT INTO TBL_SAWON VALUES
(1008, '7710092234567', '태 연', '이사', 9999, 70);
-->ORA-02291: 무결성 제약조건(NEWSCOTT.TBL_SAWON_DEPTNO_FK)이 위배되었습니다- 부모 키가 없습니다
INSERT INTO TBL_SAWON VALUES
(1008,'7710092234567','태연','이사',9999,10);
INSERT INTO TBL_SAWON VALUES
(NULL,'7010091234567','홍길동','사장',5000,20);
--ORA-01400: NULL을 ("NEWSCOTT"."TBL_SAWON"."SANO") 안에 삽입할 수 없습니다
INSERT INTO TBL_SAWON VALUES
(1001,'7010091234567','홍길동','사장',5000,20);
INSERT INTO TBL_SAWON VALUES
(1002,NULL,'이순신','부장',4000,20);
INSERT INTO TBL_SAWON VALUES
(1003,NULL,'안중근','과장',3000,20);
INSERT INTO TBL_SAWON VALUES
(1004,'7010091234567','김옥빈','부장',4000,30);
--ORA-00001: 무결성 제약 조건(NEWSCOTT.TBL_SAWON_JUBUN_UQ)에 위배됩니다 (같은 주번)
INSERT INTO TBL_SAWON VALUES
(1004,'7310092234567','김옥빈','부장',4000,30)
-- 행 삭제하기
DELETE TBL_SAWON;
-- 테이블을 삭제하기
DROP TABLE TBL_SAWON;
-- *** 필수암기 *** --
INSERT, UPDATE, DELETE, MERGE를 DML(Date Manuplation Languge = 데이터 조작어)문이라고 부른다.
CREATE, ALTER, DROP 으로 시작하는 문을 DDL(Data Definition Language = 데이터 정의어) 문이라고 부른다.
GRANT, REVOKE 으로 시작하는 문을 DCL(Date Control LANGUAGE = 데이터 제어) 문이라고 부른다.
DDL 문과 DCL 문을 실행하면 그 속에는 COMMIT 이 포함되어져 있다.
DML 문만 실행하면 그속에는 COMMIT 이나 ROLLBACK은 포함되어 있지 않다.;
'IT. 컴퓨터' 카테고리의 다른 글
[오라클] DB모델링 , 1:1관계 , TRIGGER (0) | 2020.05.28 |
---|---|
[오라클] 정규화란? (0) | 2020.05.21 |
[오라클] SQL GATE 에서 Shared Server로 추가 하는 방법 (0) | 2020.05.06 |
[오라클] 패스워드를 잃어 버렸을 때 (0) | 2020.05.05 |
[오라클] 새로운 계정, 서버에 접속하는 방법 (1) | 2020.05.05 |