-
SQL , SQL 명령어, 데이터베이스 명령어, ACID공부/Database 2021. 8. 27. 00:38
🔔 SQL
- Structured Query Language
-> 구조화 된 Query 언어
-> 데이터베이스 용 프로그래밍 언어
-> 데이터베이스에 query를 보내 원하는 데이터만를 가져오거나 삽입할 수 있다. - Query
-> 질의문
-> 예시로 검색창에 적는 검색어도 Query의 일종
-> 저장되어 있는 정보를 필터 하기 위한 질문 - 데이터 베이스가 필요한 이유
-> In-memory : 끄면 데이터가 없어짐, 데이터의 수명이 프로그램의 수명에 의존한다.
-> File I/O : 원하는 데이터만 가져올 수 없고 항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요
- 데이터가 필요할때마다 전체 파일을 매번 읽어야 한다. 파일의 크기가 클수록 작업은 비효율적
- 대용량의 데이터를 저장하기 위한 목적이 아니다.
-> Database : 필터링 외에도 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버
🔔 데이터베이스 관련 명령어
- 데이터베이스 생성
CREATE DATABASE 데이터베이스_이름; - 데이터베이스 사용
-> 데이터베이스를 이용해 테이블을 만들거나 수정, 삭제 등 작업을 위해서 사용하겠다는 명령을 전달한다.
USE 데이터베이스_이름
- 테이블 생성
-> USE를 이용해 데이터베이스를 선택했다면, 테이블을 만들수 있다. 예시로 user라는 테이블을 만드는 예제이다.
CREATE TABLE user ( id int PRIMARY KEY AUTO_INCREMENT, name varchar(255), email varchar(255) );- 테이블 정보 확인
DESCRIBE user;
🔔 SQL 명령어
- SELECT
-> 데이터에 포함될 특성을 설정한다.
SELECT 'hello world'; SELECT 2; SELECT 15 + 3;- FROM
-> 테이블과 과련한 작업을 할 경우 반드시 입력, FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시
SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_1 = "특정 값" --특정 값과 동일한 데이터 찾기 SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 <> "특정 값" --특정 값을 제외한 값을 찾기 SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_1 > "특정 값" SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_1 <= "특정 값" -- 특정 값보다 크거나 작은 데이터를 필터할 때에는 '<', '>', 비교하는 값을 포함하는 '이상', '이하' 값은 '<=', '>=' 을 사용합니다. SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 LIKE "%특정 문자열%" -- 문자열에서 특정 값과 비슷한 값들을 필터할 때에는 'LIKE'와 '\%' 혹은 '\*' 를 사용합니다. SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 IN ("특정값_1", "특정값_2") -- 리스트의 값들과 일치하는 데이터를 필터할 때에는 'IN' 을 사용합니다. SELECT * FROM 테이블_이름 WHERE 특성_1 IS NULL -- 값이 없는 경우 'NULL' 을 찾을 때에는 'IS' 와 같이 사용합니다. SELECT * FROM 테이블_이름 WHERE 특성_1 IS NOT NULL -- 값이 없는 경우를 제외할 때에는 'NOT' 을 추가해 이용합니다.- ORDER BY
-> 정렬하여 출력
SELECT * FROM 테이블_이름 ORDER BY 특성_1 -- 오름차순 SELEC--T * FROM 테이블_이름 ORDER BY 특성_1 DESC -- 내림차순- LIMIT
-> 데이터의 객수를 정한다. 선택적으로 사용 가능( 웹페이지에서 검색시 10개의 내용을 보여주고 넘겨준다는 개념과 비슷)
SELECT * FROM 테이블_이름 LIMIT 200 -- 데이터 결과를 200개만 출력- DISTINCT
-> 유니크한 값을 받고 싶을 때 SELECT DISTINCT를 사용
SELECT DISTINCT 특성_1 FROM 테이블_이름 -- 특성_1을 기준으로 유니크한 값들만 선택 SELECT DISTINCT 특성_1 ,특성_2 ,특성_3 FROM 테이블_이름 -- 특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택- INNER JOIN
-> JOIN으로도 실행 가능
SELECT * FROM 테이블_1 JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B -- 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결- OUTER JOIN
SELECT * FROM 테이블_1 LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B -- 'LEFT OUTER JOIN'으로 LEFT INCLUSIVE을 실행 SELECT * FROM 테이블_1 RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B -- 'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE을 실행🔔 ACID
- 트랜잭션?
-> 여러 개의 작업을 하나로 묶은 실행 유닛
-> 각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료
-> 만약 하나의 작업이라도 실패하면, 트랜잭션에 속한 모든 작업을 실패한 것으로 판단
- ACID
-> Atomicity , Consistency, Isolation, Durability - Atomicity(원자성)
-> 원자성은 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 한다.
-> 하나의 단위로 묶여있는 여러 작업이 부분적으로 실행된다면, 업데이트가 일어났지만 누가 업데이트했는지 모르거나, 업데이트 날짜가 누락되는 등 데이터가 오염될 수 있다. - Consistency(일관성)
-> 데이터베이스의 상태가 일관되어야 한다는 성질
-> 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다.
-> 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다.
-> 데이터베이스의 유효한 상태는 다를수 있지만, 데이터의 상태에 대한 일관성은 변하지 않아야 한다. - Isolation(격리성, 고립성)
-> 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다.
-> 동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜젝션은 독립되어 있어 연속으로 실행된 것과 동일한 결과를 나타낸다.
-> 격리성을 지키는 각 트랜젝션은 철저히 독립적이기 때문에, 다른 트랜젝션의 작업 내용을 알 수 없습니다. 그리고 트랜잭션이 동시에 실행될 때와 연속으로 실행될 때의 데이터베이스 상태가 동일해야 한다. - Durability(지속성)
-> 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 한다.
-> 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻이다.
참고하기 좋은 ....
W3Schools SQL Exercise
I completed all the SQL exercises on w3schools.com
www.w3schools.com
MySQL Tryit Editor v1.0
WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, and Opera. If you use another browser you will still be able to use our Try SQL Editor, but a different version, usin
www.w3schools.com
'공부 > Database' 카테고리의 다른 글
[SQL] FK를 이용하여 여러 Row data를 컬럼과 값으로 Group by 하려면..... (0) 2024.02.27 반복 일정 설계 (0) 2023.07.03 MongoDB - 배열 식별자를 통한 다중 update(feat.arrayFilters) (0) 2022.10.24 ORM(Object Relational Mapping) (0) 2021.12.24 MySQL 데이터 추가, 수정, 삭제 (0) 2021.09.01 - Structured Query Language