수요일~~
SQL은 대소문자를 구별하지 않지만,
관용적으로 keyword는 대문자 / 식별자(사용자 정의 변수·함수·테이블·인덱스·뷰 이름)는 소문자를 이용
View : 실제 데이터를 가지고 있지 않은 가상의 테이블, 진짜 테이블에 링크된 개념, 뷰를 SELECT 하면 테이블의 테이터를 조회하는 것과 동일한 결과
CREATE VIEW shopdb.v_memberTBL -- View 생성
AS
SELECT memberName, memberAddr FROM shopdb.membertbl; -- 링크할 테이블 지정
SELECT * FROM shopdb.v_memberTBL; -- View 생성 시 입력한 SELECT문 실행
DROP DATABASE shopdb; -- schema 백업 후 삭제
백업

복원

데이터베이스 모델링 : 현 세계에서 사용되는 작업이나 사물들을 DBMS의 DB 개체로 옮기기 위한 과정
L자형 테이블은 공간의 낭비가 있으므로, 빈칸이 있는 곳과 없는 곳으로 테이블을 분리함
서로 밀접한 관계(Relation)가 있는 테이블들 중 주(master)가 되는 쪽은 부모, 상세(detail)는 자식으로 설정함
이러한 관계를 데이블의 1대다(1:N) 관계라고 지칭함
Key는 column에 설정함, 여러 종류(Primary, Foreign;외래 키)가 존재함
동일한 정보가 중복되는 것을 방지하기 위해, 구분자(기본 키; PK, Primary Key)를 설정함
PK : 각각의 record를 유일하게 식별함, column의 집합. Not Null(중복 안됨)·Unique 제약조건(값 있어야함)
FK : 외래 키를 가지고 부모 테이블로 가서 유일한 정보를 얻을 수 있음. Not Null but Not Unique 제약조건
PK가 반드시 table에 존재해야 하는 건 아니지만, PK를 설정한 column은 Index가 설정됨
PK를 기준으로 rows가 오름차순(사전식)으로 정렬되어 저장됨 → Clustered Index
Index → Secondary Index, B-Tree 구성함
사용하고 있는 DB가 지정되어 있다면(USE 구문) 구문 쓸 때 schema. 쓰는 것 생략할 수 있음 or 마우스로 더블 클릭→좌측에 해당 schema가 볼드체로 바뀜
USE shopdb; -- 사용하고 있는 DB 지정하기
CREATE TABLE userTBL (
userName VARCHAR(6) PRIMARY KEY, -- PK 설정하기
userAddr VARCHAR(12),
userMobile VARCHAR(11)
);
INSERT INTO userTBL VALUES('아이유', '서울', '1234');
INSERT INTO userTBL VALUES('김연아', '인천', '5678');
INSERT INTO userTBL VALUES('신사임당', '부산', '9011');
SELECT * FROM userTBL; -- 조회하면 PK를 기준으로 rows가 오름차순으로 저장됨
-- 김연아 인천 5678
-- 신사임당 부산 9011
-- 아이유 서울 1234
DROP 구문은 주체(Schema, Table, Index, View)를 지울 때, DELETE는 특정 DB(row·record)를 지움
CREATE TABLE buyTBL (
userName VARCHAR(6) NOT NULL,
productName VARCHAR(10) NOT NULL,
productPrice INT NOT NULL,
buyAmount INT NOT NULL,
FOREIGN KEY(userName) REFERENCES userTBL(userName) -- FK 설정하기
);
INSERT INTO buyTBL VALUES('아이유', '냉장고', 1000, 2);
INSERT INTO buyTBL VALUES('김연아', 'TV', 2000, 1);
INSERT INTO buyTBL VALUES('신사임당', '컴퓨터', 3000, 3);
INSERT INTO buyTBL VALUES('홍길동', '냉장고', 1000, 2); -- 부모 Table에 존재하지 않으므로 추가할 수 없음
SELECT * FROM buyTBL;
DELETE FROM userTBL WHERE userName = '아이유'; -- parent row 안에 있으므로 지울 수 없음
SQL문은 크게 DML(Data Manipulation Language), DDL(Data Definition Language), DCL(Date Control Language)로 분류함
DML : Insert, Delete, Update, Select. C(reate)R(ead)U(pdate)D(elete) 작업
SHOW DATABASES; -- 현재 사용가능한 모든 DB(Schema)를 출력
USE employees; -- 번개 버튼 단축기는 Ctrl Enter
SHOW TABLES; -- 현재 DB 안의 table을 조회
DESC employees; -- table의 명세를 조회, =DESCRIBE
SELECT emp_no, first_name, hire_date FROM employees LIMIT 5;
SELECT emp_no AS '사번', -- 별칭; Alias
first_name AS '이름',
hire_date AS '입사일'
FROM employees LIMIT 5; -- 원하는 갯수만큼만 출력하라
번개 버튼(실행) 단축기는 Ctrl Enter이나 오류 발생할 수 있으니 그냥 버튼 누르자
데이터 타입
VARCHAR : 가변 문자열 타입, 저장되는 공간을 효율적으로 사용함
CHAR : 고정 문자열 타입, 공간을 효율적으로 사용하지는 못 하나 VARCHAR 보다 연산이 빠름
SMALLINT : 숫자 범위 -32768 ~ 32767, 정수
DROP DATABASE IF EXISTS sqldb; -- sqldb가 있으면 지워라
CREATE DATABASE sqldb;
USE sqldb;
CREATE TABLE userTBL (
userID CHAR(8) PRIMARY KEY, -- PK
userName VARCHAR(10) NOT NULL,
birthYear INT NOT NULL,
userAddr CHAR(2) NOT NULL,
mobile1 CHAR(3), -- 휴대폰 앞자리
mobile2 CHAR(8), -- 휴대폰 뒷자리
userHeight SMALLINT,
userDate DATE
);
CREATE TABLE buyTBL (
num INT AUTO_INCREMENT PRIMARY KEY, -- 순번, PK
userID CHAR(8) NOT NULL, -- FK
productName CHAR(6) NOT NULL,
productGroup CHAR(4),
productPrice INT NOT NULL,
buyAmount INT NOT NULL,
FOREIGN KEY(userID) REFERENCES userTBL(userID)
);
1. 1/17 월 | 2. 1/18 화 | 3. 1/19 수 | 4. 1/20 목 | 5. 1/21 금 |
취업 특강 | 파이썬 환경 설정 (파이참, 아나콘다, 주피터 노트북) |
파이썬 데이터 타입 (list, tuple) |
파이썬 데이터 타입 (range, string, dictionary, set, bool) |
파이썬 사용자 정의 함수, 객체지향, 사용자 정의 클래스 |
6. 1/24 월 | 7. 1/25 화 | 8. 1/26 수 | 9. 1/27 목 | 10. 1/28 금 |
파이썬 사용자 정의 클래스, 사용자 정의 모듈 |
DB(MySQL) DBMS, MySQL 환경 설정, DB/테이블 생성, DB 입력·활용, Index |
DB(MySQL) View, 백업과 복원, DB 모델링, 관계(PK, FK), DML, 데이터 타입 |
DB(MySQL) |