테이블 관리
SQL> CREATE TABLE SONGBOOK
2 (
3 NO NUMBER(6),
4 TITLE VARCHAR2(20),
5 SINGER VARCHAR2(20),
6 GASA VARCHAR(20),
7 SNO NUMBER(3)
8 );
테이블이 생성되었습니다.
SQL> CREATE TABLE SONGTYPE
2 (
3 SNO NUMBER(3),
4 GENRE VARCHAR2(10)
5 );
테이블이 생성되었습니다.
QL> COLUMN NO FORMAT A5 -- 출력되는 사이즈 조절
COLUMN 컬럼명 FORMAT 사이즈
제약 조건
기본키(PRIMARY KEY) - 중복 안됨, null허용 안함 - 단 하나만
unique - 중복 안됨, null 허용 -여러게 존제
CHECK -
NOT NULL
FOREIGN KEY
2 가지 방법
제약 조건의 이름을 넣는 방법 과 넣지 않는 방법
문법)
SQL> CREATE TABLE SONGBOOK2
2 (
3 NO NUMBER(6) primary key,
4 TITLE VARCHAR2(20) not null,
5 SINGER VARCHAR2(20) check(singer in('보아','남진','강진','뽀미언니')),
6 GASA VARCHAR(50) unique,
7 SNO NUMBER(3) default 10
8 );
CREATE TABLE 테이블명
(
컬럼명 데이터타입 CONSTRAINT 테이블명_컬럼명_타입 제약조건
....
);
create table songbook3
(
NO NUMBER(6) CONSTRAINT SONGBOOK3_NO_PK primary key,
TITLE VARCHAR2(20) CONSTRAINT SONGBOOK3_TITLE_NN not null,
SINGER VARCHAR2(20) CONSTRAINT SONGBOOK3_SINGER_CK check(singer in('보아','남진','강진','뽀미언니')),
GASA VARCHAR2(50) CONSTRAINT SONGBOOK3_GASA_UK unique,
SNO NUMBER(3) default 10
)
/
제약조건 조회
select constraint_name, constraint_type, table_name
from user_constraints
where table_name='';
SQL> select constraint_name, constraint_type, table_name
2 from user_constraints
3 where table_name='SONGBOOK2';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SYS_C003006 C SONGBOOK2
SYS_C003007 C SONGBOOK2 // c = not null의 속성도 동일하게 출력
SYS_C003008 P SONGBOOK2
SYS_C003009 U SONGBOOK2
예제)
create table songbook3
(
NO NUMBER(6) CONSTRAINT SONGBOOK3_NO_PK primary key,
TITLE VARCHAR2(20) CONSTRAINT SONGBOOK3_TITLE_NN not null,
SINGER VARCHAR2(20) CONSTRAINT SONGBOOK3_SINGER_CK check(singe
GASA VARCHAR(20) CONSTRAINT SONGBOOK3_GASA)UK unique,
SNO NUMBER(3) default 10
)
1 select constraint_name, constraint_type, table_name
2 from user_constraints
3* where table_name='SONGBOOK3'
SQL> /
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SONGBOOK3_TITLE_NN C SONGBOOK3
SONGBOOK3_SINGER_CK C SONGBOOK3
SONGBOOK3_NO_PK P SONGBOOK3
SONGBOOK3_GASA_UK U SONGBOOK3
1600 남행열차,김수희,비내리는,2 으로 추가하라
SQL> INSERT INTO SONGBOOK3
2 VALUES(1600,'남행열차','김수희','비내리는3',20);
INSERT INTO SONGBOOK3
1 INSERT INTO SONGBOOK3
2* VALUES(1600,'남행열차','남진','비내리는',20)
SQL> /
1 개의 행이 만들어졌습니다.
SQL> INSERT INTO SONGBOOK3
2 VALUES(1602,'밤행열차','강진','비내리는호남선',NULL);
1 개의 행이 만들어졌습니다.
SQL> SELECT * FROM SONGBOOK3
2 ;
NO TITLE SINGER GASA SNO
---------- ----- -------------------- -------------------- ----------
########## 남행 남진 비내리는 20
열차
########## 밤행 강진 비내리는호남선
열차
SQL>
SQL> INSERT INTO SONGBOOK3(NO, TITLE, SINGER, GASA)
2 VALUES(1603,'완행열차','남진','비내리는오후');
1 개의 행이 만들어졌습니다.
SQL> SELECT * FROM SONGBOOK3;
NO TITLE SINGER GASA SNO
---------- ----- -------------------- -------------------- ----------
########## 남행 남진 비내리는 20
열차
########## 밤행 강진 비내리는호남선
열차
########## 완행 남진 비내리는오후 10
열차
예제)
SQL> INSERT INTO SONGBOOK3
2 VALUES(1604,NULL,'뽀미언니','이슬비내리는',10);
INSERT INTO SONGBOOK3
*
1행에 오류:
ORA-01400: NULL을 ("RAIN"."SONGBOOK3"."TITLE") 안에 삽입할 수 없습니다
SQL>
primary key
SQL> insert into songbook3
2 values(null,'아침열차','보아','꽃뿌리는',30);
insert into songbook3
*
1행에 오류:
ORA-01400: NULL을 ("RAIN"."SONGBOOK3"."NO") 안에 삽입할 수 없습니다
SQL> insert into songbook3
2 values(1603,'아침열차','보아','꽃뿌리는',30);
insert into songbook3
*
1행에 오류:
ORA-00001: 무결성 제약 조건(RAIN.SONGBOOK3_NO_PK)에 위배됩니다
unique
1 INSERT INTO SONGBOOK3
2* VALUES(1604,'아침열차','보아','비내리는',30)
SQL> /
INSERT INTO SONGBOOK3
*
1행에 오류:ORA-00001: 무결성 제약 조건(RAIN.SONGBOOK3_GASA_UK)에 위배됩니다
1 INSERT INTO SONGBOOK3
2* VALUES(1605,'아침열차','보아',null,30)
SQL> /
1 개의 행이 만들어졌습니다.
SQL> select * from songbook3;
NO TITLE SINGER
---------- -------------------- --------------------
GASA SNO
-------------------------------------------------- ----------
1600 남행열차 남진
비내리는 20
1602 밤행열차 강진
비내리는호남선
1603 완행열차 남진
비내리는오후 10
1605 아침열차 보아
30
숙제)
1 create table member2
2 (
3 no number(3) primary key,
4 name varchar2(10) not null,
5 id varchar2(10) unique,
6 pwd varchar2(10) default 123,
7 addr varchar2(10) check(addr in('안산','서울','인천','수원'))
8* )
SQL> /
테이블이 생성되었습니다.
SONGTYPE 테이블의 제약조건 조회
SQL> select constraint_name, constraint_type
2 from user_constraints
3 where table_name='SONGTYPE';
선택된 레코드가 없습니다.
DDL - 변경을 가하거나 삭제하는 명령어의 모임
ALTER (TABLE 테이블명)
ADD : 추가
MODIFY : 수정(테이블 컬럼의 데이타타입, 크기 변경-컬럼과 관련된것)수정, 제약조건 수정 불가
단 테이터가 입력이 되었다면 크기축소시 주의,
DROP : 삭제
* 컬럼은 추가/수정/삭제 가능
제약조건은 추가와 삭제만 가능.
* 테이블 설계가 잘못된것이다. 설계의 중요성.
테이블에 [제약]컬럼 추가
ALTER TABLE 테이블명
ADD (컬럼명 데이터타입 [CONSTRAINT 제약조건명 제약조건] ) ()생략가능
--SONGTYPE 테이블의 SNO 컬럼에 PK제약 조건 추가
SQL> ALTER TABLE SONGTYPE
2 ADD CONSTRAINT SONGTYPE_SNO_PK PRIMARY KEY(SNO);
테이블이 변경되었습니다.
BIGO 컬럼 추가
SQL> ALTER TABLE SONGTYPE
2 ADD (BIGO VARCHAR2(10));
테이블이 변경되었습니다.
-BIGO 컬럼의 데이터타입을 CHAR(20)변경
SQL> ALTER TABLE SONGTYPE
2 MODIFY BIGO CHAR(20);
테이블이 변경되었습니다.
1 ALTER TABLE SONGTYPE
2* MODIFY (BIGO NUMBER(5))
SQL> /
테이블이 변경되었습니다.
문제) SONGTYPE 테이블에 10 , 댄스 , 11111 입력
SQL> INSERT INTO SONGTYPE
2 VALUES(10,'댄스',11111);
1 개의 행이 만들어졌습니다.
SQL> SELECT * FROM SONGTYPE;
SNO GENRE BIGO
---------- ---------- ----------
10 댄스 11111
문제2) bigo 컬럼의 데이터다입을 number(3) 으로 변경
SQL> alter table songtype
2 modify (bigo number(3));
modify (bigo number(3))
*
2행에 오류:
ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다
SQL> alter table songtype
2 modify (bigo varchar2(10));
modify (bigo varchar2(10))
*
2행에 오류:
ORA-01439: 데이터 유형을 변경할 열은 비어 있어야 합니다
* 데이터타입의 값이 있다면 변경은 불가능하다.
*
SQL> alter table songtype
2 modify (bigo varchar2(10));
테이블이 변경되었습니다.
문제) bigo 컬럼 삭제
alter table songtype
drop column bigo;
테이블이 변경되었습니다.
primary key 제약조건 제거
alter table songtype
drop primary key cascade
SQL> alter table songtype
2 drop primary key cascade
3 ;
테이블이 변경되었습니다.
SQL> desc songtype
이름 널? 유형
----------------------------------------- -------- ------------------------
SNO NUMBER(3)
GENRE VARCHAR2(10)
SQL> select constraint_name, constraint_type
2 from user_constraints
3 where table_name='SONGTYPE';
선택된 레코드가 없습니다.