쌓고 쌓다
[SQL] SQL로 테이블 만들기 본문
테이블은 행과 열로 구성
행 : 로우 또는 레코드
열 : 컬럼 또는 필드
데이터베이스 생성
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" 교재를 통해 학습한 후, 정리한 글입니다.
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 기준 테이블과 참조 테이블의 데이터 변경 (0) | 2022.07.19 |
---|---|
[SQL] 기본 키(Primary Key), 외래 키(Foreign Key) 설정 (0) | 2022.07.17 |
[SQL] SQL 프로그래밍 ( IF, CASE, WHILE ) (0) | 2022.07.05 |
[SQL] 외부 조인, 상호 조인, 자체 조인 (0) | 2022.07.01 |
[SQL] 내부 조인(INNER JOIN) (0) | 2022.07.01 |
Comments