예) CHAR 유형
'AA' = 'AA '
예) VARCHAR 유형
AA' ≠ 'AA '
CREATE TABLE 테이블이름 (
칼럼명1 DATATYPE [DEFAULT 형식],
칼럼명2 DATATYPE [DEFAULT 형식],
칼럼명2 DATATYPE [DEFAULT 형식]
) ;
테이블명 : PLAYER
테이블 설명 : K-리그 선수들의 정보를 가지고 있는 테이블
칼럼명 : PLAYER_ID (선수ID) 문자 고정 자릿수 7자리,
PLAYER_NAME (선수명) 문자 가변 자릿수 20자리,
TEAM_ID (팀ID) 문자 고정 자릿수 3자리,
E_PLAYER_NAME (영문선수명) 문자 가변 자릿수 40자리,
NICKNAME (선수별명) 문자 가변 자릿수 30자리,
JOIN_YYYY (입단년도) 문자 고정 자릿수 4자리,
POSITION (포지션) 문자 가변 자릿수 10자리,
BACK_NO (등번호) 숫자 2자리,
NATION (국적) 문자 가변 자릿수 20자리,
BIRTH_DATE (생년월일) 날짜,
SOLAR (양/음) 문자 고정 자릿수 1자리,
HEIGHT (신장) 숫자 3자리,
WEIGHT (몸무게) 숫자 3자리,
제약조건 : 기본키(PRIMARY KEY) → PLAYER_ID
(제약조건명은 PLAYER_ID_PK)
값이 반드시 존재 (NOT NULL) → PLAYER_NAME, TEAM_ID
-- [ 예제 ] Oracle
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR2(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR2(40),
NICKNAME VARCHAR2(30),
JOIN_YYYY CHAR(4),
POSITION VARCHAR2(10),
BACK_NO NUMBER(2),
NATION VARCHAR2(20),
BIRTH_DATE DATE,
SOLAR CHAR(1),
HEIGHT NUMBER(3),
WEIGHT NUMBER(3),
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
테이블이 생성되었다.
-- [ 예제 ] SQL Server
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR(40),
NICKNAME VARCHAR(30),
JOIN_YYYY CHAR(4),
POSITION VARCHAR(10),
BACK_NO TINYINT,
NATION VARCHAR(20),
BIRTH_DATE DATE,
SOLAR CHAR(1),
HEIGHT SMALLINT,
WEIGHT SMALLINT,
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
테이블이 생성되었다.
테이블명 : TEAM
테이블 설명 : K-리그 선수들의 소속팀에 대한 정보를 가지고 있는 테이블
칼럼명 : TEAM_ID (팀 고유 ID) 문자 고정 자릿수 3자리,
REGION_NAME (연고지 명) 문자 가변 자릿수 8자리,
TEAM_NAME (한글 팀 명) 문자 가변 자릿수 40자리,
E-TEAM_NAME (영문 팀 명) 문자 가변 자릿수 50자리 ,
ORIG_YYYY (창단년도) 문자 고정 자릿수 4자리,
STADIUM_ID (구장 고유 ID) 문자 고정 자릿수 3자리,
ZIP_CODE1 (우편번호 앞 3자리) 문자 고정 자릿수 3자리,
ZIP_CODE2 (우편번호 뒷 3자리) 문자 고정 자릿수 3자리,
ADDRESS (주소) 문자 가변 자릿수 80자리,
DDD (지역번호) 문자 가변 자릿수 3자리,
TEL (전화번호) 문자 가변 자릿수 10자리,
FAX (팩스번호) 문자 가변 자릿수 10자리,
HOMEPAGE (홈페이지) 문자 가변 자릿수 50자리,
OWNER (구단주) 문자 가변 자릿수 10자리,
제약조건 : 기본 키(PRIMARY KEY) → TEAM_ID
(제약조건명은 TEAM_ID_PK) NOT NULL → REGION_NAME, TEAM_NAME, STADIUM_ID
(제약조건명은 미적용)
-- [ 예제 ] Oracle
CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR2(8) NOT NULL,
TEAM_NAME VARCHAR2(40) NOT NULL,
E_TEAM_NAME VARCHAR2(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR2(80),
DDD VARCHAR2(3),
TEL VARCHAR2(10),
FAX VARCHAR2(10),
HOMEPAGE VARCHAR2(50),
OWNER VARCHAR2(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);
테이블이 생성되었다.
-- [ 예제 ] SQL Server
CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR(8) NOT NULL,
TEAM_NAME VARCHAR(40) NOT NULL,
E_TEAM_NAME VARCHAR(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR(80),
DDD VARCHAR(3),
TEL VARCHAR(10),
FAX VARCHAR(10),
HOMEPAGE VARCHAR(50),
OWNER VARCHAR(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);
테이블이 생성되었다.
-- [ 실행 결과 ] Oracle
DESCRIBE PLAYER;
칼럼 NULL 가능 데이터 유형
------------------ ----------- --------------
PLAYER_ID NOT NULL CHAR(7)
PLAYER_NAME NOT NULL VARCHAR2(20)
TEAM_ID NOT NULL CHAR(3)
E_PLAYER_NAME VARCHAR2(40)
NICKNAME VARCHAR2(30)
JOIN_YYYY CHAR(4)
POSITION VARCHAR2(10)
BACK_NO NUMBER(2)
NATION VARCHAR2(20)
BIRTH_DATE DATE
SOLAR CHAR(1)
HEIGHT NUMBER(3)
WEIGHT NUMBER(3)
-- [ 실행 결과 ] SQL Server
exec sp_help 'dbo.PLAYER'
go
칼럼이름 데이터 유형 길이 NULL 가능
--------------- ---------------- ------ --------
PLAYER_ID CHAR(7) 7 NO
PLAYER_NAME VARCHAR(20) 20 NO
TEAM_ID CHAR(3) 3 NO
E_PLAYER_NAME VARCHAR(40) 40 YES
NICKNAME VARCHAR(30) 30 YES
JOIN_YYYY CHAR(4) 4 YES
POSITION VARCHAR(10) 10 YES
BACK_NO TINYINT 1 YES
NATION VARCHAR(20) 20 YES
BIRTH_DATE DATE 3 YES
SOLAR CHAR(1) 1 YES
HEIGHT SMALLINT 2 YES
WEIGHT SMALLINT 2 YES
-- [ 예제 ] Oracle
CREATE TABLE TEAM_TEMP
AS SELECT * FROM TEAM;
테이블이 생성되었다.
SQL> DESC TEAM_TEMP;
칼럼 Null가능 데이터 유형
----------------------------------------- -------- ----------------------------
TEAM_ID NOT NULL CHAR(3)
REGION_NAME NOT NULL VARCHAR2(8)
TEAM_NAME NOT NULL VARCHAR2(40)
E_TEAM_NAME VARCHAR2(50)
ORIG_YYYY CHAR(4)
STADIUM_ID NOT NULL CHAR(3)
ZIP_CODE1 CHAR(3)
ZIP_CODE2 CHAR(3)
ADDRESS VARCHAR2(80)
DDD VARCHAR2(3)
TEL VARCHAR2(10)
FAX VARCHAR2(10)
HOMEPAGE VARCHAR2(50)
OWNER VARCHAR2(10)
-- [ 예제 ] SQL Server
SELECT * INTO TEAM_TEMP FROM TEAM;
(1개 행이 영향을 받음)
-- [ 실행 결과 ] SQL Server
exec sp_help 'dbo.TEAM_TEMP'
go
칼럼이름 데이터 유형 길이 NULL 가능
--------------- ------------- ---------- ---------
TEAM_ID CHAR(3) 3 NO
REGION_NAME VARCHAR(8) 8 NO
TEAM_NAME VARCHAR(40) 40 NO
E_TEAM_NAME VARCHAR(50) 50 YES
ORIG_YYYY CHAR(4) 4 YES
STADIUM_ID CHAR(3) 3 NO
ZIP_CODE1 CHAR(3) 3 YES
ZIP_CODE2 CHAR(3) 3 YES
ADDRESS VARCHAR(80) 80 YES
DDD VARCHAR(3) 3 YES
TEL VARCHAR(10) 10 YES
FAX VARCHAR(10) 10 YES
HOMEPAGE VARCHAR(50) 50 YES
OWNER VARCHAR(10) 10 YES
ALTER TABLE 테이블명 ADD 추가할 칼럼명 데이터 유형;
-- [ 예제 ] Oracle
ALTER TABLE PLAYER ADD (
ADDRESS VARCHAR2(80)
);
테이블이 변경되었다.
SQL> DESC PLAYER;
Name Null 가능 Type
----------------------------------------- -------- ----------------------------
PLAYER_ID NOT NULL CHAR(7)
PLAYER_NAME NOT NULL VARCHAR2(20)
TEAM_ID NOT NULL CHAR(3)
E_PLAYER_NAME VARCHAR2(40)
NICKNAME VARCHAR2(30)
JOIN_YYYY CHAR(4)
POSITION VARCHAR2(10)
BACK_NO NUMBER(2)
NATION VARCHAR2(20)
BIRTH_DATE DATE
SOLAR CHAR(1)
HEIGHT NUMBER(3)
WEIGHT NUMBER(3)
ADDRESS VARCHAR2(80) ☜ 추가된 열
-- [ 예제 ] SQL Server
ALTER TABLE PLAYER ADD ADDRESS VARCHAR(80);
명령이 완료되었다.
-- [ 실행 결과 ] SQL Server
exec sp_help 'dbo.PLAYER'
go
칼럼이름 데이터 유형 길이 NULL 가능
--------------- ------------ ----------- -------
PLAYER_ID CHAR(7) 7 NO
PLAYER_NAME VARCHAR(20) 20 NO
TEAM_ID CHAR(3) 3 NO
E_PLAYER_NAME VARCHAR(40) 40 YES
NICKNAME VARCHAR(30) 30 YES
JOIN_YYYY CHAR(4) 4 YES
POSITION VARCHAR(10) 10 YES
BACK_NO TINYINT 1 YES
NATION VARCHAR(20) 20 YES
BIRTH_DATE DATE 3 YES
SOLAR CHAR(1) 1 YES
HEIGHT SMALLINT 2 YES
WEIGHT SMALLINT 2 YES
ADDRESS VARCHAR(80) 80 YES ☜ 추가된 열
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;
-- [ 예제 ] Oracle
ALTER TABLE PLAYER
DROP COLUMN ADDRESS;
테이블이 변경되었다.
-- [ 예제 ] SQL Server
ALTER TABLE PLAYER
DROP COLUMN ADDRESS;
명령이 완료되었다.
-- [ 실행 결과 ] Oracle
SQL> DESC PLAYER;
Name Null? Type
----------------------------------------- -------- ----------------------------
PLAYER_ID NOT NULL CHAR(7)
PLAYER_NAME NOT NULL VARCHAR2(20)
TEAM_ID NOT NULL CHAR(3)
E_PLAYER_NAME VARCHAR2(40)
NICKNAME VARCHAR2(30)
JOIN_YYYY CHAR(4)
POSITION VARCHAR2(10)
BACK_NO NUMBER(2)
NATION VARCHAR2(20)
BIRTH_DATE DATE
SOLAR CHAR(1)
HEIGHT NUMBER(3)
WEIGHT NUMBER(3)
-- [ Oracle ]
ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
칼럼명2 데이터 유형 ...);
-- [ SQL Server ]
ALTER TABLE 테이블명
ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
칼럼명2 데이터 유형 ...);
-- [ 예제 ] Oracle
ALTER TABLE TEAM_TEMP
MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
테이블이 변경되었다.
-- [ 예제 ] SQL Server
ALTER TABLE TEAM_TEMP
ALTER COLUMN ORIG_YYYY VARCAHR(8) NOT NULL;
명령이 완료되었다.
ALTER TABLE TEAM_TEMP
ADD CONSTRAINT DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY;
명령이 완료되었다.
-- [ 실행 결과 ] Oracle
SQL> DESC TEAM_TEMP;
Name Null? Type
----------------------------------------- -------- ----------------------------
TEAM_ID NOT NULL CHAR(3)
REGION_NAME NOT NULL VARCHAR2(8)
TEAM_NAME NOT NULL VARCHAR2(40)
E_TEAM_NAME VARCHAR2(50)
ORIG_YYYY NOT NULL VARCHAR2(8) ☜ 기본값 '20020129'
STADIUM_ID NOT NULL CHAR(3)
ZIP_CODE1 CHAR(3)
ZIP_CODE2 CHAR(3)
ADDRESS VARCHAR2(80)
DDD VARCHAR2(3)
TEL VARCHAR2(10)
FAX VARCHAR2(10)
HOMEPAGE VARCHAR2(50)
OWNER VARCHAR2(10)
SQL> SELECT COLUMN_NAME,
2 NULLABLE,
3 DATA_TYPE||'('||DATA_LENGTH||')' AS DATA_TYPE,
4 DATA_DEFAULT
5 FROM USER_TAB_COLUMNS
6 WHERE TABLE_NAME = 'TEAM_TEMP'
7 ;
COLUMN_NAME NULLABLE DATA_TYPE DATA_DEFAULT
-------------------- ---------- -------------------- --------------------
TEAM_ID N CHAR(3)
REGION_NAME N VARCHAR2(8)
TEAM_NAME N VARCHAR2(40)
E_TEAM_NAME Y VARCHAR2(50)
ORIG_YYYY N VARCHAR2(8) '20020129'
STADIUM_ID N CHAR(3)
ZIP_CODE1 Y CHAR(3)
ZIP_CODE2 Y CHAR(3)
ADDRESS Y VARCHAR2(80)
DDD Y VARCHAR2(3)
TEL Y VARCHAR2(10)
FAX Y VARCHAR2(10)
HOMEPAGE Y VARCHAR2(50)
OWNER Y VARCHAR2(10)
-- [ 실행 결과 ] SQL Server
exec sp_help 'dbo.TEAM_TEMP'
go
칼럼이름 데이터 유형 길이 NULL 가능
-------------- --------------- --------- ------------
TEAM_ID CHAR(3) 3 NO
REGION_NAME VARCHAR(8) 8 NO
TEAM_NAME VARCHAR(40) 40 NO
E_TEAM_NAME VARCHAR(50) 50 YES
ORIG_YYYY CHAR(4) 4 YES
STADIUM_ID CHAR(3) 3 NO
ZIP_CODE1 CHAR(3) 3 YES
ZIP_CODE2 CHAR(3) 3 YES
ADDRESS VARCHAR(80) 80 YES
DDD VARCHAR(3) 3 YES
TEL VARCHAR(10) 10 YES
FAX VARCHAR(10) 10 YES
HOMEPAGE VARCHAR(50) 50 YES
OWNER VARCHAR(10) 10 YES
constraint_type constraint_name constraint_keys
------------------------------- --------------------- -----------------
DEFAULT on column ORIG_YYYY DF_ORIG_YYYY ('20020129')
ALTER TABLE 테이블명
RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명;
ALTER TABLE PLAYER
RENAME COLUMN PLAYER_ID TO TEMP_ID;
테이블이 변경되었다.
ALTER TABLE PLAYER
RENAME COLUMN TEMP_ID TO PLAYER_ID;
테이블이 변경되었다.
sp_rename 변경해야 할 칼럼명, 새로운 칼럼명, 'COLUMN';
sp_rename 'dbo.TEAM_TEMP.TEAM_ID', 'TEAM_TEMP_ID', 'COLUMN';
-- 주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다.
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;
-- [ 예제 ] Oracle
ALTER TABLE PLAYER
DROP CONSTRAINT PLAYER_FK;
테이블이 변경되었다.
-- [ 예제 ] SQL Server
ALTER TABLE PLAYER
DROP CONSTRAINT PLAYER_FK;
명령이 완료되었다.
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
-- [ 예제 ] Oracle
ALTER TABLE PLAYER
ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
테이블이 변경되었다.
-- [ 예제 ] SQL Server
ALTER TABLE PLAYER
ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
명령이 완료되었다.
-- [ 예제 ] Oracle
DROP TABLE TEAM;
ERROR: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있다.
※ 테이블은 삭제되지 않음
-- [ 예제 ] SQL Server
DROP TABLE TEAM;
ERROR: 엔터티 'TEAM'은 FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다.
※ 테이블은 삭제되지 않음
-- [ 예제 ] Oracle
DELETE TEAM WHERE TEAM_ID = 'K10';
ERROR: 무결성 제약조건(SCOTT.PLAYER_FK)이 위배되었다. 자식 레코드가 발견되었다.
※ 데이터는 삭제되지 않음
-- [ 예제 ] SQL Server
DELETE TEAM WHERE TEAM_ID = 'K10';
ERROR: FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다.
※ 데이터는 삭제되지 않음
RENAME 변경전 테이블명 TO 변경후 테이블명;
sp_rename 변경전 테이블명, 변경후 테이블명;
-- [ 예제 ] Oracle
RENAME TEAM TO TEAM_BACKUP;
테이블 이름이 변경되었다.
RENAME TEAM_BACKUP TO TEAM;
테이블 이름이 변경되었다.
-- [ 예제 ] SQL Server
sp_rename 'dbo.TEAM','TEAM_BACKUP';
주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다.
sp_rename 'dbo.TEAM_BACKUP','TEAM';
주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다.
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
-- [ 예제 ] Oracle
DROP TABLE PLAYER;
테이블이 삭제되었다.
DESC PLAYER;
ERROR: 설명할 객체를 찾을 수 없다.
-- [ 예제 ] SQL Server
DROP TABLE PLAYER;
명령이 완료되었다.
exec sp_help 'dbo.PLAYER';
메시지 15009, 수준 16, 상태 1, 프로시저 sp_help, 줄 66 데이터베이스 'northwind'에 엔터티 'dbo.player'이(가) 없거나 이 작업에 적합하지 않다.
TRUNCATE TABLE PLAYER;
-- [ 예제 ] Oracle
TRUNCATE TABLE TEAM;
테이블이 트렁케이트되었다.
-- [ 예제 ] SQL Server
TRUNCATE TABLE TEAM;
명령이 완료되었다.
-- [ 실행 결과 ] Oracle
SQL> DESC TEAM;
Name Null? Type
----------------------------------------- -------- ----------------------------
TEAM_ID NOT NULL CHAR(3)
REGION_NAME NOT NULL VARCHAR2(8)
TEAM_NAME NOT NULL VARCHAR2(40)
E_TEAM_NAME VARCHAR2(50)
ORIG_YYYY CHAR(4)
STADIUM_ID NOT NULL CHAR(3)
ZIP_CODE1 CHAR(3)
ZIP_CODE2 CHAR(3)
ADDRESS VARCHAR2(80)
DDD VARCHAR2(3)
TEL VARCHAR2(10)
FAX VARCHAR2(10)
HOMEPAGE VARCHAR2(50)
OWNER VARCHAR2(10)
-- [ 예제 ] Oracle
DROP TABLE TEAM;
테이블이 삭제되었다.
DESC TEAM;
ERROR: 설명할 객체를 찾을 수 없다.
-- [ 예제 ] SQL Server
DROP TABLE TEAM;
명령이 완료되었다.
exec sp_help 'dbo.TEAM';
메시지 15009, 수준 16, 상태 1, 프로시저 sp_help, 줄 66 데이터베이스 'northwind'에 엔터티 'dbo.TEAM'이(가) 없거나 이 작업에 적합하지 않다.
- 강좌 URL : http://www.gurubee.net/lecture/2368
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.