쌓고 쌓다

[SQL] SQL로 테이블 만들기 본문

프로그래밍/SQL

[SQL] SQL로 테이블 만들기

승민아 2022. 7. 10. 22:49

테이블은 행과 열로 구성

행 : 로우 또는 레코드

열 : 컬럼 또는 필드

 

데이터베이스 생성

DROP DATABASE IF EXISTS naver_db;
CREATE DATABASE naver_db;

 

member 테이블 생성

USE naver_db;
DROP TABLE IF EXISTS member;
CREATE TABLE member
(
    mem_id CHAR(8), -- 회원 아이디(PK)
    mem_name VARCHAR(10), -- 이름
    mem_number TINYINT, -- 인원 수
    addr CHAR(2), -- 주소(경기,서울,경남 2글지)
    phone1 CHAR(3), -- 국번(02, 031, 070)
    phone2 CHAR(8), -- 나머지 전화번호 (하이픈제외)
    height TINYINT UNSIGNED, -- 평균 키
    debut_data DATE -- 데뷔 일자
);

 

+ member 테이블에 NULL, NOT NULL 옵션 추가

CREATE TABLE member
(
    mem_id CHAR(8) NOT NULL, -- 회원 아이디(PK)
    mem_name VARCHAR(10) NOT NULL, -- 이름
    mem_number TINYINT NOT NULL, -- 인원 수
    addr CHAR(2) NOT NULL, -- 주소(경기,서울,경남 2글지)
    phone1 CHAR(3) NULL, -- 국번(02, 031, 070)
    phone2 CHAR(8) NULL, -- 나머지 전화번호 (하이픈제외)
    height TINYINT UNSIGNED NULL, -- 평균 키
    debut_data DATE NULL -- 데뷔 일자
);
  • NULL : 빈 값을 허용한다는 의미
  • NOT NULL : 반드시 값을 넣어야 함
  • 아무것도 지정하지 않으면 기본값으로 NULL이다.

 

+ member 테이블에 기본키 옵션 추가

CREATE TABLE member
(
	...
	mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 회원 아이디(PK)
	...
);
  • 기본 키로 지정된 열에는 NOT NULL을 생략해도 NOT NULL로 취급함.
  • 즉 PK는 NOT NULL이 기본이며 NULL 값 허용 안됨.

 

buy 테이블 생성

일단 외래키를 제외하고 작성해보겠다.

DROP TABLE IF EXISTS buy;
CREATE TABLE buy
(
    num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
    mem_id CHAR(8) NOT NULL, -- 아이디(FK)
    prod_name CHAR(6) NOT NULL, -- 제품 이름
    group_name CHAR(4) NULL, -- 분류
    price INT UNSIGNED NOT NULL, -- 가격
    amount SMALLINT UNSIGNED NOT NULL -- 수량
);
  • 순번(num) 열처럼 AUTO_INCREMENT로 지정한 열은 PRIMARY KEY나 UNIQUE로 꼭 지정해야 한다.

 

+ 구매 테이블(buy)의 아이디(mem_id) 열을 회원 테이블의 아이디 열의 외래 키로 설정 

CREATE TABLE buy
(
    ...
    mem_id CHAR(8) NOT NULL, -- 아이디(FK)
    ...
    FOREIGN KEY(mem_id) REFERENCES member(mem_id) -- 추가
    ...
);
  • FOREIGN KEY 예약어로 테이블의 마지막에 작성.

마지막 열의 뒤에 콤마(,) 입력 후 외래 키와 관련된 문장을 작성.

'이 테이블의 mem_id 열을 member 테이블의 mem_id 열과 외래 키 관계로 연결하라'라는 의미 문장.

이 테이블의 mem_id 열은 혼자 존재하는 것이 아니라, 반드시 member 테이블의 mem_id에도 값이 있어야 함.

 

데이터 입력

1. 먼저, member 테이블에 데이터부터 입력해보겠다.

INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015-10-19');
INSERT INTO member VALUES('BLK', '블랭핑크', 4, '경남', '055', '22222222', 163, '2016-8-8');
INSERT INTO member VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015-1-15');
  • DATE로 지정된 열에는 연.월.일 또는 연-월-일 형식으로 값을 입력한다.

member 테이블에 'TWC', 'BLK', 'WMN'이 추가되었다.

 

2. buy 테이블에 3건의 데이터를 입력해보겠다.

단, member 테이블에 없는 mem_id인 'APN'을 외래키로 입력해보았다.

INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2);
INSERT INTO buy VALUES(NULL, 'BLK', '맥북프로', '디지털', 1000, 1);
INSERT INTO buy VALUES(NULL, 'APN', '아이폰', '디지털', 200, 1);

 

아래와 같은 에러가 뜬다.

이는 'APN'이 회원 테이블(member)에 존재하지 않아서 오류가 발생한 것이다. 

 

모든 내용은 "혼자 공부하는 SQL" 교재를 통해 학습한 후, 정리한 글입니다.

Comments