4 분 소요


드디어 SQL로 DB 실습을 진행해 볼것이다!! ( 매우 신난다!!! : .。. o(≧▽≦)o .。.: )




▶ SQL 개요

  • DB 언어 역할을 한다.
    • 데이터 정의어: 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
	);
  1. IF NOT EXISTS : IF NOT EXISTS를 명시하지 않은 경우 생성하는 DB가 이미 존재하면 에러 발생 [ ]은 선택적 옵션


  1. NOT NULL : null 값을 가지면 안됨 DEFAULT : 속성의 기본 값 설정 개체 무결성 제약조건에 해당


  1. PRIMARY KEY : 기본키 UNIQUE : 대체키 개체 무결성 제약조건에 해당


  1. FOREIGN KEY : 외래키 참조 무결성 제약조건에 해당
    ⚙️옵션 : SET NULL, SET DEFAULT, CASCADE, RESTRICT, NO ACTION
    ON DELETE SET NULL : 피참조 튜플이 삭제되면 외래키 값을 NULL로 설정 ON UPDATE CASCADE : 피참조 튜플(열 값)이 갱신되면 갱신된 값이 파급적(연쇄적)으로 갱신


  1. 삽입/수정 시에도 이 제약조건이 지켜져야 함 데이터 무결성 제약조건에 해당 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
  1. ENROL 이라는 테이블을 생성
  2. 이 테이블에는 3개의 속성이 만들어짐
  3. 기본키
  4. 외래키 SRUDENT의 외래키를 참조
  5. STUDENT 튜플이 하나 삭제될 때 외래키값을 같이 삭제
  6. 수정할 때 외래키도 수정
  7. 제한



④ 데이터 입력 [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

태그: , ,

카테고리:

업데이트:

댓글남기기