2025.02.11 데이터베이스는 MYSQL을 사용할 것이다.
간단한 명령어 정리(CMD에서 사용)
C:\Users\Administrator>mysql -u[루트 이름] -p[루트 password]
database가 어떤게 있는지 보여주는 명령어
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| netflix |
| performance_schema |
| sys |
+--------------------+
database의 테이블이 뭐가 있는지 보여주는 명령어
mysql> use netflix;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_netflix |
+-------------------+
| employee |
| study3_person |
| study_movie |
+-------------------+
table 안에 내용 보여주는명령어
mysql> select * from employee;
+-------------+------------+-----------+-------------------------------+---------------+------------+----------+-------------+------------+---------------+
| employee_id | first_name | last_name | email | phone_number | hire_date | salary | department | manager_id | date_of_birth |
+-------------+------------+-----------+-------------------------------+---------------+------------+----------+-------------+------------+---------------+
| 1 | John | Doe | john.doe@example.com | 555-0001 | 2010-05-15 | 55000.00 | Engineering | NULL | 1985-08-12 |
| 2 | Jane | Smith | jane.smith@example.com | 555-0002 | 2015-03-20 | 65000.00 | HR | NULL | 1990-11-23 |
| 3 | Michael | Johnson | michael.johnson@example.com | 555-0003 | 2018-07-01 | 45000.00 | Sales | 1 | 1992-06-30 |
| 4 | Emily | Davis | emily.davis@example.com | 555-0004 | 2017-01-10 | 47000.00 | Engineering | 1 | 1993-04-25 |
| 5 | William | Brown | williahttp://m.brown@example.com | 555-0005 | 2019-11-15 | 70000.00 | Marketing | NULL | 1988-02-19 |
| 6 | Olivia | Martinez | olivia.martinez@example.com | 555-0006 | 2020-09-01 | 60000.00 | Sales | 3 | 1991-12-05 |
| 7 | Sophia | Wilson | sophia.wilson@example.com | 555-0007 | 2016-04-22 | 55000.00 | Engineering | 1 | 1987-07-17 |
| 8 | James | Moore | james.moore@example.com | 555-0008 | 2014-06-10 | 48000.00 | Engineering | 1 | 1984-10-14 |
| 9 | Charlotte | Taylor | charlotte.taylor@example.com | 555-0009 | 2022-01-01 | 40000.00 | HR | 2 | 1995-01-11 |
| 10 | Benjamin | Anderson | benjamin.anderson@example.com | 555-0010 | 2011-09-18 | 55000.00 | Marketing | 5 | 1982-03-21 |
| 11 | Amanda | Roberts | amanda.roberts@example.com | 555-0011 | 2013-03-12 | 55000.00 | Engineering | 1 | 1987-06-14 |
| 12 | Ethan | King | ethan.king@example.com | 555-0012 | 2014-04-05 | 45000.00 | Sales | 3 | 1992-01-21 |
| 13 | Grace | Lee | grace.lee@example.com | 555-0013 | 2017-02-20 | 52000.00 | Marketing | NULL | 1990-05-30 |
| 14 | Henry | Garcia | henry.garcia@example.com | 555-0014 | 2021-05-18 | 60000.00 | Sales | 3 | 1994-03-01 |
| 15 | Isabella | Harris | isabella.harris@example.com | 555-0015 | 2016-07-11 | 48000.00 | HR | 2 | 1993-09-25 |
| 16 | Jack | Scott | jack.scott@example.com | 555-0016 | 2019-09-01 | 65000.00 | Marketing | 5 | 1992-02-14 |
| 17 | Lily | White | lily.white@example.com | 555-0017 | 2022-04-12 | 46000.00 | Engineering | 1 | 1994-07-28 |
| 18 | Mason | Martinez | mason.martinez@example.com | 555-0018 | 2018-11-21 | 55000.00 | Sales | 3 | 1991-12-04 |
| 19 | Noah | Young | noah.young@example.com | 555-0019 | 2015-10-30 | 62000.00 | HR | 2 | 1990-08-01 |
| 20 | Olivia | Baker | olivia.baker@example.com | 555-0020 | 2020-12-15 | 54000.00 | Marketing | 5 | 1995-01-17 |
| 21 | Liam | Davis | liahttp://m.davis@example.com | 555-0021 | 2017-08-18 | 50000.00 | Engineering | 1 | 1991-09-14 |
| 22 | Sophia | Miller | sophia.miller@example.com | 555-0022 | 2019-10-20 | 48000.00 | HR | 2 | 1992-12-12 |
| 23 | David | Lee | david.lee@example.com | 555-0023 | 2015-01-25 | 47000.00 | Sales | 3 | 1990-04-10 |
| 24 | Mia | Moore | mia.moore@example.com | 555-0024 | 2020-03-05 | 54000.00 | HR | 2 | 1996-09-15 |
| 25 | Lucas | Wilson | lucas.wilson@example.com | 555-0025 | 2018-06-10 | 55000.00 | Engineering | 1 | 1992-11-03 |
| 26 | Zoe | Martinez | zoe.martinez@example.com | 555-0026 | 2019-02-01 | 56000.00 | Sales | 3 | 1993-01-28 |
| 27 | Benjamin | Harris | benjamin.harris@example.com | 555-0027 | 2014-09-01 | 58000.00 | HR | 2 | 1988-07-25 |
| 28 | Megan | Clark | megan.clark@example.com | 555-0028 | 2018-12-12 | 57000.00 | Engineering | 1 | 1991-08-05 |
| 29 | Charlotte | Lopez | charlotte.lopez@example.com | 555-0029 | 2020-10-15 | 51000.00 | Sales | 3 | 1995-03-14 |
| 30 | Aiden | Wilson | aiden.wilson@example.com | 555-0030 | 2016-07-22 | 50000.00 | Marketing | 5 | 1990-09-04 |
| 31 | Evelyn | Roberts | evelyn.roberts@example.com | 555-0031 | 2019-11-20 | 53000.00 | Engineering | 1 | 1992-04-16 |
| 32 | Emma | Taylor | emma.taylor@example.com | 555-0032 | 2017-02-14 | 55000.00 | Sales | 3 | 1991-11-25 |
| 33 | Jack | Moore | jack.moore@example.com | 555-0033 | 2015-06-05 | 48000.00 | HR | 2 | 1994-02-12 |
| 34 | Olivia | Anderson | olivia.anderson@example.com | 555-0034 | 2021-04-01 | 52000.00 | Engineering | 1 | 1996-08-14 |
| 35 | Daniel | Martinez | daniel.martinez@example.com | 555-0035 | 2014-02-12 | 54000.00 | Sales | 3 | 1990-07-21 |
| 36 | Emily | Brown | emily.brown@example.com | 555-0036 | 2020-08-03 | 50000.00 | HR | 2 | 1993-03-01 |
| 37 | Zachary | Wilson | zachary.wilson@example.com | 555-0037 | 2017-07-22 | 52000.00 | Engineering | 1 | 1992-09-09 |
| 38 | Grace | Scott | grace.scott@example.com | 555-0038 | 2018-06-20 | 54000.00 | Sales | 3 | 1994-11-12 |
| 39 | Harper | Taylor | harper.taylor@example.com | 555-0039 | 2015-05-30 | 48000.00 | HR | 2 | 1990-02-10 |
| 40 | Ella | Martinez | ella.martinez@example.com | 555-0040 | 2016-11-15 | 52000.00 | Engineering | 1 | 1993-01-22 |
| 41 | Oliver | Garcia | oliver.garcia@example.com | 555-0041 | 2020-07-09 | 54000.00 | Sales | 3 | 1991-08-19 |
| 42 | Luna | Hernandez | luna.hernandez@example.com | 555-0042 | 2018-09-30 | 60000.00 | HR | 2 | 1995-11-11 |
| 43 | Gabriel | White | gabriel.white@example.com | 555-0043 | 2017-01-01 | 46000.00 | Marketing | 5 | 1994-03-09 |
| 44 | Chloe | Johnson | chloe.johnson@example.com | 555-0044 | 2016-05-15 | 52000.00 | Engineering | 1 | 1992-07-03 |
| 45 | Matthew | Davis | matthew.davis@example.com | 555-0045 | 2021-08-23 | 49000.00 | Sales | 3 | 1993-04-01 |
| 46 | Mia | Lopez | mia.lopez@example.com | 555-0046 | 2020-01-12 | 55000.00 | HR | 2 | 1996-10-30 |
| 47 | Ryan | Miller | ryan.miller@example.com | 555-0047 | 2018-11-05 | 46000.00 | Marketing | 5 | 1992-09-23 |
| 48 | Carter | Evans | carter.evans@example.com | 555-0048 | 2019-10-10 | 52000.00 | Engineering | 1 | 1990-01-14 |
| 49 | Ella | Allen | ella.allen@example.com | 555-0049 | 2017-02-20 | 54000.00 | Sales | 3 | 1995-06-03 |
| 53 | 상엽 | 배 | sangyup.bae@example.com | 123-1234 | 2010-05-15 | 50000.00 | Engineering | NULL | 1985-08-12 |
| 54 | 길동 | 홍 | hgd@naver.com | 010-0000-0001 | 2025-01-31 | 50000.00 | Marketing | 1 | 1998-01-01 |
| 55 | 영희 | 김 | kkkaad@naver.com | NULL | 2024-01-01 | NULL | NULL | NULL | NULL |
| 56 | 병헌 | 이 | bhl@naver.com | 010-333-4546 | 1970-01-01 | NULL | NULL | NULL | NULL |
+-------------+------------+-----------+-------------------------------+---------------+------------+----------+-------------+------------+---------------+
테이블의 구조를 보여주는 명령어
mysql> desc employee;
+---------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+----------------+
| employee_id | int | NO | PRI | NULL | auto_increment |
| first_name | varchar(50) | NO | | NULL | |
| last_name | varchar(50) | NO | | NULL | |
| email | varchar(100) | NO | UNI | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| salary | decimal(10,2) | YES | | NULL | |
| department | varchar(50) | YES | | NULL | |
| manager_id | int | YES | | NULL | |
| date_of_birth | date | YES | | NULL | |
+---------------+---------------+------+-----+---------+----------------+
DBMS
- 정의 기능(Definition Facility) : 데이터의 형태, 구조 등 데이터베이스의 저장에 관한 여러 가지 사항을 정의하는 기능
- 조작 기능(Manipulation Facility) : 사용자가 이용할 수 있도록 요구에 따라 검색, 갱신, 삽입, 삭제 등을 지원하는 기능
- 제어 기능(Control Facility) : 데이터의 정확성과 안전성 유지를 위한 기능으로, 데이터 무결성 유지, 보안, 병행 제어 등을 제공
장점
- 데이터의 중복성과 종속성 최소화
- 데이터의 독립성 유지
- 일관성 유지
- 무결성 유지
- 사용자 간의 데이터 공유
- 보안 유지가 가능
- 데이터의 표준화 구현이 가능
단점
- 많은 운영비 소요
- 자료 처리가 복잡
- Backup(백업)과 Recovery(회복)의 어려움
DBMS-1
데이터베이스 언어의 종류
- 정의어(DDL : Data Definition Language)
-
데이터베이스 구조를 정의 및 수정하기 위해 사용되는 언어
-
- 조작어(DML : Data Maniuplation Language)
-
데이터베이스 내의 자료를 검색, 삽입, 수정, 삭제하기 위해 사용되는 언어
-
- 제어어(DCL : Data Control Language)
-
데이터베이스의 데이터 무결성 유지, 보안, 병행 제어, 보호와 관리를 위한 언어
-
DB구조 - 스키마
- 내부 스키마(Internal Schema)
- 물리적 저장 장치 관점에서 본 DB의 물리적인 구조
- 개념 스키마(Conceptual Schema)
-
논리적 관점(사용자) 에서 본 전체적인 데이터 구조
-
- 외부 스키마(Internal Schema)
-
사용자가 사용하는 한 부분에서 본 논리적 구조
-
서브스키마라고도 함
-
데이터 모델 정의와 종류
- 구조(Structure) : 논리적으로 표현된 개체 타입들 간의 관계
- 연산(Operation) : DB에 저장된 실제 데이터를 처리하는 작업에 대한 명세
- 제약 조건(Constraint) : DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건
- 개체(Entity)
- 데이터베이스에 표현하려는 것, 서로 연관된 몇 개의 속성으로 구성
- 구성(Attribute) = 속성
- 데이터의 가장 작은 논리적 단위, 파일 구조상 데이터의 항목 또는 필드에 해당
- 개체를 구성하는 항목
- 관계(Relationship)
- 개체간의 관계 또는 속성간의 관계, 1:1관계, 1:다 관계, 다:다 관계 등
E-R 모델
개체-관계(Entity-RelationShip) 모델의 특징
- 개체타입과 이들 간의 관계 타입을 이용해 현실 세계를 개념적으로 표현


DB 설계
데이터베이스 설계 : 데이터베이스의 스키마를 정의하고, 이에 따라 DB를 구현하기 위한 전반적인 과정
요구 조건 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현 → 운영 및 개선
- 개념적 설계 : DB의 구성요소를 결정, 수행할 작업과 관계를 설계. E-R모델 이용
- 논리적 설계 : 개념적 설계에서 만들어진 구조를 논리적을 구현 가능한 모델로 변환하는 단계. 스키마 정의.
- 물리적 설계 : 실제 기계가 처리할 수 있도록 내부 저장장치 구조, 접근 경로 등 설계
관계형 데이터베이스

- 튜플의 수 : 카디널리티(Cardinality) 또는 기수라고도 함
- 속성의 수 : 디그리(Degree) 또는 차수라고도 함

- 후보키(Candidate Key) : 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 유일성과 최소성을 만족해야 한다.
- 기본키(Primary Key) : 후보키 중에서 선택한 주키(Main key), null값을 가질 수 없다. 동일한 값을 중복 저장 할 수 없다.
- 대체키(Alternate Key) : 기본키를 제외한 나머지 후보키
- 슈퍼키(Super Key) : 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키
- 외래키(Foreign Key) : 관계를 맺고 있는 릴레이션에서 학생릴레이션이 참조하고 있는 수강릴레이션의 기본키와 같은 학생 릴레이션의 속성을 외래키라 한다.
제약 조건
- 개체 무결성
- 릴레이션에서 기본키를 구성하는 속성은 NULL 값이나 중복값을 가질 수 없다.
- 참조 무결성
- 외래키 값은 NULL 이거나 참조 릴레이션의 기본키 값과 동일해야 한다.
- 참조 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다.
SQL(Structured Query Language)
- 정의어(DDL)
-
물리적인 구조를 정의하고 관리
-
CREATE(생성)
-
DROP(삭제)
-
ALTER(변경)
-
- 제어어(DCL)
-
사용권한 및 무결성, 병행제어 기능
-
GRANT(권한부여)
-
REVOKE(권한제거)
-
COMMIT(반영)
-
ROLLBACK(취소)
-
- 조작어(DML)
-
데이터를 처리
-
SELECT(선택)
-
DELETE(삭제)
-
INSERT(삽입)
-
UPDATE(갱신)
-
SQL - DDL : CREATE
CREATE TABLE 테이블명칭 (
열명칭1 특성1,
열명칭2 특성2,
열명칭3 특성3,
…,
PRIMARY KEY (열명칭),
FOREIGN KEY (열명칭) REFERENCES 참조테이블명칭(열명칭),
);
CREATE TABLE 학생 (
학번 CHAR(10),
이름 CHAR (5),
전화번호 CHAR (10),
과목코드 CHAR (4),
PRIMARY KEY (학번),
FOREIGN KEY (과목코드) REFERENCES 과목(과목코드),
);

SQL - DDL : VIEW
- 물리적으로 존재하지 않고 논리적으로만 존재한다.
CREATE VIEW 컴퓨터_VIEW(이름, 과목) AS
SELECT 이름, 과목
FROM 학생
WHERE 과목 = ‘컴퓨터’;

SQL - DDL : DROP
DROP TABLE 테이블명칭 ;
DROP TABLE 학생;
- CASCADE : 참조하는 테이블도 모두 제거
RESTRICT : 참조하는 테이블이 있을 경우 제거하지 않음
SQL - DDL : ALTER
ALTER TABLE 학생 ADD 주민번호 CHAR(13);
ALTER TABLE 학생 DROP 전화번호;



SQL – DML : SELECT
SELECT [ALL|DISTINCT] 검색대상
FROM 테이블명
[WHERE 조건식]
[GROUP BY 열명칭]
[HAVING 검색조건]
[ORDER BY 열명칭 [ASC|DESC]];
DISTINCT : 중복된 데이터 한번만 출력
ASC : 오름차순
DESC : 내림차순
SELECT 이름, 과목
FROM 학생
WHERE 과목 = ‘컴퓨터’;

이 테이블을 기반으로 위의 SQL문을 사용하면 김양, 컴퓨터가 출력된다.

다른 SELECT 문 예시
SELECT * FROM 학생 WHERE 이름 LIKE ‘김%’;
SELECT * FROM 학생 WHERE 성적 BETWEEN 70 AND 90;
SELECT * FROM 학생 WHERE 전화번호 IS NULL;
SELECT * FROM 학생 WHERE 과목 = ‘컴퓨터’ ORDER BY 성적 DESC;
SQL – DML : INSERT, UPDATE, DELETE

INSERT INTO 테이블명칭(속성1, 속성2…)
VALUES (데이터 값1, 데이터 값2, …);
INSERT INTO 학과(학과코드, 과목)
VALUES (‘1111’,’컴퓨터’);
DELETE FROM 테이블명칭
[WHERE 조건식];
DELETE FROM 학과
WHERE 학과코드=‘1111’;
UPDATE 테이블명칭
SET 열명칭1 = 변경 값1,열명칭2 = 변경값2…
[WHERE 조건식];
UPDATE 학과
SET 과목 = ‘컴퓨터’
WHERE 학과코드=‘1111’;
뷰(View)
- 논리적 데이터 독립성 제공
- 동일 데이터에 대해 동시에 여러 사용자의 상이한 요구를 지원
- 독립적인 인덱스를 가질 수 없다.
- 뷰의 정의를 변경할 수 없다.
- 삽입, 삭제, 갱신 연산에 제약이 따른다.
SQL 실습
// DB 생성 -> root 계정에서
CREATE DATABASE test;
// MYSQL이 user를 관리하는 테이블로 선택
use mysql;
// user 생성 구문, identified by는 pw 생성 명령어
// user 이름은 mysqluser, 비밀번호는 mysql
create user 'mysqluser'@'localhost' identified by 'mysql';
// 권한 부여, 밑에 존재하는 친구한테도 권한을 부여할 수 있는 권한을 부여
// grant option은 all에 해당하지 않아서 따로 또 지정해야 함.
grant all privileges on test.* to 'mysqluser'@'localhost' with grant option;
// 권한 적용
flush privileges;
제약조건
MYSQL용
PK : Primary key => 기본키 속성 추가
NN : Not Null => 데이터 값으로 null이 오지 못하게 막음
AI : Auto Increment => 자동증가 : 정수만 가능
UQ : UniQue => 중복안됨.
B : Binary 값 (0,1)
UN : Unsigned => 음수 안됨.
ZF : Zero Fill => 숫자앞에 0으로 채움 ex) 0001
G : Genrated => 속성 자동 생성
Binary는 TINYINT에 비해 자릿값이 여유로움.
MYSQL 데이터 자료형
데이터 자료형
숫자
(정수)
- bit(m) : 1~64 Binary 값을 지정
- bool : TRUE(1) / FALSE(0) == TINYINT(1)로 표현
- tinyint(m) : 0~255 사이의 작은수 표현 (-128 ~ 127)
- smallint(m) : 2BYTE 0 ~ 65536 (-32768 ~ 32767)
- mediumint(m) : 3BYTE
- int(m) : java에서의 int와 동일(4byte)
- bigint(m) : java에서의 long과 동일(8byte)
(실수)
- float(m, d) : 정밀도가 작은 부동소수점 표현 (d : 소수자리수)
- double(m, d) : 정밀도가 큰 부동소수점 표현 (d : 소수자리수)
=> mysl 8.0.17 이후로 사용되지 않음. 현재 DECIMAL()로 통합 돼서 사용
- decimal(m, d) : 고정소수점 표현 (d : 소수자리수)
문자
- char(m) : 고정길이 문자열 (0~255)
- varchar(m) : 가변길이 문자열 (0~65536)
- tinytext : 1BYTE 문자열 저장 => 가변길이
- tinyBLOB : Binary 값을 저장할 때 사용 => 이미지,동영상 같은 형식에 사용
=> BLOB은 사이즈별로 있음
- text : 2BYTE 가변길이
- mediumtext : 3BYTE 가변길이
- longtext : 4BYTE
날짜
- date : 날짜 표현
- datetime : 날짜 + 시간 => 제일 많이 사용
- timestamp : insert, update 연산에 유리한 형태
- year : 연도만
- time : 시간만
alter 명령어 사용할 때
add(추가), drop(삭제), modify(수정), change(수정:필드명수정가능)
alter table 테이블명 add 필드명 속성;
ex) alter table student add tel varchar(15);
update 명령어 사용할 때
ex) update student set tel='010-5647-6546' where num=1111;
여기서 where에서 값 대입할 때는 값이 모두 다른것을 선택해야 함.
-- gender 추가
alter table student add gender varchar(2) after age;
-- gender 삭제
alter table student drop gender;
-- gender 속성변경 default m
alter table student modify gender varchar(2) default 'm' after age;
alter table student add gender varchar(2) default 'm' after age;
alter table student change gender gender2 varchar(2) default 'm' after age;
-- 강길순, 유관순만 gender 'w'로 변경
update student set gender = 'w' where num = 2222 or num = 5555;
'Database' 카테고리의 다른 글
| [Do it SQL] Chapter 01-3 / 02-1 (1) | 2025.03.16 |
|---|---|
| [SQL] 오답노트 (0) | 2025.03.04 |
| [DB] 기초공부 3 (0) | 2025.02.14 |
| [DB] 기초공부 2 (0) | 2025.02.13 |
| [DB] 기초공부 1 (1) | 2025.02.12 |