MYSQL

오픈 소스 데이터베이스로, SQL을 사용하는 오픈 소스의 RDBMS

RDBMS란? (Relational Database Management System)

RDB는 관계형 데이터 모델에 기초를 둔 데이터베이스로 데이터 모델은 데이터를 구성하는데 필요한 방법 중 하나로 모든 데이터를 2차원 테이블 형태로 표현함(테이블 기반의 DBMS)

데이터베이스의 설계도를 ER 모델이라고 부르며 테이블은 row(레코드), column(아이템)으로 이루어진 기본 데이터 저장 단위

MS는 Management System을 DB의 레코드를 insert, select, update, delete할 수 있도록 해주는 소프트웨어를 지칭하며 DBMS가 SQL을 지원함으로 해당 작업이 가능

R은 DBMS의 특정한 종류를 의미하며, 여러 개의 테이블을 조합해 원하는 데이터를 조회할 수 있음

SQL에서는 transaction, ACID를 지원하고 있음



데이터베이스 명령어 종류




Truncate

테이블 자체를 삭제 후 테이블을 새로 생성하므로 데이터 복구가 불가능

(delete의 경우 데이터를 순차적으로 삭제)


Transaction 이란?

데이터 베이스에서 수행하는 작업의 단위(select, insert, delete, update등으로 구성된 작업단위)

특징(ACID)

원자성: transaction은 데이터베이스에 모두 반영되거나, 모두 반영되지 않아야 함

일관성: 작업 처리 결과가 항상 일관성 있어야 함

독립성: 하나의 transaction이 다른 transaction의 연산에 끼어들 수 없음

지속성: transaction이 성공적으로 완료 된 경우, 해당 결과는 영구적으로 반영되어야 함


COMMIT과 ROLLBACK

Commit은 하나의 transaction이 성공적으로 종료되고, 데이터베이스가 일관성 있는 상태에 있을 때 하나의 transaction이 끝났음을 알려주기 위해 사용하는 연산으로, commit을 통해 transaction 이 로그에 저장

Rollback은 하나의 transaction 처리가 비정상적으로 종료되어 원자성이 깨진 경우, transaction을 처음부터 다시 시작하거나, 연산 결과를 취소 (rollback의 단위는 transaction)


Event

주기적으로 수행 가능한 sql

Trigger

특정 테이블에서 데이터의 변화(select, insert, delete, update)가 발생했을 때 자동으로 실행되는 stored procedure


Index란

Select 성능 향상을 위해 사용

b-tree/hash/fractal-tree index가 있으며 주로 b-tree index를 사용함

b-tree: column값을 변형하지 않고 원래 값을 기준으로 인덱싱 하는 알고리즘

hash: column값을 hash값으로 계산하여 인덱싱 하기 때문에, column값의 일부분 검색이 불가능하며 주로 메모리 기반의 데이터베이스에 많이 사용

fractal-tree: b-tree의 단점을 보완하기 위해 고안된 알고리즘으로, 데이터 저장/삭제하는 경우 처리 비용을 줄일 수 있게 설계되어있으나 아직 불안정함

Primary key를 이용한 index 설정

Primary key란, 하나의 row를 대표하는 column값으로 만들어진 key(index)

따라서 하나의 unique한 row를 식별할 수 있으며 null 사용이 불가능

Secondary key란, primary key를 제외한 나머지 모든 index로 보조 index key라고 불림

따라서 효율적인 index 설정을 위해서는, 카디널리티가 높은->낮은 순으로 구성해야함

카디널리티란, 해당 column의 중복된 수치로 성별(남,여)은 카디널리티가 낮고, 주민번호, 계좌번호등은 카디널리티가 높음


NoSQL과 REDIS

NoSQL은 비정규화를 기본으로 하여 데이터 중복을 허용

따라서 모든 데이터를 한 곳에 모아두기 때문에 쿼리 수행을 위한 I/O가 줄어 전체 성능을 향상시킬 수 있으나, 중복이 허용되므로 전체 데이터의 크기는 증가

더불어 List를 중첩하여 구성할 수 있음


NoSQL의 종류로는 HBase, redis, Cassandra등으로 

Key/value 형태로 저장(대표적으로 Redis)

Key 중복 불가

Document 저장

Key/value 형태와 비슷하나 value에 document type으로 Json, xml등이 사용됨


REDIS란? (remote dictionary server)

REDIS는 memory와 disk 모두에 데이터를 저장할 수 있어 처리 속도가 빠름

Master-slave와 같은 clustering 구성을 분산처리에 용이





CRUD







SELECT col1, col2, ... FROM tablename;


 ▶ 테이블의 모든 테이터를 검색


mysql> select * from testtable;




컬럼명을 *로 하면 모든 컬럼 의미.

 


▶ uid와 name 필드만을 조회


mysql> select uid, name from testtable;




 ▶ where문을 사용하여 특정 조건에 맞는 데이터만을 검색


mysql> select * from testtable where name = "sontaesoo";

 


▶ 출력 결과 레코드의 중복제거하기(DISTINCT)


SELECT DISTINCT sex FROM testtable;




 ▶ 'soo'라는 문자가 포함된 데이터를 모두 검색 (LIKE)


SELECT name FROM testtable WHERE name LIKE '%soo%'



mysql> select name from testtable where name LIKE '%soo%';



 ▶ 특정한  한 문자로 시작하는 데이터만을 출력


SELECT name FROM testable WHERE name LIKE 'park%'



mysql> select name from testtable where name LIKE 'park%';

 


▶ 특정 필드에 데이터가 NULL 인 경우


SELECT uid, name FROM testtable WHERE age IS NULL



mysql> select uid, name from testtable where age IS NULL;




 ▶ 특정 필드의 데이터가 NULL이 아닌 경우


SELECT uid, name FROM testtable WHERE age IS NULL



mysql> select uid, name from testtable where age IS NOT NULL;

 


▶ WHERE 조건문이 여러개 일 경우 (AND/OR) 


mysql> SELECT name, uid, email FROM testtable WHERE savem > 5000 AND sex='M';



 ▶ 결과데이터를 정렬하기 (ORDER BY)


mysql> SELECT name, uid, savem FROM testtable WHERE savem >= 5000 ORDER BY savem DESC;




DESC는 내림차순 ASC는 오름차순.




 ▶ 총 개수 구하기 (COUNT())


mysql> SELECT count(*) FROM testtable WHERE sex='M';




 ▶ 평균 구하기 (AVG())


mysql> SELECT avg(savem) FROM testtable WHERE sex='M';

 


▶ 컬럼의 이름을 바꿔서 출력.


mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;


mysql> SELECT col1, korean + math + english AS '총점' FROM tablename ORDER BY '총점' ASC;

 


▶ 결과중 처음부터 10개만 가져오기


mysql> SELECT * FROM grade LIMIT 10;



 ▶ 결과중 100번째부터 10개만 가져오기.(첫번째 레코드는 0번 부터 시작한다.)


mysql> SELECT * FROM grade LIMIT 100, 10;


//출처 :  어떤 개발자분의 여자친구



+ Recent posts