OpenFrameWork
오픈프레임워크_Day25
px
2015. 4. 20. 11:57
### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도
목차. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드 또는 실습
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
***. TRANSACTION - 작업단위
ALL OR NOTHING - 하거나, 말거나
왜 이런 것이 필요 할까?
금융권에서 이런 전산 작업이 필요했었음
1. A은행 입금
2. A은행에서 출금된 돈
3. 그 돈이 B은행으로 입금
이런 과정을 하나의 작업단위로 볼 수 있는데
2번을 하던 과정에 문제가 발생했을때
원래 상태로 돌려놓아야함
이런한 일을위해서 트랜잭션이 필요함
트랜잭션은 어떻게 할 수 있나?
원래 상태로 돌리는 방법은?
-> 작업에 대한 내용을 저장하는 정보가 필요
-> 그게 "트랜잭션 로그"
@@@트랜잭션 로그, TRANSACTION LOG, 트랜잭션로그, TRANSACTIONLOG
1. 데이터베이스
1) 데이터 파일 : .DBF
2) 로그 파일 : .LOG -> 트랜잭션에서 사용
오라클의 경우
F:\app\jhta\oradata\orcl\~.DBF
F:\app\jhta\oradata\orcl\~.LOG
2. 명령어
1) COMMIT - TRANSACTION을 완료 시(되돌릴 수 없음, COMMIT전에는 메모리에서만 작업, 실제파일에 저장)
2) ROLLBACK - 시작위치로 되돌림
...
COMMIT을 하지 않고 재접속 하면 INSERT한 내용이 없어짐
COMMIT을 하면 저장이 되서 재접속 해도 사라지지 않음
COMMINT을 하고
UPDATE TBLBOOK SET TITLE='하늘' WHERE TITLE='하늘과 땅';
ROLLBACK 하면 사라짐
3. 동기화 처리
하나의 서버에 두명이 접속, A,B로 구분
A. SELECT *FROM TBLBOOK;
B. SELECT *FROM TBLBOOK;
A. UPDATE TBLBOOK SET TITLE='하늘과 땅' WHERE TITLE='하늘';
A. SELECT *FROM TBLBOOK;
B. SELECT *FROM TBLBOOK;
두명의 내용이 다름
이럴때 COMMIT해주면 됨
A. COMMIT
COMMIT 하기 전까지는 서로 보는 데이터가 다르기 때문에
동기화 되도록 COMMINT을 주기적으로 해야 한다
4. DML에만 해당
-----------------------------------
***. DATA INTEGRITY - 데이터 무결성
정확한 데이터만 저장해서 신뢰할 수 있는 데이터로 만들자라고 해서 시작한 주제
데이터를 안전하게 보호하고 결점이 없는 데이터로 만들려고 하는 것
이러한 무결성을 위해서 어떤 노력을 할 것인가?
1. 무엇을 지킬 것인가?, 어떻게 지킬 것인가?
2. WHAT?
1) 실체 무결성 (ENTITY INTEGRITY) - ENTITY => TABLE, 하나의 테이블 안에서 발생
- 데이터 중복제거(중복된 데이터로 인한 연쇄적인 문제를 위해 미리 제거)
- PRIMARY KEY, UNIQUE => CONSTRAINT(제약)
2) 영역 무결성 (DOMAIN INTEGRITY) - 하나의 테이블 안에서 발생
- 범위(영역),정해진 범위내에서 데이터를 사용하게
- CHECK
3) 참조 무결성 (REFERENCE INTEGRITY) - 두개 이상의 테이블에서 발생
- 참조를 지킨다
- FOREIGN KEY(외래키,참조키) - 실제 비교가 필요한 곳(참조하는 테이블)에 필드에 KEY가 사용됨
- 참조하는 테이블(자식테이블), 참조 당하는 테이블(부모테이블), 참조테이블(자식테이블,참조하는 테이블)
3. 컬럼(필드) 속성
1) NN(NOT NULL) 속성
- PRIMARY KEY, NOT NULL(자체 기능,제약 아님)
2) ND(NO DUPLICATE) 속성
- UNIQUE, PRIMARY KEY
3) NC(NO CHANGE) 속성 - 수정불가
- FOREIGN KEY
4. PRIMARY KEY => UNIQUE + NOT NULL
1) 하나의 테이블에서 유일하게 레코드를 구별 할 수 있게 해주는 키
2) NULL 허용하지 않음
3) 하나의 테이블에 한개만 설정가능
4) 여러개의 필드에 설정이 가능(여러개의 필드를 묶어서 사용가능)
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도
목차. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드 또는 실습
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
***. TRANSACTION - 작업단위
ALL OR NOTHING - 하거나, 말거나
왜 이런 것이 필요 할까?
금융권에서 이런 전산 작업이 필요했었음
1. A은행 입금
2. A은행에서 출금된 돈
3. 그 돈이 B은행으로 입금
이런 과정을 하나의 작업단위로 볼 수 있는데
2번을 하던 과정에 문제가 발생했을때
원래 상태로 돌려놓아야함
이런한 일을위해서 트랜잭션이 필요함
트랜잭션은 어떻게 할 수 있나?
원래 상태로 돌리는 방법은?
-> 작업에 대한 내용을 저장하는 정보가 필요
-> 그게 "트랜잭션 로그"
@@@트랜잭션 로그, TRANSACTION LOG, 트랜잭션로그, TRANSACTIONLOG
1. 데이터베이스
1) 데이터 파일 : .DBF
2) 로그 파일 : .LOG -> 트랜잭션에서 사용
오라클의 경우
F:\app\jhta\oradata\orcl\~.DBF
F:\app\jhta\oradata\orcl\~.LOG
2. 명령어
1) COMMIT - TRANSACTION을 완료 시(되돌릴 수 없음, COMMIT전에는 메모리에서만 작업, 실제파일에 저장)
2) ROLLBACK - 시작위치로 되돌림
...
COMMIT을 하지 않고 재접속 하면 INSERT한 내용이 없어짐
COMMIT을 하면 저장이 되서 재접속 해도 사라지지 않음
COMMINT을 하고
UPDATE TBLBOOK SET TITLE='하늘' WHERE TITLE='하늘과 땅';
ROLLBACK 하면 사라짐
3. 동기화 처리
하나의 서버에 두명이 접속, A,B로 구분
A. SELECT *FROM TBLBOOK;
B. SELECT *FROM TBLBOOK;
A. UPDATE TBLBOOK SET TITLE='하늘과 땅' WHERE TITLE='하늘';
A. SELECT *FROM TBLBOOK;
B. SELECT *FROM TBLBOOK;
두명의 내용이 다름
이럴때 COMMIT해주면 됨
A. COMMIT
COMMIT 하기 전까지는 서로 보는 데이터가 다르기 때문에
동기화 되도록 COMMINT을 주기적으로 해야 한다
4. DML에만 해당
-----------------------------------
***. DATA INTEGRITY - 데이터 무결성
정확한 데이터만 저장해서 신뢰할 수 있는 데이터로 만들자라고 해서 시작한 주제
데이터를 안전하게 보호하고 결점이 없는 데이터로 만들려고 하는 것
이러한 무결성을 위해서 어떤 노력을 할 것인가?
1. 무엇을 지킬 것인가?, 어떻게 지킬 것인가?
2. WHAT?
1) 실체 무결성 (ENTITY INTEGRITY) - ENTITY => TABLE, 하나의 테이블 안에서 발생
- 데이터 중복제거(중복된 데이터로 인한 연쇄적인 문제를 위해 미리 제거)
- PRIMARY KEY, UNIQUE => CONSTRAINT(제약)
2) 영역 무결성 (DOMAIN INTEGRITY) - 하나의 테이블 안에서 발생
- 범위(영역),정해진 범위내에서 데이터를 사용하게
- CHECK
3) 참조 무결성 (REFERENCE INTEGRITY) - 두개 이상의 테이블에서 발생
- 참조를 지킨다
- FOREIGN KEY(외래키,참조키) - 실제 비교가 필요한 곳(참조하는 테이블)에 필드에 KEY가 사용됨
- 참조하는 테이블(자식테이블), 참조 당하는 테이블(부모테이블), 참조테이블(자식테이블,참조하는 테이블)
3. 컬럼(필드) 속성
1) NN(NOT NULL) 속성
- PRIMARY KEY, NOT NULL(자체 기능,제약 아님)
2) ND(NO DUPLICATE) 속성
- UNIQUE, PRIMARY KEY
3) NC(NO CHANGE) 속성 - 수정불가
- FOREIGN KEY
4. PRIMARY KEY => UNIQUE + NOT NULL
1) 하나의 테이블에서 유일하게 레코드를 구별 할 수 있게 해주는 키
2) NULL 허용하지 않음
3) 하나의 테이블에 한개만 설정가능
4) 여러개의 필드에 설정이 가능(여러개의 필드를 묶어서 사용가능)
5. UNIQUE
1) 중복을 허용하지 않음
2) 하나의 테이블에 여러 개의 키가 존재할 수 있다.
6. SEQUENCE
1) 절대로 중복되지 않는 정수를 가져다 사용하는 방법(자동 증가, 어떤 숫자가 나올지 모름)
2) CREATE SEQUENCE ...
3) 독립된 객체로 사용(다른 테이블들도 쓸 수 있음)
4) mysql의 경우 autoincrement라는 키워드를 테이블 객체에 종속된다.
5) mssql의 경우 idendtity라는 키워드로 테이블 객체에 종속시켜 사용함.
7. DEFAULT -> NULL 값 대신에 기본값을 넣겠다
1) 필드 옆에 작성함으로써 테이블에 종속됨
8. CHECK -> 정해진 값 이외에 다른 값은 막아 주겠다
1) 정해진 범위안에 데이터를 검사
-----------------------------------
테이블에 저장하는 DB -> 관계형 DB
하나의 테이블이 아닌 다른 테이블과의 관계가 발생함
똑같은 필드가 있느냐? 같은 필드를 공유하고 있느냐?
-----------------------------------
***. 테이블 만드는 방법
CREATE TABLE 테이블명(
필드명 데이터타입 [NULL(DEFAULT)| NOT NULL] CONSTRAINT,
...
);
*. 데이터 타입
NUMBER(자리수) : 숫자
DATE : 날짜
VARCHAR2(자리수) : 문자(가변길이) - (10)인데 2개 저장하면 크기가 2개 됨
CHAR(자리수) : 문자(고정길이)
-----------------------------------
***. 기본키 실습
테이블 생성
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NULL,
NAME VARCHAR2(10) NULL
);
중복된 데이터 입력 가능할까?
INSERT INTO TBLTEST VALUES(1, '홍길동');
INSERT INTO TBLTEST VALUES(1, '홍길동');
SELECT * FROM TBLTEST;
ID NAME
---------- ----------
1 홍길동
1 홍길동
DELETE FROM TBLTEST;
레코드 전부 삭제됨
테이블에 기본키 제약 설정 - 데이터를 다 지우고 해야 가능
ALTER TABLE TBLTEST
ADD CONSTRAINT PK_ID PRIMARY KEY(ID);
INSERT INTO TBLTEST VALUES(1, '홍길동');
1 개의 행이 만들어졌습니다.
INSERT INTO TBLTEST VALUES(1, '홍길동');
INSERT INTO TBLTEST VALUES(1, '홍길동')
*
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.PK_ID)에 위배됩니다
-----------------------------------
**. DD(DATA DICTIONARY) - 테이블의 정보를 담고 있는 테이블
이를 이용해서 프로그래밍이 가능하다
DESC USER_CONSTRAINTS ;
이름 널? 유형
----------------------------------------- -------- ------------
OWNER VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
RELY VARCHAR2(4)
LAST_CHANGE DATE
INDEX_OWNER VARCHAR2(30)
INDEX_NAME VARCHAR2(30)
INVALID VARCHAR2(7)
VIEW_RELATED VARCHAR2(14)
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
PK_DEPT DEPT ENABLED
PK_EMP EMP ENABLED
PK_ID TBLTEST ENABLED
DESC USER_OBJECTS;
이름 널? 유형
----------------------------------------- -------- --------------
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
SELECT OBJECT_NAME FROM USER_OBJECTS;
OBJECT_NAME
------------------------------------------
PK_DEPT
DEPT
EMP
PK_EMP
BONUS
SALGRADE
TBLA
TBLB
TBLC
TBLTEST
TBLBOOK
PK_ID
기본키 제약 제거
ALTER TABLE TBLTEST
DROP CONSTRAINTS PK_ID;
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
PK_EMP EMP ENABLED
PK_DEPT DEPT ENABLED
PK_ID가 삭제 된것을 볼 수 있음
테이블에 컬럼을 추가
ALTER TABLE TBLTEST
ADD AGE NUMBER NULL;
DESC TBLTEST;
이름 널? 유형
----------------------------------------- -------- ------------
ID NUMBER
NAME VARCHAR2(10)
AGE NUMBER
컬럼 수정
20글자까지 지정
ALTER TABLE TBLTEST
MODIFY NAME VARCHAR(20);
이름 널? 유형
----------------------------------------- -------- ------------
ID NUMBER
NAME VARCHAR2(20)
AGE NUMBER
DESC TBLTEST;
컬럼 삭제
ALTER TABLE TBLTEST DROP COLUMN AGE;
만약 ID에 기본키를 줬는데 ID가 중복이 가능하다면
두개의 필드로 묶어서 사용 가능
두개의 필드를 묶어서 기본키 설정
ALTER TABLE TBLTEST
ADD CONSTRAINTS PK_ID PRIMARY KEY(ID, NAME);
SQL> ALTER TABLE TBLTEST
2 ADD CONSTRAINTS PK_ID PRIMARY KEY(ID, NAME);
테이블이 변경되었습니다.
SQL> DESC TBLTEST;
이름 널? 유형
----------------------------------------- -------- ------------
ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(20)
AGE NUMBER
SELECT * FROM TBLTEST;
ID NAME AGE
--- -------------------- ----------
1 홍길동
INSERT INTO TBLTEST VALUES(1,'임꺽정',24);
SQL> INSERT INTO TBLTEST VALUES(1,'임꺽정',24);
1 개의 행이 만들어졌습니다.
SQL> SELECT * FROM TBLTEST;
ID NAME AGE
---------- -------------------- ----------
1 홍길동
1 임꺽정 24
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2(10) NULL,
AGE NUMBER
);
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
SYS_C0011134 TBLTEST ENABLED
SYS_C0011133 TBLTEST ENABLED
BIN$yLUL8oLmREuVovbkQZNSuQ==$0 BIN$lh8WM+gkSIaq8PLqHr81Sg==$0 ENABLED
PK_EMP EMP ENABLED
PK_DEPT DEPT ENABLED
이름이 이상함, 삭제도 힘들수 있음, 좋은 방법이 아님
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NOT NULL CONSTRAINT PK_ID PRIMARY KEY,
NAME VARCHAR2(10) NULL,
AGE NUMBER
);
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
PK_ID TBLTEST ENABLED
SYS_C0011135 TBLTEST ENABLED
BIN$wFcJ9pKASV+A1Z8KAx6RjA==$0 BIN$bSHA6zszQ3uoUTHC1m6L3g==$0 ENABLED
BIN$IqMftt1mRg6z0/VYxzXypg==$0 BIN$bSHA6zszQ3uoUTHC1m6L3g==$0 ENABLED
BIN$yLUL8oLmREuVovbkQZNSuQ==$0 BIN$lh8WM+gkSIaq8PLqHr81Sg==$0 ENABLED
PK_EMP EMP ENABLED
PK_DEPT DEPT ENABLED
PK_ID 생김
위 방법보다 더 권장하는 방법
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NOT NULL,
NAME VARCHAR2(10) NULL,
AGE NUMBER,
CONSTRAINT PK_ID PRIMARY KEY(ID,NAME)
);
NN 속성
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER CONSTRAINT PK_ID PRIMARY KEY,
NAME VARCHAR2(10) NULL,
AGE NUMBER
);
INSERT INTO TBLTEST(ID,NAME) VALUES(NULL,'홍길동'); X
INSERT INTO TBLTEST(NAME) VALUES('홍길동'); X
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
3. 소스코드 또는 실습
-----------------------------------
-----------------------------------
###################################
4. 과제
-----------------------------------
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
-----------------------------------
###################################
6. 기타
-----------------------------------
-----------------------------------
테이블에 저장하는 DB -> 관계형 DB
하나의 테이블이 아닌 다른 테이블과의 관계가 발생함
똑같은 필드가 있느냐? 같은 필드를 공유하고 있느냐?
-----------------------------------
***. 테이블 만드는 방법
CREATE TABLE 테이블명(
필드명 데이터타입 [NULL(DEFAULT)| NOT NULL] CONSTRAINT,
...
);
*. 데이터 타입
NUMBER(자리수) : 숫자
DATE : 날짜
VARCHAR2(자리수) : 문자(가변길이) - (10)인데 2개 저장하면 크기가 2개 됨
CHAR(자리수) : 문자(고정길이)
-----------------------------------
***. 기본키 실습
테이블 생성
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NULL,
NAME VARCHAR2(10) NULL
);
중복된 데이터 입력 가능할까?
INSERT INTO TBLTEST VALUES(1, '홍길동');
INSERT INTO TBLTEST VALUES(1, '홍길동');
SELECT * FROM TBLTEST;
ID NAME
---------- ----------
1 홍길동
1 홍길동
DELETE FROM TBLTEST;
레코드 전부 삭제됨
테이블에 기본키 제약 설정 - 데이터를 다 지우고 해야 가능
ALTER TABLE TBLTEST
ADD CONSTRAINT PK_ID PRIMARY KEY(ID);
INSERT INTO TBLTEST VALUES(1, '홍길동');
1 개의 행이 만들어졌습니다.
INSERT INTO TBLTEST VALUES(1, '홍길동');
INSERT INTO TBLTEST VALUES(1, '홍길동')
*
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.PK_ID)에 위배됩니다
-----------------------------------
**. DD(DATA DICTIONARY) - 테이블의 정보를 담고 있는 테이블
이를 이용해서 프로그래밍이 가능하다
DESC USER_CONSTRAINTS ;
이름 널? 유형
----------------------------------------- -------- ------------
OWNER VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
RELY VARCHAR2(4)
LAST_CHANGE DATE
INDEX_OWNER VARCHAR2(30)
INDEX_NAME VARCHAR2(30)
INVALID VARCHAR2(7)
VIEW_RELATED VARCHAR2(14)
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
PK_DEPT DEPT ENABLED
PK_EMP EMP ENABLED
PK_ID TBLTEST ENABLED
DESC USER_OBJECTS;
이름 널? 유형
----------------------------------------- -------- --------------
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
SELECT OBJECT_NAME FROM USER_OBJECTS;
OBJECT_NAME
------------------------------------------
PK_DEPT
DEPT
EMP
PK_EMP
BONUS
SALGRADE
TBLA
TBLB
TBLC
TBLTEST
TBLBOOK
PK_ID
기본키 제약 제거
ALTER TABLE TBLTEST
DROP CONSTRAINTS PK_ID;
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
PK_EMP EMP ENABLED
PK_DEPT DEPT ENABLED
PK_ID가 삭제 된것을 볼 수 있음
테이블에 컬럼을 추가
ALTER TABLE TBLTEST
ADD AGE NUMBER NULL;
DESC TBLTEST;
이름 널? 유형
----------------------------------------- -------- ------------
ID NUMBER
NAME VARCHAR2(10)
AGE NUMBER
컬럼 수정
20글자까지 지정
ALTER TABLE TBLTEST
MODIFY NAME VARCHAR(20);
이름 널? 유형
----------------------------------------- -------- ------------
ID NUMBER
NAME VARCHAR2(20)
AGE NUMBER
DESC TBLTEST;
컬럼 삭제
ALTER TABLE TBLTEST DROP COLUMN AGE;
만약 ID에 기본키를 줬는데 ID가 중복이 가능하다면
두개의 필드로 묶어서 사용 가능
두개의 필드를 묶어서 기본키 설정
ALTER TABLE TBLTEST
ADD CONSTRAINTS PK_ID PRIMARY KEY(ID, NAME);
SQL> ALTER TABLE TBLTEST
2 ADD CONSTRAINTS PK_ID PRIMARY KEY(ID, NAME);
테이블이 변경되었습니다.
SQL> DESC TBLTEST;
이름 널? 유형
----------------------------------------- -------- ------------
ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(20)
AGE NUMBER
SELECT * FROM TBLTEST;
ID NAME AGE
--- -------------------- ----------
1 홍길동
INSERT INTO TBLTEST VALUES(1,'임꺽정',24);
SQL> INSERT INTO TBLTEST VALUES(1,'임꺽정',24);
1 개의 행이 만들어졌습니다.
SQL> SELECT * FROM TBLTEST;
ID NAME AGE
---------- -------------------- ----------
1 홍길동
1 임꺽정 24
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2(10) NULL,
AGE NUMBER
);
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
SYS_C0011134 TBLTEST ENABLED
SYS_C0011133 TBLTEST ENABLED
BIN$yLUL8oLmREuVovbkQZNSuQ==$0 BIN$lh8WM+gkSIaq8PLqHr81Sg==$0 ENABLED
PK_EMP EMP ENABLED
PK_DEPT DEPT ENABLED
이름이 이상함, 삭제도 힘들수 있음, 좋은 방법이 아님
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NOT NULL CONSTRAINT PK_ID PRIMARY KEY,
NAME VARCHAR2(10) NULL,
AGE NUMBER
);
SELECT CONSTRAINT_NAME, TABLE_NAME,
STATUS FROM USER_CONSTRAINTS;
CONSTRAINT_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ -------
FK_DEPTNO EMP ENABLED
PK_ID TBLTEST ENABLED
SYS_C0011135 TBLTEST ENABLED
BIN$wFcJ9pKASV+A1Z8KAx6RjA==$0 BIN$bSHA6zszQ3uoUTHC1m6L3g==$0 ENABLED
BIN$IqMftt1mRg6z0/VYxzXypg==$0 BIN$bSHA6zszQ3uoUTHC1m6L3g==$0 ENABLED
BIN$yLUL8oLmREuVovbkQZNSuQ==$0 BIN$lh8WM+gkSIaq8PLqHr81Sg==$0 ENABLED
PK_EMP EMP ENABLED
PK_DEPT DEPT ENABLED
PK_ID 생김
위 방법보다 더 권장하는 방법
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER NOT NULL,
NAME VARCHAR2(10) NULL,
AGE NUMBER,
CONSTRAINT PK_ID PRIMARY KEY(ID,NAME)
);
NN 속성
DROP TABLE TBLTEST;
CREATE TABLE TBLTEST(
ID NUMBER CONSTRAINT PK_ID PRIMARY KEY,
NAME VARCHAR2(10) NULL,
AGE NUMBER
);
INSERT INTO TBLTEST(ID,NAME) VALUES(NULL,'홍길동'); X
INSERT INTO TBLTEST(NAME) VALUES('홍길동'); X
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
3. 소스코드 또는 실습
-----------------------------------
-----------------------------------
###################################
4. 과제
-----------------------------------
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
-----------------------------------
###################################
6. 기타
-----------------------------------
-----------------------------------