멋쟁이사자처럼 13기/정기 세션

[멋사/Mac OS] 3주차 정기 세션 (Part 3. 데이터베이스 기초 및 설계)

개발자 지망생 리네 2025. 6. 9. 18:44

1. 데이터 유형

(1) 숫자형

- INT, DOUBLE

(2) 문자형

- CHAR, VARCHAR (CHAR: 고정 길이, VARCHAR: 가변 길이)

(3) 날짜 및 시간 타입

- DATE, DATETIME, TIMESTAMP

 

2. 컬럼의 속성

- Primary key (PK) : 각 행을 식별하는 데 사용되는 고유한 식별자

- Foreign key (FK) : 다른 테이블의 기본 키와 관계를 나타내는 컬럼

- Unique : 중복된 값을 허용하지 않음

- Not NULL : NULL 값을 허용하지 않음

- default : 자동으로 할당되는 값

 

*데이터 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것을 보장

 

3. SQL

(1) SQL의 주요 분류

분류 이름 역할 예시
DDL Data Definition Language 데이터 구조 정의 (테이블, 컬럼 등) CREATE, ALTER, DROP
DML Data Manipulation Language 데이터 조작 (삽입, 수정, 삭제) INSERT, UPDATE, DELETE, SELECT
DCL Data Control Language 권한 제어 GRANT, REVOKE
TCL Transaction Control Language 트랜잭션 관리 COMMIT, ROLLBACK, SAVEPOINT
DQL Data Query Language 데이터 조회 전용 (DML에서 SELECT만 따로 보는 경우도 있음) SELECT
CRUD SQL 구문
Create INSERT INTO
Read SELECT
Update UPDATE
Delete DELETE FROM

 

 

(2) SQL문 작성할 때 유의사항

 

1. 예약어를 이름으로 설정하고 싶다면 `로 감싸기

2. 입력받은 서버 시간을 데이터로 사용하고 싶다면 datetime default current_timestamp로

3. 외래키를 사용할 때는 그 전에 이름을 지정하기

4. auto_increment는 insert 항목에서 제외

5. current_timestamp도 insert 항목에서 제외

6. check나 primary key는 해당 열의 코드에 붙여서 작성해도 무방

7. int로 부족한 경우가 있어서 bigint로 작성

CREATE DATABASE shop;
USE shop;
CREATE TABLE Product (
	ProductID bigint NOT NULL AUTO_INCREMENT primary key,
    `Name` varchar(50) NOT NULL,
    Price bigint NOT NULL CHECK (Price>=0),
    Description varchar(100) NOT NULL,
    StockQuantity bigint NOT NULL CHECK (StockQuantity>0)
);

CREATE TABLE Customer (
	CustomerID bigint NOT NULL AUTO_INCREMENT primary key,
    `Name` varchar(50) NOT NULL,
    Email varchar(100) NOT NULL unique,
    Address varchar(100) NOT NULL,
    PaymentInfo varchar(100) NOT NULL
);

CREATE TABLE `Order` (
	OrderID bigint NOT NULL AUTO_INCREMENT primary key,
    OrderDate DATETIME DEFAULT current_timestamp NOT NULL,
	CustomerID BIGINT NOT NULL,
    ProductID BIGINT NOT NULL,
    foreign key(ProductID) references Product (ProductID),
	foreign key(CustomerID) references Customer (CustomerID)
);

INSERT INTO Product (`Name`, Price, Description, StockQuantity) values ("리락쿠마 반팔티", 12000, "리락쿠마 귀여워요", 2);
INSERT INTO Product (`Name`, Price, Description, StockQuantity) values ("치이카와 잠옷 세트", 30000, "치이카와 친구들이 그려져 있어요", 4);
INSERT INTO Customer (`Name`, Email, Address, PaymentInfo) values ("김모씨", "kimman@gmail.com", "한국","결제 정보");
INSERT INTO Customer (`Name`, Email, Address, PaymentInfo) values ("김모양", "kimyang@gmail.com", "미국","결제 정보");
INSERT INTO `Order` (CustomerID, ProductID) values (1,2);
INSERT INTO `Order` (CustomerID, ProductID) values (2,1);

SELECT * FROM Product;
SELECT * FROM Customer;
SELECT * FROM `Order`;