[DB] SQL 기초 및 테이블 생성
드디어 SQL로 DB 실습을 진행해 볼것이다!! ( 매우 신난다!!! ☆: .。. o(≧▽≦)o .。.:☆ )
▶ SQL 개요
- DB 언어 역할을 한다.
- 데이터 정의어: DDL(Data Definition Language)
- 스키마를 정의하거나, 수정 또는 삭제하기 위해서 사용한다.
- 데이터 정의어: DDL(Data Definition Language)
- 데이터 조작어: DML(Data Manipulation Language)
- 데이터의 삽입, 삭제, 수정, 검색 등의 처리를 요구하기 위해서 사용한다.
- 데이터 제어어: DCL((Data Control Language)
- 내부적으로 필요한 규칙이나 기법을 정의하기 위해서 사용한다. SQL(Structured Query Language)
-
SQL 표준화가 되어있어 RDBMS 간의 전환이 용이하다.
-
관계 대수를 기초로 한다.
▶ SQL 실행 단축키
- 1개의 SQL문 실행
- 현재 커서가 있는 SQL 문장 하나를 실행 시키려면 [Ctrl+Enter] 누르기
- 여러개(다중) SQL문 실행
- 실행하고자 하는 SQL문들의 영역을 드래그한 후 [Ctrl+Shift+Enter] 누르기
- SQL창의 전체 모두 실행
- SQL창의 모든 SQL문을 실행시키려면 아무것도 선택하지 않고 [Ctrl+Shift+Enter] 누르기
▶ 계정 비밀번호 변경
- 모든 접속 주소(%)에 대해 계정명의 비밀번호를 ‘비밀번호’로 변경한다.
- @는 all을 의미한다.
ALTER USER ‘계정명’@’%’ IDENTIFIED BY ‘비밀번호’;
▶ 구조 확인
▷ DB 구조 확인
SHOW DATABASES;
▷ 테이블 목록 확인
SHOW TABLES;
▷ 테이블 구조 확인
- 테이블의 구조 자세히 확인
SHOW CREATE TABLE 테이블명;
- 테이블 구조 간단히 확인
DESC 테이블명; /* = DESCRIBE 테이블명; */
▶ DB 구축 절차
① DB(스키마 생성) -> ② 기본 작업 DB 지정 -> ③ 테이블 생성 -> ④ 데이터 입력 순으로 DB를 구축한다!
간단한 예시로 아래와 같은 테이블을 생성해보자!
학번 | 이름 | 학년 | 학과 |
---|---|---|---|
100 | 박시은 | 3 | 경영 |
300 | 한송비 | 1 | 컴공 |
200 | 고하언 | 3 | 산경 |
200 | 해하준 | 4 | 정통 |
# 1
CREATE DATABASE student
# 2
USE student;
# 3
CREATE TABLE 학생(
학번 INT,
이름 VARCHAR(5),
학년 TINYINT,
학과 VARCHAR(7)
);
# 4
INSERT INTO 학생 VALUES(100, "박시은", 3, "경영");
INSERT INTO 학생 VALUES(300, "한송비", 1, "컴공");
INSERT INTO 학생 VALUES(200, "고나언", 3, "산경");
INSERT INTO 학생 VALUES(200, "해하준", 4, "정통");
# 5. 테이블 확인!
SELECT * FROM 학생;
🐈 이제 자세히 알아보도록 하자!
① DB(스키마) 생성 [CREATE DATABASE]
형식
CREATE DATABASE 데이터베이스이름;
② 기본 작업 DB 지정 [USE]
형식
USE 데이터베이스이름;
- 처음 접근할 때 DEFAULT SCHEMA를 작성하면 기본 작업 DB 설정이 필요 없다.
- 볼드체로 나와있는 것이 기본작업 DB로 설정되어있다는 의미
③ 테이블 생성 [CREATE TABLE]
형식
CREATE TABLE 테이블이름(
{열이름 데이터타입}+
);
예시 1
CREATE TABLE 테이블이름(
번호 INT,
제목 VARCHAR(30),
가격 INT);
예시 2
CREATE TABLE [ IF NOT EXISTS ] 테이블이름 // 0
( {열이름 데이터타입 [NOT NULL | NULL] [DEFAULT 값],}+ // 1
[CONSTRAINT 이름] [PRIMARY KEY (열이름_리스트),] // 2
{[CONSTRAINT 이름] [UNIQUE (열이름_리스트),]}* //
{[CONSTRAINT 이름] [FOREIGN KEY(열이름_리스트) // 3
REFERENCES 기본테이블[(열이름_리스트)] //
[ON DELETE 옵션] //
[ON UPDATE 옵션] ,]} * //
{[CONSTRAINT 이름] [CHECK(조건)]}* // 4
);
- IF NOT EXISTS : IF NOT EXISTS를 명시하지 않은 경우 생성하는 DB가 이미 존재하면 에러 발생 [ ]은 선택적 옵션
- NOT NULL : null 값을 가지면 안됨 DEFAULT : 속성의 기본 값 설정 개체 무결성 제약조건에 해당
- PRIMARY KEY : 기본키 UNIQUE : 대체키 개체 무결성 제약조건에 해당
- FOREIGN KEY : 외래키
참조 무결성 제약조건에 해당
⚙️옵션 : SET NULL, SET DEFAULT, CASCADE, RESTRICT, NO ACTION
ON DELETE SET NULL : 피참조 튜플이 삭제되면 외래키 값을 NULL로 설정 ON UPDATE CASCADE : 피참조 튜플(열 값)이 갱신되면 갱신된 값이 파급적(연쇄적)으로 갱신
- 삽입/수정 시에도 이 제약조건이 지켜져야 함 데이터 무결성 제약조건에 해당 ex. CHECK(재고량>=0 AND 재고량<=10000)
예시3
CREATE TABLE ENROL // 1
( Sno INT NOT NULL, // 2
Cno CHAR(6) NOT NULL, //
Grade INT, //
PRIMARY KEY(Sno, Cno), // 3
FOREIGN KEY(Sno) REFERENCES STUDENT(Sno) // 4
ON DELETE CASCADE // 5
ON UPDATE CASCADE ), // 6
CHECK( Grade >= 0 AND Grade <= 100 ); // 7
- ENROL 이라는 테이블을 생성
- 이 테이블에는 3개의 속성이 만들어짐
- 기본키
- 외래키 SRUDENT의 외래키를 참조
- STUDENT 튜플이 하나 삭제될 때 외래키값을 같이 삭제
- 수정할 때 외래키도 수정
- 제한
④ 데이터 입력 [INSERT]
형식
INSERT INTO 테이블이름
VALUES (열_값_리스트);
예시
INSERT INTO 테이블이름
VALUES (2500, `아이스 아메리카노`, 3);
▶ 데이터 타입
▷ 정수
데이터 타입 | 설명 |
---|---|
TINYINT | 1바이트 정수 (-128 ~ 127) |
SMALLINT | 2바이트 정수 (-32,768 ~ 32,767) |
MEDIUMINT | 3바이트 정수 (-8,388,608 ~ 8,388,607) |
INT, INTEGER | 4바이트 정수 (-2,147,483,648 ~ 2,147,483,647) |
BIGINT | 8바이트 정수 (-9223372036854775808 ~ 9223372036854775807) |
- UNSIGNED 옵션을 명시하면 0 ~ SIGNED 타입의 최대값 * 2 – 1
- 데이터 타입 뒤에 명시; 예: INT UNSIGNED
- AUTO_INCREMENT: NULL 입력 → 1부터 1씩 자동 증가
- 테이블당 하나의 칼럼만 지정 가능
- SERIAL = BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
▷ 실수
- 부동 소수점 (근사 값 저장)
데이터 타입 | 설명 |
---|---|
FLOAT | 4바이트 실수 |
DOUBLE, REAL | 8바이트 실수 |
- 고정 소수점 (정확한 값 저장)
데이터 타입 | 설명 |
---|---|
DECIMAL[(M[,D])], NUMERIC[(M[,D])], DEC[(M[,D])], FIXED[(M[,D])] |
M: 전체 자리수(최대 65; 기본값 10), D: 소수점 아래 자리수(최대 30; 기본값 0) ex. DECIMAL(5, 2) → -999.99 ~ 999.99 |
▷ 문자열
- 고정길이는 정해진 길이만큼 가변길이는 필요한 길이만큼 저장
데이터 타입 | 설명 |
---|---|
CHAR (길이) | 길이=문자 수. 고정길이문자열(0 ~ 255; 기본값 1) 남은 부분 공백으로 채움. |
VARCHAR (길이) | 가변길이문자열(0 ~ 65535) |
Value | CHAR(4) | 저장공간 | VARCHAR(4) | 저장공간 |
---|---|---|---|---|
‘’ | ‘ ’ | 4B | ‘’ | 1B |
‘ab’ | ‘ab ’ | 4B | ‘ab’ | 3B |
‘abcd’ | ‘ abcd’ | 4B | ‘abcd’ | 5B |
‘abcdefg’ | ‘abcd’ | 4B | ‘abcd’ | 5B |
▷ 날짜 / 시간
데이터 타입 | 설명 |
---|---|
DATE | 날짜 (YYYY-MM-DD) |
TIME | 시간 (hh:mm:ss) |
DATETIME | 날짜+시간 (YYYY-MM-DD hh:mm:ss) |
TIMESTAMP | 날짜+시간 (YYYY-MM-DD hh:mm:ss)’1970-01-01 00:00:00’ UTC을 기점으로 지난 시간을 초로 저장.레코드가 INSERT/UPDATE될 때 자동으로 현재 날짜/시간로 변경됨 |
YEAR | 연도 (YYYY) |
▷ Large Object
- 이미지, 동영상, 사운드 등 파일이 큰 이진 데이터
데이터 타입 | 설명 |
---|---|
TINYBLOB | Binary Large Object. 최대 255B |
BLOB | Binary Large Object. 최대 65,535B |
MEDIUMBLOB | Binary Large Object. 최대 16,777,215B |
LONGBLOB | Binary Large Object. 최대 4,294,657,295B |
- 대용량 텍스트 데이터
데이터 타입 | 설명 |
---|---|
TINYTEXT | 텍스트 데이터. 최대 255B |
TEXT | 텍스트 데이터. 최대 65,535B |
MEDIUMTEXT | 텍스트 데이터. 최대 16,777,215B |
LONGTEXT | 텍스트 데이터. 최대 4,294,657,295B |
▶ 테이블 생성 실습!
- 위에서 배운 것을 바탕으로 테이블을 생성해보자!
📎참조
- https://computer-science-student.tistory.com/309
댓글남기기