[DB] SQL 연습 (윈도우 MySQL Workbench)

2024. 11. 28. 10:22· CS/DB
목차
  1. sql 연습을 위한 sample 데이터 준비
  2. MySQL Workbench - SQL 실습
  3. DDL
  4. DML
728x90

sql 연습을 위한 sample 데이터 준비

1. 리눅스 컴퓨터에서 파일 받아온 후 ls로 파일이 잘 받아와졌는지 확인

wget [SQL 파일 링크]

 

2. sql 파일에 있는 것들을 한 번에 실행

mariadb -u root -p < [sql 파일]
패스워드 입력

 

 

3. 테이블 있나 확인 후 권한 부여

mariadb -u root -p
show databases;
GRANT ALL PRIVILEGES ON [DB 이름].* TO '[사용자 이름]'@'%';
FLUSH PRIVILEGE;

실습에서는 classicmodels 사용

 

4. 윈도우 MySQL Workbench에서 들어온 거 확인

classicmodels 디비와 테이블들이 잘 들어와있는 것을 확인할 수 있다.

 


 

MySQL Workbench - SQL 실습

실습하기 전 어떤 데이터베이스를 쓸 것인지 선택해야 한다.

 

여기서 내가 쓰고 싶은 데이터베이스를 더블클릭하면 선택된다.

Schema에 들어온 거 확인 후 작업해야 한다.

 

 

빨간 박스 - sql 전체 실행

초록 박스 - 한 줄만 실행


DDL

테이블 생성 (CREATE TABLE)

CREATE TABLE my_table(
name VARCHAR(10),
age INT,
created_at DATETIME,
contents VARCHAR(200)
);
# 회원 테이블 user(idx 숫자 , name (20)글자, id (20)글자, password (256)글자)
CREATE TABLE user(
idx INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
ID VARCHAR(20),
password VARCHAR(256),
profile_img VARCHAR(256) DEFAULT '/images/default.png'
);
# 게시글 테이블 user(idx 숫자, title 글자(100), contents 글자(500), writer user를 참조)
CREATE TABLE board(
idx INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
contents VARCHAR(500),
writer INT,
FOREIGN KEY (writer) REFERENCES user(idx) # 외래키 설정
);
# 좋아요 테이블 likes(user(user 테이블 참조), board(board 테이블 참조))
CREATE TABLE likes (
user INT,
FOREIGN KEY (user) REFERENCES user(idx),
board INT,
FOREIGN KEY (board) REFERENCES board(idx)
);

 

타입

  • 숫자는 INT, 글자는 VARCHAT(글자수)로 나타냄

 

PRIMARY KEY, AUTO_INCREMENT

  • primary 키 지정, 키 자동 설정 

 

DEFAULT '/images/default.png'

  • 프로필 사진처럼 지정 안 할 때 디폴트 값으로 넣기

 

FOREIGN KEY (writer) REFERENCES user(idx)

FOREIGN KEY (자식 테이블의 열 이름) REFERENCE [부모 테이블 이름](부모 테이블의 열 이름)

  • writer는 user 테이블의 idx를 참조한다.

 

테이블 삭제 - DROP

DROP TABLE user;

 

테이블 삭제 명령어

 


테이블 수정 - ALTER 

ALTER TABLE user ADD birth DATE; # 속성 추가
ALTER TABLE user RENAME COLUMN birth TO yyyymmdd; # 속성 이름 변경
ALTER TABLE user MODIFY yyyymmdd INT; # 속성 타입 변경
ALTER TABLE user DROP yyyymmdd; # 속성 삭제

 

  • ADD [속성 이름] [속성 타입] : 속성 추가
  • RENAME COLUUMN [원래 속성 이름] TO [바꿀 속성 이름] : 속성 이름 변경
  • MODIFY [속성 이름] [속성 타입] : 속성 타입 변경
  • DROP [속성 이름] : 속성 삭제

 


DML

데이터 삽입 - INSERT

INSERT INTO [테이블 이름] (속성1, 속성 2, 속성 3,,,) VALUES (값 1, 값 2, 값 3,,,);

INSERT INTO user (name, id, password) VALUES ('test01','test01','qwer1234');
INSERT INTO user (idx, name, id, password, profile_img) VALUES (2, 'test02','test02','qwer1234', 'abcd.jpg');
INSERT INTO user VALUES (3, 'test03','test03','qwer1234', 'abcd.jpg');
INSERT INTO user (name, id, password, profile_img) VALUES ('test04','test04','qwer1234', 'abcd.jpg');
INSERT INTO user (name, id, password) VALUES ('test05','test05','qwer1234'), ('test06','test06','qwer1234');

 

 

 

데이터 조회 - SELECT

 

SELECT [찾을 속성] FROM [테이블 이름];

SELECT * FROM user;

 

 

데이터 수정 - UPDATE

UPDATE [테이블 이름] SET [속성]=[바꿀 값] WHERE [삭제할 튜플 조건];

# idx가 1번인 사용자의 profile_img를 '/images/abc.png' 바꾸겠다.
UPDATE user SET profile_img='/images/abc.png' WHERE idx=1;

 

데이터 삭제 - DELETE

DELETE FROM [테이블 이름] WHERE [삭제할 튜플 조건];

DELETE FROM user WHERE idx=3;

 

 

💡 취약한 쿼리

입력값 중에 ' 나 # 등 쿼리와 연관된 특수문자들이 들어있으면 주석 처리가 될 수도 있음.
# 로그인
# ID : test01';#
# PW : ********
# SQL 인젝션
# 취약한 쿼리
SELECT * FROM user WHERE id='test01';#' AND password='qwer1234';
# ID먼저 확인
SELECT * FROM user WHERE id='test01';​


뒤에 AND password='qwer1234' 부분이 주석처리가 되기 때문에 
비밀번호를 입력하지 않아도 select 문으로 유저의 데이터가 나온다.
이렇게 되면 비밀번호를 입력하지 않아도 로그인이 되는 상황이 발생할 수도 있음!! 

그래서 보통 특수문자를 제한을 두거나, 비밀번호 입력 횟수를 제한한다.
ex) 특수문자 (_), (-)만 사용, 비밀번호 5회 입력 시 잠금 등 

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'CS > DB' 카테고리의 다른 글

[DB] SQL 문법  (1) 2024.11.29
[DB] 워드프레스 서버 - DB 서버 연동 실습  (2) 2024.11.28
[DB] 정규화란? / 정규화 과정  (0) 2024.11.27
[DB] DBMS란? / ERD 다이어그램 / 관계 데이터 모델  (4) 2024.11.27
[DB] 데이터베이스란? / DB 서버 실습 (윈도우 클라이언트 - 리눅스 서버 연동)  (1) 2024.11.27
  1. sql 연습을 위한 sample 데이터 준비
  2. MySQL Workbench - SQL 실습
  3. DDL
  4. DML
'CS/DB' 카테고리의 다른 글
  • [DB] SQL 문법
  • [DB] 워드프레스 서버 - DB 서버 연동 실습
  • [DB] 정규화란? / 정규화 과정
  • [DB] DBMS란? / ERD 다이어그램 / 관계 데이터 모델
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • 자료구조
  • web
  • be
  • vue
  • dfs
  • bfs
  • 트리
  • 알고리즘
  • 구현
  • 회고
  • cs
  • 네트워크
  • spring boot
  • AWS
  • 우선순위 큐
  • 티스토리챌린지
  • 프로그래머스
  • Gateway
  • 그리디
  • DP
  • 리눅스
  • 오블완
  • 실습
  • 백트래킹
  • 백준
  • 주간회고
  • Java
  • js
  • db
  • fe

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[DB] SQL 연습 (윈도우 MySQL Workbench)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.