본문 바로가기

Web programming/SQL & DB13

트랜잭션(Transaction)의 4가지 특성 ACID 트랜잭션 Transaction : 트랜잭션은 데이터베이스 내에서 데이터를 처리하는 작업 수행의 논리적인 작업 단위를 (하나의 그룹을) 의미한다. 예를 들어 온라인 쇼핑을 한다고 가정해보자. 주문 완료를 위해 쇼핑몰 업체에 계좌이체를 하려고 한다. 1. 내 계좌에서 2만원을 인출 및 이체한다. 2. 내 계좌에 잔액이 차감된다. 3. 업체에 내 이름으로 2만원이 입금된다. 4. 업체 계좌에 잔액이 더해진다. 이체에 필요한 위의 과정에서 만약, 카드사 및 은행 시스템의 문제로 내 계좌에서는 2만원이 인출됐지만 업체에는 입금되지 않았다면? 내 계좌의 인출 작업도 곧바로 취소돼야 한다. 처리하는 과정에서 문제가 발생하게 되면 진행 중이던 작업(전체)을 취소하고 처음부터 다시 시작해야 하는데(즉, 이체가 완료되거나.. 2020. 6. 3.
[MySQL] 기본 문법, Oracle SQL과의 차이 - DataBase : 데이터가 실질적으로 적재되는 테이블들을 분류하는 상위 개념 - Table : 데이터가 실질적으로 저장되는 저장소 - Schema : 테이블에 적재될 데이터의 구조와 형식을 정의 하는 것 MySQL 사용 시 (Oracle SQL과 다름) 주의 - DB를 사용한다고 지정하지 않을 경우 테이블 사용 시, 테이블명과 함께 DB명을 반드시 기재해야 한다. - ORACLE SQL과 달리 별도 COMMIT없이 자동 업데이트하도록 설정 가능하다. - 문자 데이터타입은 기본적으로 UTF-8이므로 CHAR, VARCHAR에 N형식 없다. - 테이블의 데이터를 쿼리할 때 대/소문자를 구분하기 때문에 오류나지 않도록 작성한다. (Workbench 환경 설정에서 표기관련 설정 가능) - 다중 행에 영향을.. 2020. 5. 8.
[ORACLE SQL] 데이터 조회 기본 문법 !! ▶ DML* (Data Manipulation Language) ; 데이터 조작어 - SELECT : 데이터를 조회 (SELECT*FROM) SELECT * FROM MEMBER; - INSERT : 데이터를 추가 (INSERT INTO ~ VALUES( , );) INSERT INTO MEMBER VALUES(50, 'YH', '010-1234-1212'); -- ID가 50인 회원의 레코드(로우)를 추가 INSERT INTO TABLE VALUES('IDXX', 'HYONI', '010~'); - UPDATE : 데이터를 변경 (UPDATE ~ SET 00 = ' ' WHERE ID = ' ';) UPDATE MEMBER SET NAME = 'HYOEUN' WHERE ID = 'IDXX'; - DEL.. 2020. 5. 8.
JOIN DBMS > 데이터 집중화 > (데이터 분리/관리) > 참초 > 조인 JOIN은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 조인은 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과를 만들어 낸다. 2개의 테이블에서 각각의 공통값을 이용함으로써 필드를 조합하는 수단이 된다. (위키피디아 참조) 분리되있는 데이터를 조인함으로서 원하는 데이터를 조회할 수 있는데 조회할 때, 관계된 데이터는 조인하고 그렇지 않은 객체는 아우터 조인을 작성하여 조회한다. JOIN의 종류 INNER JOIN OUTER JOIN CROSS JOIN SELF JOIN LEFT / RIGHT/ FULL ; 왼쪽/오른쪽을 기준으로 조인할지 방향을 정하거나, 전부 아우터 조인 할 것인지 정할 때.. 2020. 4. 17.
SQL 페이징 우선 ROWNUM 1~10까지 출력 SELECT * FROM( SELECT ROWNUM, N.* FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC) N ) WHERE ROWNUM BETWEEN 1 AND 10; 다음 페이지 분리를 위해서 서브쿼리 -- ROWNUM 11~20 페이징 -- MEMBER에 NAME 칼럼을 (MN으로 별칭써서) 추가 = JOIN SELECT * FROM( SELECT ROWNUM NUM, N.* FROM ( SELECT NOTICE.*, MEMBER.NAME MN FROM NOTICE LEFT JOIN MEMBER ON MEMBER.ID = NOTICE.WRITER_ID ORDER BY NOTICE.REGDATE DESC ) N ) WHER.. 2020. 4. 16.
집합 연산자로 데이터 레코드를 합하여 출력 (UNION, UNION ALL, INTERSECT, MINUS) UNION : 두 집합(쿼리문)의 결과를 하나로 합하여 출력 (중복 값 제거하고 정렬) 통합 검색 시 사용 UNION ALL : 두 집합의 결과를 하나로 합하여 출력 (중복 값 제거 안하고 모두 출력, 정렬X) INTERSECT : 두 집합의 교집합 결과를 정렬하여 출력 (중복 값 제거 ; 두 집합 or 데이터 내 중복 값) MINUS : 두 집합의 차집합 결과를 정렬하여 출력 (큰 집합에서 작은 집합을 빼야하므로 순서 중요) UNION / UNION ALL 사용 시 주의! 두 집합의 SELECT 절에 오는 컬럼의 데이터 타입이 같아야 하고, 컬럼의 개수가 같아야 함 사용 : 우선 테이블별로 조회해서 개수를 확인 후, 테이블을 합한 결과를 확인 해보자 SELECT ID, AGE FROM MEMBER; -.. 2020. 4. 16.
DISTINCT 절과 GROUP BY 절의 차이 DISTINCT 절과 GROUP BY 절 모두 테이블 SELECT 시, 조회 결과를 그룹으로 묶어서 그 결과를 가져오는 역활을 한다. 두 구절은 모두 그룹을 지어준다는 공통점이 있지만, 정렬의 유무에서 차이가 있다. DISTINCT는 결과물을 정렬하지 않고, GROUP BY는 결과물을 정렬해서 표현한다! 따라서, 조회 결과를 그룹으로 묶어서 결과를 가져올 때 정렬이 필요한 경우는 GROUP BY를, 정렬이 필요하지 않는 경우에는 DISTINCT절을 사용하면 된다. 문법 : --GROUP BY SELECT 칼럼 FROM 테이블 GROUP BY 칼럼명 --DISTINCT SELECT DISTINCT 칼럼명 FROM 테이블명 예제 : 테이블(MY_TABLE)에 나이(AGE)로 그룹을 지어 조회 --GROUP .. 2020. 4. 16.
ROWNUM / OUDER BY / 순위를 반환하는 함수 ROW_NUMBER, RANK, DENSE_RANK ROWNUM : 쿼리 내에서 사용 가능한 가상 컬럼. (확인하고자 하는 데이터에 가상으로 번호를 매김) 예문 : 회원 목목에서 상위 5명만 조회 (상위 5개의 데이터) SELECT ROWNUM, NOTICE.* FROM NOTICE WHERE ROWNUM BETWEEN 1 AND 5; ORDER BY : 특정 값에 대한 순위를 매기고 싶을 때 사용 - ASC 를 함께 쓰면 오름차순 - DESC 를 함께 쓰면 내림차순 예문 : SELECT ROWNUM, N.* FROM ( SELECT * FROM NOTICE ORDER BY REGDATE DESC ) N; ORDER BY 절을 사용해서 특정 값에 대한 순위를 매겼을 때, 동일한 등수가 나온 경우에는 ROW_NUMBER / RANK / DENSE_RANK .. 2020. 4. 13.
서브쿼리와 서브쿼리의 중첩 / 쿼리문 작성 및 실행 순서 서브쿼리 Sub Query 메인 쿼리문 안에 서브 쿼리문을 씀 (메인쿼리가 서브쿼리를 포함하는 종속적인 관계) 규칙 - 서브쿼리가 제일 먼저 실행 - 서브쿼리는 소괄호로 감싸서 사용 - 서브쿼리 안에 ORDER BY절 사용 불가 - 연산자 오른쪽에 사용해야 함 예문 : SELECT * FROM (SELECT * FROM NOTICE); 예문 (구절의 순서를 바꿔야 하는 경우) : SELECT * FROM( SELECT N.* FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC) N ) WHERE ROWNUM BETWEEN 1 AND 10; 쿼리문 작성/실행 순서 - 작성 순서 : SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER .. 2020. 4. 13.
관계 연산자, 패턴 연산자, 정규 표현식 관계 연산자 : NOT, AND, OR, BETWEEN, IN OR은 그 중에 하나만 만족해도 조회 IN은 여러개의 '=' / 지정 값 조회 AND는 모두 만족해야 조회 / 연속된 숫자 표현 SELECT * FROM NOTICE WHERE ID = 1700; SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 5; -- 조회수가 0~5인 데이터 조회 FROM NOTICE WHERE HIT IN (0, 5, 7); -- 조회수가 0 또는 5 또는 7인 것 조회 SELECT * FROM NOTICE WHERE HIT NOT IN (0, 5, 7); -- 지정한 값 제외하고 조회 패턴 연산자 : LIKE, %, _ : 검색을 위한 연산자 LIKE 연산자 : 대입연산자(=) 없이 기.. 2020. 4. 10.
데이터를 삽입하는 명령어 DML DML (Data Manipulation Language) 데이터 조작어 종류 : SELECT / INSERT / UPDATE / DELETE SELECT 데이터를 추출하는 명령어 SELECT * FROM MEMBER; 모든 필드(컬럼) 값을 추출 SELECT ID, NAME, PWD FROM MEMBER; 원하는 컬럼만 원하는 순서대로 추출 SELECT ID AS USER_ID, NAME, PWD AS PASSWORD FROM MEMBER; 원하는 컬럼만 원하는 별칭으로 조회 INSERT 데이터를 입력하는 명령어 INSERT 사용 : INSERT INTO VALUES NULL 값 = 입력을 안한 값 INSERT INTO TABLENAME VALUES ('IDNN', '111', '여', '000-000.. 2020. 4. 7.
데이터를 정의하는 명령어 DDL / Character 형식 DDL (Data Definition Language) 데이터 정의어 (어떠한 데이터의 구조를 정의하는 명령어) 종류 : CREATE / ALTER / DROP CREATE (생성) 데이터 구조를 정의 (그룹핑) 하는 명령어 CREATE 사용 : CREATE TABLE TABLENAME 테이블 명이 예약어와 같을 경우 " "로 표기 ALTER (수정) 데이터 조회하는 명령어 모든 데이터 필드 값을 조회하거나, 원하는 칼럼을 수정 할 때 사용 ALTER 사용 : 아래 '사용' 내용 참고 DROP (삭제) 테이블 삭제하는 명령어 DROP 사용 : DROP TABLE TABLENAME; (마우스 커서 둔 상태로 실행) 사용 : DROP TABLE MEM5; SELECT*FROM MEM5; CREATE TABL.. 2020. 4. 7.
DB, DBMS, SQL 정의 DB (Data Base) 데이터들을 저장하는 곳. 데이터를 베이스화 한다. 장점 - 데이터 공유 : 실시간으로 데이터 조회, 수정 등의 업무처리 가능 - 최신 데이터를 유지하며 접근이 용이 함 - 개별 시스템마다 있던 데이터 파일의 중복을 없애는 방법으로 결함을 줄임 단점 - 동시성 : 서로 다른 곳에서 동시에 데이터를 사용(참조)하려는 경우 - 보안 : 네트워크에 있다보니, 보안 문제가 발생 할 수 있음 - 성능 : 대용량 디스크로 엑세스가(CPU에서 메모리를 읽거나 쓰기) 집중되면 과부화 발생. (이러한 단점을 보완하기 위해 데이터베이스에 관리시스템(DBMS)을 사용) DBMS (Data Base Management System) 데이터베이스 관리 시스템 다수의 사용자들이 데이터베이스 내의 데이터를.. 2020. 4. 6.
반응형