4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업

Slides:



Advertisements
Similar presentations
Python Essential 세미나 1 Python Databases Module - Part 2 (MySQL Module) 발표자 : 박영국 ( 화 )
Advertisements

CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL 언어 SQL.
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
DB2 Information Management DB2 UDB CLP Command Summary.
소리가 작으면 이어폰 사용 권장!.
데이터 모델링 방법론 2003년 03월.
제로보드 소개 제로보드 설치하기 제로보드 관리하기
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
Database & Internet Computing Laboratory 한 양 대 학 교
C#에서 데이터베이스 연동 방법.
제 5 장 인덱스 생성 및 관리.
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
APM 실습 (MySQL).
Chapter 05 SQL 인젝션 공격.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
JDBC 프로그래밍 이수지 이동주 1.
3장. MySQL 5.x 설치와 정보 MySQL의 특징 MySQL 설치 MySQL의 데이터베이스 관리 툴
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
MySQL grandmarnier.
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
MySQL performance Xhark 김재홍.
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
Toad for Oracle 설치 방법.
MySQL RENO.
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
Chapter 01 데이터베이스 시스템.
Supported Protocol 다음의 예문들은 CLP를 사용하는 방법들을 보여줍니다. 명령어들은 Windows의 DB2 명령창 프롬프트에서 실행합니다. 12. CLP 에서 +c 옵션을 이용하면 autocommit 모드가 사용되지 않으므로.
11장. 데이터베이스 서버 구축과 운영.
오라클 데이터베이스 성능 튜닝.
기초 T-SQL.
MySQL 기본 사용법.
Chapter 05 데이터베이스 프로그래밍.
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
ER-Win 사용 방법.
SQL Server 2000 세미나 Profiler를 이용한 문제해결
차례 튜닝 - 프로필러를 이용한 튜닝 프로필러 친해지기 프로필러 결과 테이블로 만들기 프로필러 결과 분석하기
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
9장 테이블 생성 및 변경, 삭제하기(DDL).
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
2장. 학사관리 예제 DATABASE 학사 데이터베이스의 해설 테이블의 내용 무결성 규칙 쉽게 배우는 MySQL 5.x
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬
View(뷰) 1 가상 테이블(Virtual Relation)
데이터베이스 (Database) SQL 추가 기능: 주장, 뷰, 프로그래밍 기법 문양세 강원대학교 IT대학 컴퓨터과학전공.
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
8장 테이블의 생성 및 변경 정인기.
12 데이터 무결성 제약조건 데이터 무결성 제약조건의 개념 데이터 무결성 제약조건의 종류 무결성 제약조건의 생성 방법.
06. SQL 명지대학교 ICT 융합대학 김정호.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
1장. 서 론 데이터베이스의 개요 모델의 종류 관계형 모델과 객체 지향형 데이터베이스 SQL이란 무엇인가?
4. 데이타베이스 시스템의 구성.
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
8장. SELECT명령문 : FROM 절 FROM 절에서 테이블 명세 열 명세 다중 테이블 명세 가명 FROM절의 다양한 예제
Presentation transcript:

4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업 2019-02-05 쉽게 배우는 MySQL 5.x

4.1 MySQL 데이터베이스 생성 1) 학사("haksa") 데이터베이스 생성 작업 [실습 따라하기] ① MySQL접속 C:\>mysql -u root -p Enter password: ******* Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.0.37-community-nt MySQL Community Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> ② MySQL 새로운 데이터베이스("haksa") 생성 mysql> create database haksa; Query OK, 1 row affected (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

④ 생성된 Database 사용하기 위해 데이터베이스 변경 mysql> show databases; +--------------------+ | Database           | | information_schema | | haksa              | | mysql              | | test               | 4 rows in set (0.02 sec) mysql> ④ 생성된 Database 사용하기 위해 데이터베이스 변경 mysql> use haksa; Database changed 2019-02-05 쉽게 배우는 MySQL 5.x

2) 인사테이블("insa") 생성 및 데이터 입력 [실습 따라하기] mysql> create table insa(                     -> bunho int(1) auto_increment,     -> name char(8) not null,     -> e_name char(4) not null,     -> town char(6) not null,     -> primary key(bunho)     -> ); Query OK, 0 rows affected, 1 warning (0.75 sec) mysql> insert into insa values('1','홍길동', 'Hong', '순천'); Query OK, 1 row affected (0.06 sec) mysql> insert into insa values('2','제갈공명', 'Je', '여수'); Query OK, 1 row affected (0.03 sec) mysql> insert into insa values('3','순자', 'Soon', '부산'); mysql> insert into insa values('4','이순신', 'Lee', '여수'); Query OK, 1 row affected (0.05 sec) mysql> select * from insa; 2019-02-05 쉽게 배우는 MySQL 5.x

Commit/Rollback 작업 1. Commit : 변경된 데이터를 데이터베이스에 적용시킨다. BUNHO NAME E_NAME TOWN 1 홍길동 Hong 순천 2 제갈공명 Je 여수 3 순자 Soon 부산 4 이순신 Lee ① “INSA" 테이블 질의 mysql> select * from insa; +-------+----------+--------+------+ | bunho | name     | e_name | town | |     1 | 홍길동   | Hong   | 순천 | |     2 | 제갈공명 | Je     | 여수 | |     3 | 순자     | Soon   | 부산 | |     4 | 이순신   | Lee    | 여수 | 4 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

③ “INSA”테이블의 내용 변경 : 번호 4번 도시(TOWN)을 한산도로 변경 ② 주의사항 : MySQL은 명령어를 실행하면 자동(Default)으로 Commit을 하게 되어 있다. 우선 AutoCommit를 하지 않도록 한다. mysql> set autocommit = 0; Query OK, 0 rows affected (0.06 sec) ③  “INSA”테이블의 내용 변경 : 번호 4번 도시(TOWN)을 한산도로 변경 mysql> update insa     -> set town = '한산도'     -> where bunho = 4; Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0 - 변경된 “INSA”테이블 질의 mysql> select * from insa; +-------+----------+--------+--------+ | bunho | name     | e_name | town   | |     1 | 홍길동   | Hong   | 순천   | |     2 | 제갈공명 | Je     | 여수   | |     3 | 순자     | Soon   | 부산   | |     4 | 이순신   | Lee    | 한산도 | 4 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

④ 변경된 데이터 복구작업 : Rollback mysql> rollback; Query OK, 0 rows affected (0.03 sec) ⑤ “INSA” 테이블 질의 mysql> select * from insa; +-------+----------+--------+------+ | bunho | name     | e_name | town | |     1 | 홍길동   | Hong   | 순천 | |     2 | 제갈공명 | Je     | 여수 | |     3 | 순자     | Soon   | 부산 | |     4 | 이순신   | Lee    | 여수 | 4 rows in set (0.00 sec) ⑥ “INSA” 테이블 내용 변경 : TOWN이 여수인 데이터를 “대구”로 변경 mysql> update insa     -> set town = '대구'     -> where town = '여수'; Query OK, 2 rows affected (0.00 sec) Rows matched: 2  Changed: 2  Warnings: 0 2019-02-05 쉽게 배우는 MySQL 5.x

⑦ “INSA” 테이블 내용 데이터베이스에 저장 : Commit mysql> commit; Query OK, 0 rows affected (0.00 sec) ⑧ 변경된 데이터 복구작업 : Rollback(복구가 되지 않음) mysql> rollback; Query OK, 0 rows affected (0.00 sec). ⑨ “INSA” 테이블 질의 mysql> select * from insa; +-------+----------+--------+------+ | bunho | name     | e_name | town | |     1 | 홍길동   | Hong   | 순천 | |     2 | 제갈공명 | Je     | 대구 | |     3 | 순자     | Soon   | 부산 | |     4 | 이순신   | Lee    | 대구 | 4 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

Savepoint/Truncate 작업 Savepoint로 저장점을 저장하고 INSERT, DELETE, UPDATE작업을 수행 후 Rollback to 저장점을 수행하면 그 위치까지 다시 복구 ① “INSA" 테이블 변경 작업 : 번호 2의 도시(TOWN)을 “여수”로 변경 mysql> update insa     -> set town = '여수'     -> where bunho = 2; Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0 ② Savepoint "AA" 지정 mysql> savepoint aa; Query OK, 0 rows affected (0.00 sec) ③ 번호 3번 행 삭제 : DELETE 작업 mysql> delete from insa     -> where bunho = 3; Query OK, 1 row affected (0.00 sec). 2019-02-05 쉽게 배우는 MySQL 5.x

⑤ “INSA” 테이블 Savepont “AA”까지 복구 mysql> select * from insa; +-------+----------+--------+------+ | bunho | name     | e_name | town | |     1 | 홍길동   | Hong   | 순천 | |     2 | 제갈공명 | Je     | 여수 | |     4 | 이순신   | Lee    | 대구 | 3 rows in set (0.00 sec) ⑤ “INSA” 테이블 Savepont “AA”까지 복구 mysql> rollback to aa; Query OK, 0 rows affected (0.00 sec) ⑥ “INSA” 테이블 질의 |     3 | 순자     | Soon   | 부산 | 4 rows in set (0.00 sec) ① 작업을 수행한 후 Savepont “AA”를 지정했기 때문에 ①에서 변경 작업한 내용은 복구되지 않고, ③ 작업 이후만 복구 2019-02-05 쉽게 배우는 MySQL 5.x

⑦ Truncate 작업 : “INSA”테이블의 삭제 처리 (모든 행이 삭제 처리됨) mysql> truncate table insa; Query OK, 3 rows affected (0.08 sec) ⑧ Truncate 작업 후 “INSA”테이블 복구 (복구가 되지 않음) mysql> rollback; Query OK, 0 rows affected (0.00 sec). ⑨ “INSA” 테이블 질의 mysql> select * from insa; Empty set (0.00 sec) Truncate 작업의 “INSA”테이블 삭제 처리시 복구가 되지 않는다. 2019-02-05 쉽게 배우는 MySQL 5.x

4.2 SQL 명령문 SQL 명령문의 그룹 ① DDL : 데이터 정의언어(Data Definition Language) -데이터베이스 객체인 테이블, 인덱스, 뷰 등의 구성에 영향을 주는 명령문 -DBA(데이터베이스관리자)만이 권한을 갖는다. -CREATE TABLE, CREATE INDEX, CREATE VIEW, DROP TABLE, DROP INDEX, ALTER TABLE, RENAME ② DML : 데이터 조작언어(Data Manipulation Language) -테이블의 내용을 변경하고 질의하는 명령문 -SELECT, INSERT, UPDATE, DELETE, COMMIT, ROLLBACK, SAVEPOINT, LOCK ③ DCL : 데이터 제어언어(Data Control Language) -유저관리와 데이터 보호와 관련된 명령문 -GRANT, ROVOKE, CONNECT, DISCONNECT 2019-02-05 쉽게 배우는 MySQL 5.x

데이터 처리 함수들 1) 숫자 데이터형 ① 정수 데이터형(INT) : int 데이터형은 정수형 데이터(0, 음수, 양수)를 저장 ex) INT(n) ② 실수 데이터형(FLOAT) : 실수 데이터형은 소수점을 포함하여 값을 저장 ex) FLOAT(N, M) 2) 문자 데이터형(CHAR, VARCHAR, BLOB) ① CHAR 데이터형 -1바이트에서 255바이트까지의 고정 길이 문자열을 저장 -정의된 저장공간보다 입력 데이터가 짧으면 나머지 공간은 공백(SPACE)으로 -정의된 길이보다 입력 데이터가 길면 길이에 맞게 잘린 데이터가 입력 -테이블 생성시 저장할 데이터의 최대크기로 정의해야만 데이터의 손실 방지 ② VARCHAR 데이터형 -정의된 저장공간보다 긴 문자열이 입력되면 VARCHAR에서는 에러 값을 리턴 -최대로 정의할 수 있는 데이터의 길이는 255바이트까지 저장 -메모 등의 다양한 길이의 데이터에 적절하고, 가변적인 길이의 문자열을 저장 -VARCHAR가 CHAR보다 검색 속도가 훨씬 느리다. 2019-02-05 쉽게 배우는 MySQL 5.x

-BLOB와 TEXT는 65,535 이상의 거대한 텍스트 데이터를 저장할 때 사용 -BLOB는 검색시 대소문자를 구분 3) 날짜 데이터형 -날짜 및 시간 데이터를 저장하기 위해서 Date 데이터형을 제공 -SYSDATE이라는 함수를 사용해서 현재 OS의 날짜를 조회 mysql> select now(); +---------------------+ | now()               | | 2007-09-07 15:03:35 | 1 row in set (0.03 sec) -select는 산술 계산의 결과나 날짜 등을 볼 수 있다. -위의 실행결과는 현재 오늘 시스템 날짜가 2007년 09월 07일인 경우 -Date형은 B․C. 4712년 1월 1일~A․D. 9999년 12월 31일까지 범위 값 저장 2019-02-05 쉽게 배우는 MySQL 5.x

NULL 값 4) 바이너리(binary) 데이터형 -음성, 화상(이미지), 동영상과 같은 데이터를 저장하기 위해서 바이너리 데이터형으로 RAW와 LONG RAW 데이터형을 사용 -제약점으로는 내장함수를 사용할 수 없다. ① RAW 데이터형 : 이진형 데이터를 255바이트까지 사용, 저장 공간의 제한점 때문에 많이 사용하지 않는다. ② LONG RAW 데이터형 : 이진형 데이터를 2GB까지 수용 ③ BLOB 데이터형 : 이진형 데이터를 4GB까지 수용 NULL 값 -NULL 값은 “값이 알려져 있지 않다” 또는 “값이 존재하지 않는다”라는 의미 -NULL 값은 다른 NULL 값과 결코 일치하지 않는다. -NOT NULL의 의미는 모든 행에서 해당 열은 특정한 값으로 채워져 있어야 한다는 것을 의미 - NOT NULL로 정의된 칼럼은 NULL값을  사용할 수 없다. 2019-02-05 쉽게 배우는 MySQL 5.x

테이블 생성 -테이블 생성 방법 : 명령어(Command) 방식, MySQL Query Browser 방식 -학사(“haksa”)데이터베이스는 전체 9개의 테이블로 구성 학사관리 테이블 생성(SQL 명령어 사용) #학과테이블 create table department( dept_code int(2) Not null, #학과번호 dept_name char(30) Not null, #학과명 dept_ename varchar(50), #학과영문이름 Create_date date default null, #학과생성날짜 primary key (dept_code) )type = innoDB; #우편번호테이블 create table post( post_no varchar(7) Not null, #우편번호 post_dong char(30) Not null, #동이름 post_address char(60) Not null, #주소 ddd char(4), #DDD 전화지역번호 primary key (post_no) 2019-02-05 쉽게 배우는 MySQL 5.x

stu_no char(10) Not null, #학번 stu_name char(10) Not null, #학생이름 #학적(학생신상)테이블 create table student( stu_no char(10) Not null, #학번 stu_name char(10) Not null, #학생이름 stu_ename varchar(30), #영문이름 dept_code int(2) Not null, #학과코드 grade int(1) Not null, # 학년 class int (1) Not null, #반 juya char(2), #주야구분 id_num varchar(14) Not null, #주민등록번호 post_no varchar(7), #우편번호 address varchar(100), #주소 tel varchar(14), #전화번호 phone_no varchar(14), #휴대전화번호 birth_year char(4), #출생년도 primary key (stu_no), constraint s_dp_fk foreign key(dept_code)  #외래키 학과 테이블의 학과코드 references department(dept_code), constraint s_ps_fk foreign key(post_no)  #외래키 우편번호테이블 우편번호코드 references post(post_no) ) type = innoDB; 2019-02-05 쉽게 배우는 MySQL 5.x

sub_code char(5) Not null, #과목번호 sub_name varchar(50) Not null, #과목명 #교과목테이블 create table subject( sub_code char(5) Not null, #과목번호 sub_name varchar(50) Not null, #과목명 sub_ename varchar(50), #영문과목명 create_year char(4), #개설년도 primary key (sub_code) )type = innoDB; #교수테이블 create table professor( prof_code char(4) Not null, #교수번호 prof_name char(10) Not null, #교수명 prof_ename varchar(30), #교수영문이름 Create_date date default null, #교수임용날짜 primary key (prof_code) 2019-02-05 쉽게 배우는 MySQL 5.x

stu_no char(10) Not null, #학번 att_year char(4) Not null, #수강년도 #수강신청 create table attend( stu_no char(10) Not null, #학번 att_year char(4) Not null, #수강년도 att_term int(1) Not null, # 수강학기 att_isu int(1) Not null, #이수구분 sub_code char(5) Not null, #과목코드 prof_code char(4) Not null, #교수번호 att_point int(1) Not null, #이수학점 att_grade int(3) default '0', #취득점수 att_div char(1) default 'N' Not null, #수강신청구분 att_jae char(1) default '1', #재수강 구분 1(본학기 수강), 2(재수강), 3(계절학기 수강) att_date date Not null, #수강처리일자 primary key (stu_no, att_year, att_term, sub_code, prof_code, att_jae), constraint su_att_fk foreign key(sub_code) #외래키 교과목 테이블의 과목코드 references subject(sub_code), constraint pr_att_fk foreign key(prof_code) #외래키 교수 테이블의 교수코드 references professor(prof_code) ) type = innoDB; 2019-02-05 쉽게 배우는 MySQL 5.x

stu_no varchar(10) Not null, #학번 fee_year varchar(4) Not null, #등록년도 #등록금테이블 create table fee( stu_no varchar(10) Not null, #학번 fee_year varchar(4) Not null, #등록년도 fee_term int(1) Not null, #등록학기 fee_enter int(7), #입학금 fee_price int(7) Not null, #등록금(수업료) fee_total int(7) Default '0' Not null, #등록금총액=입학금+수업료 jang_code char(2) Null, #장학코드 jang_total int(7), #장학금액 fee_pay int(7) Default '0' Not null, #납부총액=등록금총액-장학금액 fee_div char(1) Default 'N' Not null, #등록구분 fee_date date Not null, #등록날짜 primary key (stu_no, fee_year, fee_term) ) type = innoDB; 2019-02-05 쉽게 배우는 MySQL 5.x

stu_no char(10) Not null, #학번 sco_year char(4) Not null, #성적취득년도 #성적테이블 create table score( stu_no char(10) Not null, #학번 sco_year char(4) Not null, #성적취득년도 sco_term int(1) Not null, #학기 req_point int(2), #신청학점 take_point int(2), #취득학점 exam_avg float(2,1), #평점평균 exam_total int(4), #백분율 총점 sco_div char(1), #성적구분 sco_date date, #성적처리일자 primary key (stu_no, sco_year, sco_term) ) type = innoDB; 2019-02-05 쉽게 배우는 MySQL 5.x

cir_num int(4) Not null auto_increment, #동아리가입번호 #동아리테이블 create table circle( cir_num int(4) Not null auto_increment, #동아리가입번호 cir_name char(30) Not null, #동아리명 stu_no char(10) Not Null, #학번 stu_name char(10) Not Null, #이름 president char(1) default '2' Not null, #동아리회장(0), 부회장(1), 회원(2) primary key (cir_num), constraint s_ci_fk foreign key(stu_no)  #외래키 학적 테이블의 학번 references student(stu_no) )type = innoDB; 2019-02-05 쉽게 배우는 MySQL 5.x

-테이블의 기본 키는 모든 값이 오직 한번만 나타난 열(또는 열의 조합)이다. -기본 키는 무결성 규칙의 특별한 자료형이다. 테이블에는 3개의 속성인 이름, 열, 기본 키를 정의 CREATE TABLE STUDENT (                                                          STU_NO CHAR(10) NOT NULL,           열          NAME CHAR(10) NOT NULL,               ENAME VARCHAR(30), PRIMARY KEY(STU_NO) 테이블 이름 기본 키 -테이블의 기본 키는 모든 값이 오직 한번만 나타난 열(또는 열의 조합)이다. -기본 키는 무결성 규칙의 특별한 자료형이다. -기본 키가 없다면 중복된 값이 입력될 수 있으므로 문제를 발생 -기본 키를 지원하지 않는 제품은 각 기본 키에 대한 유일한 인덱스를 생성 2019-02-05 쉽게 배우는 MySQL 5.x

인덱스를 생성하는 명령문 CREATE INDEX 인덱스이름 on 테이블(칼럼_) CREATE INDEX STU_PRIM ON                STUDENT (STU_NO); CREATE         INDEX ATT_PRIM ON                ATTEND (STU_NO); CREATE         INDEX FEE_PRIM ON                STUDENT(STU_NO); CREATE         INDEX SUB_PRIM                SUBJECT(SUB_CODE); CREATE         INDEX SCO_PRIM ON CREATE         INDEX PRO_PRIM ON                PROFESSOR(PROF_CODE); CREATE         INDEX POS_PRIM ON                POST(POST_NO); CREATE         INDEX CIR_PRIM ON                CIRCLE(CIR_NUM); CREATE         INDEX DEP_PRIM ON                DEPARTMENT(DEPT_CODE); 2019-02-05 쉽게 배우는 MySQL 5.x

4.3 테이블 데이터 처리(삽입, 변경, 삭제) 작업 테이블에 데이터 삽입 #DEPARTMENT 입력 4.3 테이블 데이터 처리(삽입, 변경, 삭제) 작업 테이블에 데이터 삽입 #DEPARTMENT 입력 INSERT INTO DEPARTMENT VALUES       (10,'간호학과','Dept. of Nersing','1954-02-01');       (20,'경영학과','Dept. of Management','1980-02-10');       (30,'수학학과','Dept. of Mathematics','1984-02-20');       (40,'컴퓨터정보학과','Dept. of Computer Information','1995-02-01');       (50,'정보통신학과','Dept. of Information Communication','1997-02-10');       (60,'회계학과','Dept. of Accounting','1998-03-01'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO POST VALUES ('556-820', '화양면', '전라남도 여수시 화양면', '061');         ('556-820', '화양면', '전라남도 여수시 화양면', '061');         ('540-130', '생목동', '전라남도 순천시 생목동', '061');         ('451-800', '팽성읍', '경기도 평택시 팽성읍', '031');         ('545-800', '광양읍', '전람남도 광양시 광양읍', '061');         ('540-850', '해룡면', '전라남도 순천시 해룡면', '061');         ('550-130', '서교동', '전라남도 여수시 서교동', '061');         ('150-051', '신길1동', '서울특별시 영등포구 신길1동', '02');         ('500-170', '운암동', '광주광역시 북구 운암동', '062');         ('506-040', '소촌동', '광주광역시 광산구 소촌동', '062');         ('545-080', '광영동', '전라남도 광양시 광영동', '061'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO POST VALUES ('550-160', '봉강동', '전라남도 여수시 봉강동', '061');         ('550-160', '봉강동', '전라남도 여수시 봉강동', '061');         ('540-170', '남정동', '전라남도 순천시 남정동', '061');         ('550-260', '여서동', '전라남도 여수시 여서동', '061');         ('540-310', '안풍동', '전라남도 순천시 안풍동', '061');         ('546-121', '농성동', '광주광역시 서구 농성동', '062');         ('590-020', '향교동', '전라북도 남원시 향교동', '063');         ('548-820', '영남면', '전라남도 고흥군 영남면', '061'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO STUDENT VALUES         ('20001001', '김유신', 'Kim Yoo-Shin', 40, 4, 3, '야', '811007-1632013','556-820','안포리 28번지','061)685-7818','011-617-1290','1981');         ('20001015', '박도준', 'Park Do-Jun', 40, 4, 1, '주', '780116-1580715','540-130','16-2번지','061)744-6126','011-611-9884','1978');         ('20001021', '이상길', 'Lee Sang-Gil', 40, 4, 1, '주', '750819-1227014','451-800','안정리 주공APT 107동 504호','031)691-5423',NULL,'1975');         ('20041002', '김유미', 'Kim Yoo-Mi', 40, 3, 2, '주', '830207-2629715','545-800','덕례리 산 16-1번지','061)763-1439','010-617-1290','1983');         ('20041007', '정인정', 'Jeung Yin-Jeung', 40, 2, 2, '주', '830315-2351225','540-850','부영7차APT 304동 1210호','061)723-1078','016-605-7837','1983');         ('20041033', '연개소문', 'Yean Gae-So-Moon', 40, 3, 3, '야', '810615-1633111','550-130','280-50번지','061)642-9304','018-641-9304','1981');         ('20061011', '박정인', 'Park Jung-In', 40, 2, 1, '주', '830403-1635213','150-051','985번지 롯데APT 102-306','02)652-2439','017-3142-1294','1983'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO STUDENT VALUES         ('20061014', '고혜진', 'Ko Hea-Jin', 10, 2, 1,'주', '870307-2638759','500-170','삼익APT 101동 102호','061)781-5135',NULL,'1987');         ('20061048', '김영호', 'Kim Young-Ho', 10, 4, 3 ,'야', '860811-1548758','506-040','라인APT 207동 309호','062)678-1010','017-614-7575','1986');         ('20071001', '장수인', 'Jang Soo-In', 40, 1, 1 ,'주', '890209-1616822','545-080','금광APT 108동 1101호','061)791-1236',NULL,'1989');         ('20071010', '홍길동', 'Hong Gil-Dong', 40, 1, 3,'야', '880402-1850838','550-160','해태APT 104동 605호','061)642-4034','010-6425-9245','1988');         ('20071022', '이순신', 'Lee Sun-Shin', 10, 1, 3,'야', '890222-1218818','540-170','560-18번지','061)745-7667','010-7141-1860','1989');         ('20071300', '유하나', 'Yoo Ha-Na', 50, 1, 1 ,'주', '880921-2573717','550-260','주공APT 204동 512호','061)651-5992','019-651-0707','1988');         ('20071307', '김문영', 'Kim Moon-Young', 50, 1, 3,'야', '880418-2121623','540-170','380-2번지','061)745-5485','019-4624-0460','1988');         ('20071405', '최차영', 'Choi Cha-Young', 50, 1, 2 ,'주', '881003-2581516','540-310','금사리 1427','061)745-6893',NULL,'1988'); 2019-02-05 쉽게 배우는 MySQL 5.x

쉽게 배우는 MySQL 5.x #SUBJECT 입력 INSERT INTO SUBJECT VALUES         ('4001', '데이터베이스 응용', 'Database Application', '2002');         ('4002', '웹사이트 구축', 'Web Site Construction', '2003');         ('4003', '소프트웨어공학', 'Software Engineering', '2003');         ('4004', '웹프로그래밍', 'Web Programming', '2002');         ('4005', '컴퓨터구조', 'Computer Structure', '2001');     ('4006', '정보처리실무', 'Information Process Practical business', '2001');         ('4007', 'UML', 'Unified Modeling Language', '2005');         ('4008', '운영체제', 'Operating System', '2002');         ('4009', '전자상거래 실무', 'Electronic Commerce', '2003');         ('4010', '윈도우즈 프로그래밍', 'Windows Programming', '1998');         ('4011', '자바프로그래밍', 'Java Programming', '1999');         ('4012', '네트워크 프로그래밍', 'Network Programming', '2005');         ('4013', '컴포넌트 프로그래밍', 'Component Programming', '2004'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO PROFESSOR VALUES         ('4001','정진용','Jung jin-yong','1995-09-01');         ('4002','나인섭','Na in-sub','2006-02-02');         ('4003','정창부','Jung chang-boo','2003-03-01');         ('4004','박상철','Park sang-chul','2000-01-15');         ('4005','정병열','Jung byeong-yeol','1998-03-01');         ('4006','고진광','Go jin-gwang','1988-03-01');         ('4007','김영식','Kim young-sik','1986-03-01');         ('4008','최우진','Choi woo-jin','1997-03-01');         ('4009','문창수','Moon chang-soo','1995-03-01');         ('5010','정종필','Jung jong-phil','1997-03-01');         ('5011','최종주','Choi jong-joo','1992-03-05'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO ATTEND VALUES       ('20061011','2006',1,3,4001,'4002',3, 99,'Y','1','2006-03-05');       ('20061011','2006',1,4,4002,'4003',3, 95,'Y','1','2006-03-05');       ('20061011','2006',1,4,4003,'4004',3, 97,'Y','1','2006-03-05');       ('20061011','2006',1,4,4004,'4001',3, 98,'Y','1','2006-03-05');       ('20061011','2006',1,4,4005,'4007',3, 96,'Y','1','2006-03-05');       ('20061011','2006',1,4,4006,'4008',3, 95,'Y','1','2006-03-05');       ('20061011','2006',2,3,4007,'4009',3, 93,'Y','1','2006-09-03');       ('20061011','2006',2,4,4008,'4005',3, 92,'Y','1','2006-09-03');       ('20061011','2006',2,4,4009,'4006',3, 94,'Y','1','2006-09-03');       ('20061011','2006',2,4,4010,'4001',3, 90,'Y','1','2006-09-03');       ('20061011','2006',2,4,4011,'4002',3, 91,'Y','1','2006-09-03'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO ATTEND VALUES       ('20061011','2006',2,4,4012,'4003',3, 92,'Y','1','2006-09-03');       ('20071300','2007',1,3,4001,'4002',3, 99,'Y','1','2007-03-05');       ('20071300','2007',1,4,4002,'4003',3, 95,'Y','1','2007-03-05');       ('20071300','2007',1,4,4003,'4004',3, 97,'Y','1','2007-03-05');       ('20071300','2007',1,4,4004,'4001',3, 98,'Y','1','2007-03-05');       ('20071300','2007',1,4,4005,'4007',3, 93,'Y','1','2007-03-05');       ('20071300','2007',1,4,4006,'4008',3, 95,'Y','1','2007-03-05'); 2019-02-05 쉽게 배우는 MySQL 5.x

#FEE 입력 INSERT INTO FEE VALUES ('20061011','2006',1, 500000,3000000,3500000,01,500000,3000000,'Y','2006-02-18'); ('20061011','2006',2, NULL,3000000,3000000,10,2500000,500000,'Y','2006-08-20'); ('20061011','2007',1, NULL,3000000,3000000,11,2000000,1000000,'Y','2007-02-18'); ('20061011','2007',2, NULL,3000000,3000000,21,800000,2200000,'Y','2007-08-10'); INSERT INTO FEE VALUES ('20001015','2000',1,500000,2500000,3000000,02,1000000,2000000,'Y','2000-02-01'); ('20001015','2000',2, NULL,2500000,2500000,10,2500000,0,'Y','2000-08-10'); ('20001015','2001',1, NULL,2800000,2800000,10,2500000,300000,'Y','2001-02-15'); ('20001015','2001',2, NULL,2800000,2800000,10,2500000,300000,'Y','2001-08-16'); ('20001015','2006',1, NULL,3000000,3000000,10,2500000,500000,'Y','2006-02-14'); ('20001015','2006',2, NULL,3000000,3000000,10,2500000,500000,'Y','2006-08-18'); ('20001015','2007',1, NULL,3000000,3000000,11,2000000,1000000,'Y','2007-02-10'); ('20001015','2007',2, NULL,3000000,3000000,10,2500000,500000,'Y','2007-08-19'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO FEE VALUES ('20071300','2007',1, 500000,3000000,3500000,01,500000,3000000,'Y','2007-02-18'); ('20071300','2007',2, NULL,3000000,3000000,11,2000000,1000000,'Y','2007-08-10'); ('20071001','2007',1, 500000,3000000,3500000,01,500000,3000000,'Y','2007-02-18'); ('20071001','2007',2, NULL,3000000,3000000,NULL,NULL,3000000,'Y','2007-08-10'); ('20071010','2007',1, 500000,3000000,3500000,01,500000,3000000,'Y','2007-02-18'); ('20071010','2007',2, NULL,3000000,3000000,NULL,NULL,3000000,'Y','2007-08-10'); ('20071022','2007',1, 500000,3000000,3500000,01,500000,3000000,'Y','2007-02-18'); ('20071022','2007',2, NULL,3000000,3000000,NULL,NULL,3000000,'Y','2007-08-10'); ('20071307','2007',1, 500000,3000000,3500000,01,500000,3000000,'Y','2007-02-18'); ('20071307','2007',2, NULL,3000000,3000000,NULL,NULL,3000000,'Y','2007-08-10'); ('20071405','2007',1, 500000,3000000,3500000,01,500000,3000000,'Y','2007-02-18'); ('20071405','2007',2, NULL,3000000,3000000,10,2500000,500000,'Y','2007-08-10'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO SCORE VALUES       ('20061011','2006',1,18,18,4.5,580,'Y','2006-08-10');       ('20061011','2006',2,18,18,4.0,552,'Y','2007-01-11');       ('20071300','2007',1,18,18,4.4,577,'Y','2007-08-09');       ('20071307','2007',1,18,18,4.4,575,'Y','2007-08-09');       ('20071405','2007',1,18,18,4.2,572,'Y','2007-08-09');       ('20061011','2007',2,18,18,0,0,'N','2007-11-10');       ('20061300','2007',2,18,18,0,0,'N','2007-11-10');       ('20061307','2007',2,18,18,0,0,'N','2007-11-10');       ('20061405','2007',2,18,18,0,0,'N','2007-11-10'); 2019-02-05 쉽게 배우는 MySQL 5.x

INSERT INTO CIRCLE VALUES (1,'컴맹탈출','20061011','고혜진','0');       (1,'컴맹탈출','20061011','고혜진','0');       (2,'컴맹탈출','20071300','유하나','1');       (3,'컴맹탈출','20071307','김문영','2');       (4,'Java길라잡이','20071001','장수인','2');       (5,'Java길라잡이','20041007','정인정','1');       (6,'Java길라잡이','20001015','박도준','0');       (7,'PHP길라잡이','20001021','이상길','0'); 2019-02-05 쉽게 배우는 MySQL 5.x

질의 테이블 SELECT 명령문은 테이블로부터 데이터를 검색할 때 사용 [예제 4-1] STUDENT 테이블로부터 성별이 남자인 각 학생의 학번, 이름, 영문이름, 학년, 주민등록번호를 영문이름 순서로 출력하라. mysql> select stu_no, stu_name, stu_ename, grade, id_num     -> from student     -> where substring(id_num, 8, 1) = 1     -> order by stu_ename; +----------+----------+------------------+-------+----------------+ | stu_no   | stu_name | stu_ename        | grade | id_num         | | 20071010 | 홍길동   | Hong Gil-Dong    |     1 | 880402-1850838 | | 20071001 | 장수인   | Jang Soo-In      |     1 | 890209-1616822 | | 20001001 | 김유신   | Kim Yoo-Shin     |     4 | 811007-1632013 | | 20061048 | 김영호   | Kim Young-Ho     |     4 | 860811-1548758 | | 20001021 | 이상길   | Lee Sang-Gil     |     4 | 750819-1227014 | | 20071022 | 이순신   | Lee Sun-Shin     |     1 | 890222-1218818 | | 20001015 | 박도준   | Park Do-Jun      |     4 | 780116-1580715 | | 20061011 | 박정인   | Park Jung-In     |     2 | 830403-1635213 | | 20041033 | 연개소문 | Yean Gae-So-Moon |     3 | 810615-1633111 | 9 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

-FROM 다음에는 질의를 원하는 테이블을 지정 : FROM STUDENT -WHERE 다음에는 원하는 조건을 기술 SUBSTRING( )함수는 ID_NUM의 8번째 칼럼 1자리만큼을 선택하기 위한 함수 성별이 남자인 학생을 찾는 조건 : WHERE SUBSTRING(ID_NUM, 8, 1) = 1 -SELECT는 탐색하고자 하는 열을 선택 학생의 학번, 이름, 영문이름, 학년, 주민등록번호를 선택하여 출력 SELECT STU_NO, STU_NAME, STU_ENAME, GRADE, ID_NUM -ORDER BY 다음에는 출력될 데이터가 정렬되는 방법을 지정 ORDER BY STU_NAME SELECT 명령문의 결과로 나타나는 것은 SQL에 의해서 결정 ① 열의 폭은 열의 자료형에 의해서 결정 ② 표제의 이름은 SELECT 명령문에서 사용한 열의 이름과 동일하게 사용 ③ 열에 있는 값이 출력될 때 문자형 데이터는 왼쪽 정렬로 출력 ④ 수치 값은 오른쪽 정렬로 출력 ⑤ 출력 결과 테이블의 각 열 사이에는 1 칸의 공백이 존재 ⑥ NULL 값은 NULL또는 공백(SPACE)으로 출력 : INSERT할 때 입력한 값(NULL, 공백)에 따라 출력 2019-02-05 쉽게 배우는 MySQL 5.x

[예제 4-2] 학년이 1학년이고 성별이 남자인 각 학생의 학번과 이름을 출력하는데, 출력 순서는 학번 내림차순이다. mysql> select stu_no, stu_name     -> from student     -> where grade = 1     -> and substring(id_num,8,1) = 1     -> order by stu_no desc; +----------+----------+ | stu_no   | stu_name | | 20071022 | 이순신   | | 20071010 | 홍길동   | | 20071001 | 장수인   | 3 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

[예제 4-3] 교과목 테이블에 관한 모든 정보를 출력하라. mysql> select * from subject; +----------+---------------------+---------------------------------------+--------------+ | sub_code | sub_name            | sub_ename                              | create_year | | 4001     | 데이터베이스 응용   | Database Application                   | 2002        | | 4002     | 웹사이트 구축       | Web Site Construction                  | 2003        | | 4003     | 소프트웨어공학      | Software Engineering                   | 2003        | | 4004     | 웹프로그래밍        | Web Programming                        | 2002        | | 4005     | 컴퓨터구조          | Computer Structure                     | 2001        | | 4006     | 정보처리실무        | Information Process Practical business | 2001        | | 4007     | UML                 | Unified Modeling Language              | 2005        | | 4008     | 운영체제            | Operating System                       | 2002        | | 4009     | 전자상거래 실무     | Electronic Commerce                    | 2003        | | 4010     | 윈도우즈 프로그래밍 | Windows Programming                    | 1998        | | 4011     | 자바프로그래밍      | Java Programming                       | 1999        | | 4012     | 네트워크 프로그래밍 | Network Programming                    | 2005        | | 4013     | 컴포넌트 프로그래밍 | Component Programming                  | 2004        | 13 rows in set (0.05 sec) 교과목(FROM SUBJECT)에 대하여 모든 열 값(SELECT *)을 출력하는 명령문 * 문자는 모든 열(“ALL COLUMNS”)을 나타내는 문자 2019-02-05 쉽게 배우는 MySQL 5.x

행의 갱신과 삭제 UPDATE 명령문은 행에 있는 열의 값을 변경할 때 사용 DELETE 명령문은 테이블에서 완전히 행을 삭제할 때 사용 [예제 4-4] 교과목 중 운영체제의 생성년도를 2006년으로 변경하라. mysql> UPDATE  SUBJECT     -> SET  CREATE_YEAR = '2006'     -> WHERE  SUB_NAME ='운영체제'; -UPDATE SUBJECT : 교과목 테이블을 변경하라. -WHERE SUB_NAME = ‘운영체제’ : 조건은 교과목명이 운영체제인 것을 변경 -SET CREATE_YEAR = ‘2006’ : 변경할 내용은 생성년도를 2006년으로 변경 SET 다음에는 새로운 값으로 변경될 열을 지정한다. 이 때 값은 기존에 존재하는 값에 관계없이 변경된다. 2019-02-05 쉽게 배우는 MySQL 5.x

[예제 4-5] 교과목 테이블에서 교과목코드, 교과목명, 교과목영문이름, 생성년도를 출력하라. mysql> select sub_code, sub_name, sub_ename, create_year     -> from subject; +----------+---------------------+---------------------------------------+--------------+ | sub_code | sub_name            | sub_ename                              | create_year | | 4001     | 데이터베이스 응용   | Database Application                   | 2002        | | 4002     | 웹사이트 구축       | Web Site Construction                  | 2003        | | 4003     | 소프트웨어공학      | Software Engineering                   | 2003        | | 4004     | 웹프로그래밍        | Web Programming                        | 2002        | | 4005     | 컴퓨터구조          | Computer Structure                     | 2001        | | 4006     | 정보처리실무        | Information Process Practical business | 2001        | | 4007     | UML                 | Unified Modeling Language              | 2005        | | 4008     | 운영체제            | Operating System                       | 2006        | | 4009     | 전자상거래 실무     | Electronic Commerce                    | 2003        | | 4010     | 윈도우즈 프로그래밍 | Windows Programming                    | 1998        | | 4011     | 자바프로그래밍      | Java Programming                       | 1999        | | 4012     | 네트워크 프로그래밍 | Network Programming                    | 2005        | | 4013     | 컴포넌트 프로그래밍 | Component Programming                  | 2004        | 13 rows in set (0.05 sec) 교과목 코드 4008번인 운영체제의 생성년도가 2006년으로 변경됨 2019-02-05 쉽게 배우는 MySQL 5.x

삭제처리(DELETE) 작업은 테이블의 내용을 제거할 때 행(ROW) 단위로 이루어진다. 만약에 “SAMPLE"이라는 테이블의 모든 행을 삭제한다면 다음과 같다. DELETE FROM SAMPLE; 위의 예제는 “SAMPLE" 테이블의 모든 행을 삭제처리 하나 테이블 자체가 없어진 것은 아니다. 테이블의 명세표, 인덱스, 부여된 권한 등 환경테이블 정보 자체를 완전히 없애버릴 때는 DROP명령어를 다음과 같이 사용한다. “DROP TABLE SAMPLE" 2019-02-05 쉽게 배우는 MySQL 5.x

[예제 4-6] 과목명(SUB_NAME)이 UML인 과목을 삭제하라. mysql> delete     -> from subject     -> where sub_name = 'UML'; Query OK, 1 row affected (0.06 sec) mysql> select * from subject; +----------+---------------------+---------------------------------------+--------------+ | sub_code | sub_name            | sub_ename                              | create_year | | 4001     | 데이터베이스 응용   | Database Application                   | 2002        | | 4002     | 웹사이트 구축       | Web Site Construction                  | 2003        | | 4003     | 소프트웨어공학      | Software Engineering                   | 2003        | | 4004     | 웹프로그래밍        | Web Programming                        | 2002        | | 4005     | 컴퓨터구조          | Computer Structure                     | 2001        | | 4006     | 정보처리실무        | Information Process Practical business | 2001        | | 4008     | 운영체제            | Operating System                       | 2006        | | 4009     | 전자상거래 실무     | Electronic Commerce                    | 2003        | | 4010     | 윈도우즈 프로그래밍 | Windows Programming                    | 1998        | | 4011     | 자바프로그래밍      | Java Programming                       | 1999        | | 4012     | 네트워크 프로그래밍 | Network Programming                    | 2005        | | 4013     | 컴포넌트 프로그래밍 | Component Programming                  | 2004        | 12 rows in set (0.05 sec) 교과목 코드 4007번인 UML과목이 삭제됨 2019-02-05 쉽게 배우는 MySQL 5.x

[예제 4-7] 교과목 중 운영체제의 생성년도를 2002년으로 변경하라. mysql> UPDATE SUBJECT     -> SET CREATE_YEAR = '2002'     -> WHERE SUB_NAME = '운영체제'; [예제 4-8] 교과목 테이블에 교과목코드(4007), 교과목명(UML), 교과목영문이름(Unified Modeling Language), 생성년도(2005)인 새로운 행을 삽입하라. mysql> INSERT INTO SUBJECT VALUES (     -> '4007', 'UML', ‘Unified Modeling Language’, '2005'); 교과목테이블의 원래의 데이터로 복원하기 위하여 UPDATE, INSERT 명령을 수행해 보았다. 2019-02-05 쉽게 배우는 MySQL 5.x

질의(Query) 처리의 최적화 -생성년도(CREATE_YEAR)가 2002년이면 결과 테이블에 출력 mysql> SELECT  *      -> FROM  SUBJECT      -> WHERE  CREATE_YEAR = '2002'; -생성년도(CREATE_YEAR)가 2002년이면 결과 테이블에 출력 -만약 테이블이 몇 개의 행만을 가지고 있다면 SQL은 아주 빠르게 작업을 수행 -수십만 개의 행을 가지고 있다면 각 행을 조사하기 때문에 많은 시간을 요구 -인덱스를 정의하게 되면 처리 속도가 훨씬 빠르게 수행 인덱스(index)는 열 또는 열의 조합으로 정의 CREATE        INDEX CREATEIX ON               SUBJECT (CREATE_YEAR) -SUBJECT 테이블에서 CREATE_YEAR 열에 대한 CREATEIX 인덱스를 정의 -인덱스는 WHERE 조건 절을 만족하는 행을 보기 위해서만 사용 -테이블에서 조건에 만족하는 행의 검색은 훨씬 더 빨라진다. -인덱스 CREATEIX는 행의 직접 접근을 제공 2019-02-05 쉽게 배우는 MySQL 5.x

∙인덱스는 SELECT 명령문의 처리를 최적화(빠르게 처리)하기 위해서 사용 인덱스를 사용하는 중요한 점 ∙인덱스는 SELECT 명령문의 처리를 최적화(빠르게 처리)하기 위해서 사용 ∙인덱스에 관한 내용은 SELECT 명령문에서 명확하게 표현하지는 않는다. ∙명령문을 처리할 때 SQL은 이미 존재하는 인덱스가 사용될 것인지 선택한다. ∙인덱스는 언제든지 생성되거나 삭제될 수 있다. ∙행을 추가하거나 삭제, 갱신이 발생할 때 테이블에 관련된 인덱스를 유지한다. ∙SELECT 명령문의 처리 시간을 감소시킨다는 것을 의미 ∙갱신 명령문(INSERT, UPDATE, DELETE 등)의 시간은 증가 -SQL은 최적화 처리를 위해서 이러한 유일한 인덱스를 사용 -유일한 인덱스(Unique index)는 또 다른 기능을 가지고 있는데, 이는 중복된 값이 없는 특별한 열 또는 열의 조합을 보장해야 한다. 2019-02-05 쉽게 배우는 MySQL 5.x

뷰(View) -뷰(Views) 테이블은 필요에 따라 사용자가 재 정의하여 생성해주는 테이블 뷰는 유도된(derived) 또는 가상(virtual) 테이블이라고도 한다. 뷰는 실제 데이터 행을 가지고 있는 것처럼 동작하지만 데이터 행은 없음 [예제 4-9] 학적 테이블의 학번, 이름, 출생년도, 나이를 출력하라. mysql> select stu_no, stu_name, birth_year "출생년도",     -> year(now()) - birth_year + 1 "나이"     -> from student; +----------+----------+----------+------+ | stu_no   | stu_name | 출생년도 | 나이 | | 20001001 | 김유신   | 1981     |   27 | | 20001015 | 박도준   | 1978     |   30 | | 20001021 | 이상길   | 1975     |   33 | | 20041002 | 김유미   | 1983     |   25 | | 20041007 | 정인정   | 1983     |   25 | | 20041033 | 연개소문 | 1981     |   27 | | 20061011 | 박정인   | 1983     |   25 | | 20061014 | 고혜진   | 1987     |   21 | | 20061048 | 김영호   | 1986     |   22 | | 20071001 | 장수인   | 1989     |   19 | | 20071010 | 홍길동   | 1988     |   20 | | 20071022 | 이순신   | 1989     |   19 | | 20071300 | 유하나   | 1988     |   20 | | 20071307 | 김문영   | 1988     |   20 | | 20071405 | 최차영   | 1988     |   20 | 15 rows in set (0.01 sec) 열의 제목 중에서 출생년도(BIRTH_YEAR)를 출력할 때 “출생년도”로, 나타내고,  NOW()함수는 현재의 년,월,일,시간을 나타내는 함수이고 YEAR()함수는 년도를 나타내는 함수이다. 따라서 NOW()함수로 현재의 날짜를 추출한 다음 다시 YEAR()함수로 년도만을 추출한다. 나이는 현재의 연도에서 출생년도를 감산하여 1를 더한 값으로 얻을 수 있다.(예를들면 현재의 날짜가 2007년 7월 25일)일 때 1981년생의 나이를 계산하면 다음과 같다. 나이=현재 연도-출생년도+1=2007-1981+1=27 2019-02-05 쉽게 배우는 MySQL 5.x

STUDENT 테이블의 출생년도를 계산하여 AGES라는 VIEW 테이블을 작성 mysql> create view ages(stu_no, stu_name, age) as     -> select stu_no, stu_name, year(now()) - birth_year + 1     -> from student; Query OK, 0 rows affected (0.14 sec) mysql> select * from ages; +----------+----------+------+ | stu_no   | stu_name | age  | | 20001001 | 김유신   |   27 | | 20001015 | 박도준   |   30 | | 20001021 | 이상길   |   33 | | 20041002 | 김유미   |   25 | | 20041007 | 정인정   |   25 | | 20041033 | 연개소문 |   27 | | 20061011 | 박정인   |   25 | | 20061014 | 고혜진   |   21 | | 20061048 | 김영호   |   27 | | 20071001 | 장수인   |   19 | | 20071010 | 홍길동   |   20 | | 20071022 | 이순신   |   19 | | 20071300 | 유하나   |   20 | | 20071307 | 김문영   |   20 | | 20071405 | 최차영   |   20 | 15 rows in set (0.00 sec) -AGES 뷰의 내용은 데이터베이스에 저장되지는 않지만 SELECT 명령문(또 다른 명령문)이 실행되는 순간에 유도 -뷰의 사용은 기억 공간을 사용하는 부가적인 비용이 없고, 다른 테이블에 이미 저장된 데이터로 구성 뷰가 주로 사용되는 경우 • 반복되는 명령문이나 루틴(routine)을 간단히 사용하고자 할 때, • 테이블의 출력 방법을 재구성하고자 할 때, • 여러 단계에서 SELECT 명령문이 사용될 때, • 데이터를 보호하고자 할 때 2019-02-05 쉽게 배우는 MySQL 5.x

ROOT 사용자의 데이터 보안 -데이터베이스에 저장된 데이터는 부정확한 사용이나 잘못된 사용에 대비하여 보호되어야 한다. -GRANT라는 명령문을 사용하여 사용자의 접근을 등록할 수 있다. root 패스워드를 “12345”로 설정하기 mysql> use mysql; Database changed mysql> update user set password=password('12345') where user = 'root'; Query OK, 1 row affected (0.09 sec) Rows matched: 1  Changed: 1  Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.08 sec) 2) 슈퍼 유저[Root] 패스워드 변경 2가지 ■ SET PASSWORD 사용하기 SET PASSWORD 문을 사용하여, root의 패스워드를 12345로 변경하는 예제 이다. flush privileges; 명령을 사용하지 않아도 바로 적용이 된다. 2019-02-05 쉽게 배우는 MySQL 5.x

-SET PASSWORD 문을 사용하여, root의 패스워드를 12345로 변경하는 예제 -flush privileges; 명령을 사용하지 않아도 바로 적용 mysql> set password for root@localhost = password('12345'); Query OK, 0 rows affected (0.05 sec) UPDATE 문으로 user 테이블 수정하기 -UPDATE 문을 사용하여 mysql 시스템 데이터베이스 안의 user 테이블을 수정 -flush privileges; 명령을 주어야 적용 mysql> update user set password=password('12345')     -> where user='root'; Query OK, 0 rows affected (0.00 sec) Rows matched: 1  Changed: 0  Warnings: 0 mysql> flush privileges; 2019-02-05 쉽게 배우는 MySQL 5.x

-PASSWORD()는 해독할 수 없는 암호화 방식 -base64 인코딩 방식은 디코딩이 가능하지만, pasword()는 해독 함수가 존재 하지 않는다. -for 루프 등을 돌려서 추측할 수 있으므로, 비밀번호는 최소 8자 이상으로 설정 -비밀번호는 길이가 길어지면, 해독 시간이 늘어나기 때문 mysql> select password('12345'); +-------------------------------------------+ | password('12345')                         | | *00A51F3F48415C7D4E8908980D443C29C69B60C9 | 1 row in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

사용자 생성 및 권한 부여 CREATE 문으로 user 생성하기 [형식]  create user 사용자명 identified by '비밀번호'; ① CREATE 문을 사용하여 새로운 사용자 “choi”를 암호(Password) “choi123” 으로 생성해 보자. ② CREATE 문을 사용하여 새로운 사용자 “lee@localhost”를 암호(Password) “lee123” 으로 생성해 보자. ① mysql> create user choi identified by 'choi123';    Query OK, 0 rows affected (0.00 sec) ② mysql> create user lee@localhost identified by 'lee123';    Query OK, 0 rows affected (0.16 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

사용자 “lee”는 host명이 “localhost”이므로 localhost로 접속이 가능 -테이블의 "user" 테이블에서 새로이 생성된 사용자를 확인하기 위해 호스트명, 사용자, 비밀번호를 출력해보자. mysql> select host, user, password from user; +-----------+------+-------------------------------------------+ | host      | user | password                                  | | localhost | root | *FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2 | | %         | choi | *C6A35C53FC3460B0050486E1FB5A9D6B916407FA | | localhost | lee  | *694E6C3F78B6E0EE7CCC45C949CD225769EE7CA6 | 3 rows in set (0.00 sec) 사용자 “lee”는 host명이 “localhost”이므로 localhost로 접속이 가능 사용자 “choi”의 경우는 host명이 “%”이므로 원격에서 접속이 가능 사용자 권한부여 [형식1]  grant all privileges on 데이터베이스명.* to 사용자명; [형식2]  grant 부여할 권한 SQL명령문 on 데이터베이스명.* to 사용자명; 2019-02-05 쉽게 배우는 MySQL 5.x

①사용자 “lee”에게 “haksa” DB를 select, insert, update, delete 권한 부여 ① mysql> grant select, insert, update, delete on haksa.* to lee@localhost;    Query OK, 0 rows affected (0.00 sec) ② mysql> grant all privileges on haksa.* to choi;    Query OK, 0 rows affected (0.02 sec) ③ mysql> grant all privileges on *.* to lee@localhost; ①사용자 “lee”에게 “haksa” DB를 select, insert, update, delete 권한 부여 ②사용자 “choi”에게 “haksa” DB를 관리할 수 있는 모든 권한 부여 ③사용자 “lee”는 모든 DB를 모든 권한을 가지고 관리할 수 있도록 권한 부여 사용자 생성 및 권한부여를 동시에 처리 [일반형식] grant priv_type [(column_list)] [, priv_type [(column_list)] ...] on tbl_name | * | *.* | db_name.* to user_name [identified by 'password'] [, user_name [identified by 'password'] ...] [with grant option] [형식1]  grant all privileges on DB명.* to DB계정명@localhost identified by '비밀번호' with grant option; [형식2]  grant all privileges on DB명.* to DB계정명 identified by '비밀번호' with grant option; [형식1]의 경우는 localhost에서 'DB계정명' 이라는 사용자를 등록한 경우 [형식2]의 경우는  localhost 아닌 원격에서 접속시 호스트를 % 로 해준 경우 2019-02-05 쉽게 배우는 MySQL 5.x

①사용자 “kim”, password는 “kim123” 생성, “haksa” DB에 모든 권한 부여 ① mysql> grant all privileges on haksa.* to kim@localhost identified by 'kim123'            with grant option;    Query OK, 0 rows affected (0.00 sec) ② mysql> grant all privileges on *.* to han identified by 'han123' with grant             option; ①사용자 “kim”, password는 “kim123” 생성, “haksa” DB에 모든 권한 부여 ②사용자 “han”, password는 “han123” 생성, 모든 DB에 모든 권한 부여 "user" 테이블에서 새로이 생성된 사용자를 확인하기 위해 호스트명, 사용자, 비밀번호를 출력해보자. mysql> select host, user, password from user; +-----------+------+-------------------------------------------+ | host      | user | password                                  | | localhost | root | *FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2 | | localhost | kim  | *DFC0E7A43E14F96552318E8651E32B546FE91C59 | | localhost | lee  | *694E6C3F78B6E0EE7CCC45C949CD225769EE7CA6 | | %         | choi | *C6A35C53FC3460B0050486E1FB5A9D6B916407FA | | %         | han  | *C4B2087D966138F5AB4470F41E7BEEFDC593157D | 5 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

[형식2] delete from user where user='해당유저이름'; 사용자 삭제 [형식1]  drop user '해당유저이름'; [형식2]  delete from user where user='해당유저이름'; [형식3]  delete from db where user='해당유저이름'; [형식1]은 “user” 테이블과 "db" 테이블에서 해당유저를 완전히 삭제 [형식2]는 “user” 테이블에서 사용자를 삭제하는 경우 [형식3]은 "db" 테이블에서 해당유저에게 부여된 데이터베이스의 권한을 삭제 사용자의 데이터베이스를 권한을 알 수 있는 "db" 테이블의 정보를 알아보자. mysql> desc db; +-----------------------+---------------+------+-----+---------+-------+ | Field                 | Type          | Null | Key | Default | Extra | | Host                  | char(60)      | NO   | PRI |         |       | | Db                    | char(64)      | NO   | PRI |         |       | | User                  | char(16)      | NO   | PRI |         |       | | Select_priv           | enum('N','Y') | NO   |     | N       |       | | Insert_priv           | enum('N','Y') | NO   |     | N       |       | | Update_priv           | enum('N','Y') | NO   |     | N       |       | | Delete_priv           | enum('N','Y') | NO   |     | N       |       | : : : | Drop_priv             | enum('N','Y') | NO   |     | N       |       | | Execute_priv          | enum('N','Y') | NO   |     | N       |       | 20 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x

①의 경우는 사용자 “kim”을 완전히 삭제 처리한 경우 ②의 경우는 “user”테이블에서 사용자 “lee”를 삭제한 경우 새로이 생성된 사용자의 데이터베이스 권한을 확인하기 위해 “db”테이블에서 호스트명, DB명, 사용자, select 권한만을 출력해보자. mysql> select host, db, user, select_priv from db; +-----------+-------+------+-------------+ | host      | db    | user | select_priv | | localhost | haksa | lee  | Y           | | %         | haksa | choi | Y           | | localhost | haksa | kim  | Y           | 3 rows in set (0.00 sec) ① mysql> drop user kim@localhost; ② mysql> delete from user where user='lee'; ③ mysql> delete from db where user='lee'; ①의 경우는 사용자 “kim”을 완전히 삭제 처리한 경우 ②의 경우는 “user”테이블에서 사용자 “lee”를 삭제한 경우 ③의 경우는 “db”테이블에서 사용자 “lee”를 삭제한 경우 2019-02-05 쉽게 배우는 MySQL 5.x

[형식] revoke SQL명령문 on DB명.* from '해당유저이름'; 사용자 권한 회수 [일반형식]  revoke priv_type [(column_list)] [, priv_type [(column_list)] ...] on tbl_name | * | *.* | db_name.* from user_name [, user_name ...] [형식]  revoke SQL명령문 on DB명.* from '해당유저이름'; ① mysql> revoke select on haksa.* from choi@'%';    Query OK, 0 rows affected (0.00 sec) ② mysql> revoke select, update on haksa.* from lee@'localhost'; ① 사용자 “choi”을 “haksa” 데이터베이스에서 select할 수 있는 권한 회수 ② 사용자 “lee”을 “haksa” 데이터베이스에서 select, update 권한 회수 mysql> flush privileges; 사용자 “kim”과 “lee”의 권한이 회수되었는지 확인해 보자. mysql> select host, db, user, select_priv, update_priv from db; +-----------+-------+------+-------------+-------------+ | host      | db    | user | select_priv | update_priv | | localhost | haksa | lee  | N           | N           | | %         | haksa | choi | N           | Y           | 2 rows in set (0.00 sec) 2019-02-05 쉽게 배우는 MySQL 5.x