본문 바로가기

별걸다하는 IT/데이터베이스 Database

[ORACLE, MYSQL, SQL] CREATE TABLE 테이블 생성하고 주키(기본키) 지정하기, 테이블생성법, 제약조건 설정(NOT NULL)

[데이터베이스 SQL 완전정복 목차]

안녕하세요 ㅎㅎ 오랜만에 돌아온 데이터베이스 관련 포스팅이예요.

오늘은 SQL에서 간단한 테이블 생성 방법과 주키를 등록하는 방법을 알아봅시다.

단순한 SQL사용법이기 때문에 짧은 포스팅이 될 예정이예요.

테이블 생성하는 SQL 

CREATE TABLE 문법 SYNTAX

create table 테이블이름 (
  컬럼명 데이터타입 조건,
  컬럼명 데이터타입 조건,
  ... 
  컬럼명 데이터타입 조건
);

테이블을 만드려면 create table 키워드를 사용하면 됩니다. 문법은 매우 간단해요.

 

데이터타입 종류

그러면 컬럼에 줄 수 있는 데이터타입 종류로는 뭐가 있을까요. 데이터타입에 대해서는 나중에 더 자세히 알아보도록 하고, 간단하게 우리가 어떤 타입을 이용해 선언할 수 있는지 대표적인 타입만 몇 개 훑고 넘어갈게요

각 DBMS별로 지원하는 데이터 타입이 있고 지원하지 않는 데이터 타입이 있으니 사용하실 타입이 지원되는지 확인하고 넘어가도록 합시당 

데이터타입 의미
CHAR 특정 문자열 개수를 지정할 때 (ex. char(10)- 10자리 문자열)
VARCHAR 가변길이의 문자열을 저장할 때 사용합니다. 최대 길이를 지정합니다.
(오라클의 경우 - 이전버전으로, 현재 사용하지 않음)
VARCHAR2 가변길이의 문자열을 저장할 때 사용합니다. 최대 길이를 지정합니다. (MySQL, MariaDB 지원안함) 
NUMBER 숫자에 사용되는 데이터 타입입니다. 소수점 저장 가능해요 (MYSQL, MariaDB의 경우 INT로 사용)
DECIMAL 숫자에 사용되는 데이터 타입입니다. 소수점 저장 가능해요
(오라클에서는 내부적으로 NUMBER로 변환되어 사용됩니다.) 
DATE 날짜에 사용되는 데이터타입입니다. 

제약 조건 알아보기 

조건에 들어갈 수 있는 키워드를 알아봅시다. 키워드는 MySQL이냐 ORACLE이냐 등 DBMS에 따라 차이가 있어요.

제약조건 의미
NOT NULL 값이 꼭 입력되어야 할 때 사용합니다. NULL을 허용하지 않음. 
UNIQUE 해당 컬럼에 중복 값을 허용하고 싶지 않을 때 사용합니다.
PRIMARY KEY 기본키를 지정할 때 사용하는 조건입니다. 테이블 당 한개의 기본키만 생성 가능해요.
FOREGIN KEY  외래키를 지정할 때 사용합니다. (references 키워드랑 같이 쓰여요) 
CHECK 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력받고 싶을 때 사용합니다.
DEFAULT 만약 값이 없이 입력되면 디폴트에 지정된 값으로 입력합니다.
INDEX 인덱스 지정할 때 사용합니다.

기본키, 외래키, 복합키 등 키의 정의에 대해 헷갈리시는 분은 아래 포스팅을 참조해주세요. 

릴레이션 키 개념 - https://jhnyang.tistory.com/71

 

[데이터베이스]릴레이션 키 개념& 종류(기본키, 슈퍼키, 대체키, 복합키, 후보키)&특징, 유일성 최

[데이터베이스] 데이터베이스 완벽 정리 목차 오늘은 데이터베이스 릴레이션 키에 대해서 알아볼거예요. 키의 개념은 영어를 하기 위해서는 알파벳을 알아야 하는 것처럼 기본 중의 기본에 해��

jhnyang.tistory.com

테이블 만들어보기 EXAMPLE

테이블 생성

아래와 같이 5개의 컬럼을 가지는 customer 테이블을 만들어볼게요

address컬럼과 salary 컬럼은 NULL이 들어가도 되지만, ID, name, age는 null이 들어가면 안된다는 조건이 있습니다. 

create table customer (
   ID		int		not null,
   name		varchar(20)	not null,
   age		int		not null,
   address	char(25),
   salary	decimal(18, 2)
);

이렇게 테이블 생성해주면 됩니다.

참고로 기존에 존재하는 테이블과 동일한 구조를 가진 테이블을 생성하고 싶다면 아래와 같이 AS 를 활용하면 됩니다.

CREATE TABLE NEW_TABLE AS 
SELECT * FROM OLD_TABLE WHERE 1=2

 

기본키 제약조건 추가하기

모든 테이블에는 컬럼 한 개 이상으로 구성된 기본키가 있어야 해요. 그런데 위 명령어로는 테이블만 생성되었잖아요. 기본키를 추가해봅시다. 

ALTER TABLE CUSTOMER 
ADD CONSTRAINT pk_customer primary key (ID);

요렇게 추가해주면 됩니다. 만약 기본키가 한 개가 아니라 두개 복합키로 구성하고 싶을 경우, (ID, AGE) 이런식으로 컴마로 같이 써주면 돼요.

ALTER TABLE CUSTOMER 
ADD PRIMARY KEY (ID)

아니면 제약조건명 지정없이 요렇게 추가해주셔도 됩니다. 제약조건명 지정하기 힘드니까,, 저는 첫번째보다는 두번째 쿼리를 많이 사용해요. 

테이블만들때 기본키 같이 추가하기

■ MYSQL, MARIADB

ID 컬럼에 기본키를 지정해봅시다. MYSQL의 경우 primary key라는 키워드를 추가하면 됩니다.

--MYSQL
create table customer (
   ID		int		not null,
   name		varchar(20)	not null,
   age		int		not null,
   address	char(25),
   salary	decimal(18, 2),
   primary	key(ID)    --ID컬럼에 기본키 지정
);

 ORACLE, SQL SEVER, MS ACESS

create table customer (
   ID		int 		not null primary key --이렇게 기본 키를 설정할 수 있다,
   name		varchar(20)	not null,
   age		int		not null,
   address	char(25),
   salary	decimal(18, 2)
);

MYSQL과는 조금 다른데요, 이렇게 primary key를 컬럼 제약조건 옆에 붙여서 지정할 수 있습니다.

■ 공통

create table customer (
  ID		int		not null,
  name		varchar(20)	not null,
  age		int		not null,
  address	char(25),
  salary	decimal(18,2)
  constraint	pk_person primary key (ID)
);

이렇게 마지막에 constraint 부문을 추가해서 기본키를 지정해줄 수 있어요.

결과 확인하기

제약조건 확인하기

참고로 제약조건이 걸렸나 확인하고 싶으면 

select * from all_constraints where table_name ='테이블명'

명령으로 확인할 수 있습니다. 

select * from all_constraints 
where table_name = 'CUSTOMER';

해당 테이블 필드 명 중 CONSTRAINT_TYPE이 있는데 이 값으로 기본키가 잘 걸렸는지, 외래키가 잘 걸렸는지, 등 어떤 제약조건이 걸려 있느니 확인 할 수 있어요.

참고로 P는 primary key 주키를 의미합니다. 

해당 테이블에서 제약조건 이름은 뭔지, 제약조건 종류는 무엇인지, 언제 마지막으로 변경되었는지, 제약조건이 달린 테이블명과 계정은 뭔지 등등을 확인할 수 있어요.

테이블 구조 확인하기 DESC

테이블을 생성하고 난 뒤에는 테이블 구조가 잘 만들어졌는지 확인을 해야겠죠.

DESCRIBE 키워드를 이용해서 확인할 수 있습니다. DESC는 DESCRIBE의 줄임말로 타자 치기 귀찮잖아요 주로 DESC로 씁니다.

하이디SQL
SQL DEVLOPER에서 DESCRIBE CUSTOMER 결과

짠~! 잘 설정된 것을 확인할 수 있습니다.

SQLD 기출문제

1. 다음 중 아래의 데이터 모델과 같은 테이블 및 PK 제약조건을 생성하는 DDL 문장으로 올바른 것은?

PRODUCT 테이블의 IE표기법 (단 DBMS는 Oracle을 기준으로 한다) 

1.

create table product

(

    prod_id varchar2(10) not null, 

    prod_nm varchar2(100) not null,

    reg_dt date not null,

    regr_no number(10) null

);

alter table product add primary key product_pk on (prod_id);

 

2.

create table product

(

    prod_id varchar2(10),

    prod_nm varchar2(100) not null,

    reg_dt date,

    regr_no number(10) 

)

alter table product add constraint product_pk primary key (prod_id);

 

3.

create table product 

(

    prod_id varchar2(10) not null,

    prod_nm varchar2(100) not null,

    reg_dt date not null,

    regr_no number(10) null,

    add constraint primary key (prod_id)

);

 

4.

create table product

(

    prod_id varchar2(10) not null,

    prod_nm varchar2(100) not null,

    reg_dt date not null,

    regr_no number(10),

    constraint product_pk primary key (prod_id)

);

답: 4번

 

오늘은 간단하게 테이블을 생성하고, NOT NULL설정과 함께 기본키 지정을 해봤어요. 다른 제약조건도 같이 살펴보면 좋겠지만 포스팅이 너무 길어질 것 같아서 다음편으로 빼도록 할게요. 

도움이 되셨다면 공감 살포시 어떤가요?! 다음 포스팅에서 봐요~!