8장 MySQL 소개
데이터베이스란 컴퓨터 시스템에 저장된 데이터의 구조화된 집합이 며, 신속하게 찾을 수 있고, 정보를 빠르게 획득할 수 있는 방법으로 조직화되어 있다. MySQL 데이터베이스 관리 프로그램 SQL : Structureed Query Language 사용(구조화된 질의 언어) -> 데이터베이스에서 데이터를 얻거나 저장 하기 위해 사용 MySQL서버>데이터베이스 > 테이블 > 행 열 데이터베이스란 분산되어 있는 데이터들을 어떤 기준에 의해 구조화하고 조직화한 것을 말한다. 데이터베이스는 mysql 서버에 존재하게 되고, 데이터들이 표의 형태로 구조화된 여러 개의 테이블이 모여 이루어져 있다.
데이터베이스란 작가 제목 종류 연도 마크 트웨인 톰소여의 모험 소설 1876 제인 오스틴 오만과 편견 1811 찰스 다윈 종의 기원 논문 1856 찰스 디킨스 낡은 골동품 가게 1841 세익스피어 로미오와 줄리엣 연극 1594 테이블은 표의 형태인데 열과 행으로 이루어져 있다. 열은 컬럼, 속성이라고도 하며, 테이블의 기본 구조를 만든다. 테이블을 만들때 열의 이름 및 데이터 타입등을 지정하여 테이블을 만들게 된다. 만들어진 테이블에 열 값을 추가하면서 데이터를 구조화한다. 행은 열값들이 모여 이루어져 있는데, 하나의 행을 레코드라고 하며 관련된 의미있는 정보들이 모여 있다. 하나의 열값은 필드라고도 하며 데이터베이스를 이루는 가장 기본 단위가 된다.
MySQL 접근 접근 방법 - 커맨드라인 : my-sql 모니터로 접속 phpMyAdmin : 웹 인터페이스 php 프로그래밍 : php 코드에 my-sql 쿼리문 작성
데이터베이스 및 유저 생성 추가된 계정으로 DB에 접속 mysql -u root -p mysql -u [username] –p 계정추가 GRANT ALL ON db.table TO ‘아이디’ @ ‘localhost’ IDENTIFIED BY ‘비밀번호’ ; ALL : 권한 종류(insert, delete, update ..등) db.table : 대상 데이터베이스.테이블 ‘아이디’@ ‘localhost 또는 % 또는 ip주소’ 비밀번호 추가된 계정으로 DB에 접속 mysql -u root -p mysql -u [username] –p CREATE DATABASE Dbname; DB생성 SHOW DATABASES; 생성 DB보기 USE DBname; DB사용
커맨드라인 인터페이스 & 명령어 명령어 뒤에 세미콜론 사용 show databases ; 입력하지 않으면 입력 대기 명령어를 끝냄 : 긴 명령어를 다중라인으로 입력 명령어를 분리 : 한번에 여러 개의 명령어 입력 Mysql> 명령어 대기 ㅡ> 명령어의 다음줄 ‘> 홑따옴표로 시작하는 다음 문자열 대기(“>,`>,/* 동일) 명령어 취소 \c 명령어와 키워드는 대소문자를 구분하지 않음, 명확하게 하 려면 대문자 사용 권장 테이블의 이름은 리눅스, 맥OS 대소문자 구분/ 윈도우 구분하지 않음 -> 이동성을 고려하여 소문자 사용 권장
데이터 타입 데이터타입은 MySQL이 데이터베이스의 크기를 예 상할 수 있고, 더욱 쉽게 검색하도록 한다. 허용된 길이보다 긴 문자열 값은 잘라낸다. 데이터타입(n) : n은 허용된 최대 길이 쓰고자 하는 데이터의 종류와 데이터 타입의 특성 을 고려하여 데이터 타입을 지정한다. -> 효율적인 저장공간 관리 및 성능 향상
CHAR 데이터 타입
BINARY 데이터 타입
TEXT데이터 타입
BLOB 데이터 타입
숫자형 데이터 타입 INT UNSIGNED : 기본값은 SIGN INT(4) : 숫자는 사용할 숫자의 수 INT(4) ZEROFILL : 4자리가 안됐을 때 0으로 채움
AUTO_INCREMENT데이터 타입 테이블의 행에서 적어도 하나의 값이 다르다면 레코드 의 값은 달라지고 서로 구별된다. -> 어떠한 값을 구별 값으로 놓을 것인가? -> 행들을 유일하게 구별할 수 있 는 속성값을 정의한다. 출판물의 ISBN AUTO_INCREMENT : 자동으로 이전에 삽입된 행의 열 항 목 값에 1을 더한 값을 설정
테이블 생성 확인 : DESCRIBE classics;
테이블에 데이터 추가 확인 : SELECT * FROM classics
테이블 이름 변경 및 삭제 열 추가, 변경, 삭제 테이블 이름 바꾸기 테이블 이름 변경 및 삭제 열 추가, 변경, 삭제 테이블 이름 바꾸기 ALTER TABALE classics RENAME pre1900; 열의 데이터 타입 바꾸기 ALTER TABALE classics MODIFY year SMALLINT; 새로운 열 추가 ALTER TABALE classics ADD pages SMALLINT UNSIGNED 열 이름 바꾸기 ALTER TABALE classics CHANGE type category VARCHAR(16) 열 지우기 ALTER TABALE classics DROP pages; 테이블 지우기 DROP TABLE classics;
인덱스 생성 테이블의 내용을 빠르게 검색할 수 있도록 해준다 INDEX, PRIMARY KEY, FULLTEXT 등 다양한 데이터 타입이 존재 어떤 열에 인덱스가 필요한지, 그 열에서 어떤 데이터가 검색될지 예상해서 결정해야 함 The Adventures Of Tom Sawyer -> The Adventures Of To 처음 20개의 문자만 인덱스로 저장함으로써 인덱스의 크기가 줄어들고 데이터베이스 접근 시간이 최적화된다.
인덱스 생성
기본키 테이블의 행에 바로 접근하는 고유 키 다른 테이블과 데이터를 합칠 때 기본키로 접근 ALTER TABLE classics ADD isbn CHAR(13) PRIMARY KEY
FULLTEXT 인덱스 모든 데이터 문자열의 단어를 저장, 검색 엔진과 유사 한 방법으로 자연 언어를 이용해 검색할 수 있는 인덱스 the , as, is, of 등 불용어는 무시, FULLTEXT 검색 시 훨씬 빠르게 도와주며, 데이터베이스의 크기를 작게 유지 MyISAN 엔진, CHAR, VARCHAR, TEXT 열로만 생성 테이블이 생성될 때 명시, ALTER 혹은 CREATE 큰 데이터에서는 FULLTEXT 인덱스가 없는 테이블의 데 이터를 불러온다. FULLTEXT 인덱스가 있는 테이블에 데 이터를 불러오는 것보다 인덱스를 생성하는 것이 빠름
SELECT 원하는 속성만 출력 테이블 행의 수 출력 중복 결과값을 한번만 출력 테이블 행 삭제
SELECT 검색 조건 지정 특정 부분 검색 결과값 출력 방법
MATCH ..AGAINST FULLTEXT 인덱스가 주어진 열에 사용
UPDATE..SET 하나 이상의 열 값을 변경
ORDER BY, GROUP BY 오름차순 ASC, 내린차순 DESC로 결과값 정렬 SELECT author, title,year FROM classics ORDER BY author ASC, year DESC; 반환된 결과를 그룹 짓는 방법, 그룹데이터 정보 획득 SELECT category COUNT(author) FROM classics GROUP BY category;
테이블 조인
테이블 조인 자연 조인 : 두개의 테이블에서 이름이 같은 열을 자동 을 합친다. 자연 조인 : 두개의 테이블에서 이름이 같은 열을 자동 을 합친다. SELECT name, author, title FROM customers NATURAL JOIN classics; 두 테이블을 합칠 때 열을 지정 SELECT name, author, title FROM customers JOIN classics ON customers.isbn=classics.isbn; 앨리어스 사용을 통한 입력과 쿼리의 가독성 향상 SELECT name, author, title FROM customers AS cust , classics AS class WHERE cust.isbn=class.isbn;
논리 연산자 AND, OR, NOT의 조합을 통해 조건을 명세화 시켬 테이블을 합친다.