JOIN DELETE (Multiple-table Delete)


두개의 테이블을 조인하여 UPDATE를 실행하는 것(JOIN UPDATE)과 같이,

두개의 테이블을 조인하여 그 결과 레코드를 삭제하는 것도 가능하다.

이를 JOIN DELETE 또는 Multiple-Table DELETE라고 하는데,
JOIN DELETE는 아래 두 가지 문법으로 작성할 수 있다.

  • DELETE와 FROM 절 사이에 삭제할 테이블 명시

    DELETE
     t1, t2 
    FROM test1 t1 INNER JOIN test2 t2 INNER JOIN test3 t3
    WHERE t1.id=t2.id 
      AND t2.id=t3.id;

  • FROM과 USING 절 사이에 삭제할 테이블 명시
    DELETE 
    FROM t1, t2 
      USING test1 t1 INNER JOIN test2 t2 INNER JOIN test3 t3
    WHERE t1.id=t2.id 
      AND t2.id=t3.id;

JOIN DELETE에서도 주의해야 할 사항이 있는데,
  • 조인 결과 레코드가 삭제되는 테이블이 어느 테이블인가 ?
    • 첫번째 문법에서는 DELETE 키워드와 FROM 절 사이에 명시된 테이블의 레코드만 삭제한다.
    • 두번째 문법에서는 FROM 절과 USING 절 사이에 명시된 테이블의 레코드만 삭제한다.
    • 위의 두 예제에서는 t1(test1) 테이블과 t2(test2) 테이블의 레코드만 삭제하게 된다. t3(test3)의 레코드는 조인에만 참여하고 삭제되지는 않는다.
  • 테이블의 별명(Alias)는 어디에서 정의해야 하는가 ?.
    • 첫번째 문법에서는 FROM 절 이하에서 테이블의 별명(Alias)를 지정하며, 이 이외의 위치에서는 Alias를 지정할 수 없고, FROM 절에서 정의된 Alias를 사용만 해야 한다.
    • 두번째 문법에서는 USING 절 이하에서만 테이블의 별명(Alias)를 정의해야 한다.


'DataBase > MySQL' 카테고리의 다른 글

[CentOS] mysql, maria DB sql 파일 import  (0) 2016.02.29
CentOS 7 mariaDB  (0) 2016.02.29
MySQL] dump / import  (0) 2016.01.24
[MySQL] Date 날짜 형식 바꾸기  (0) 2015.09.21
mySQL 접속 & 재시작  (0) 2015.02.16

[MySQL] Date 날짜 형식 바꾸기


날짜 형식 "yyyy-mm-dd hh:mi:ss"

DATE_FORMAT( 테이블명 or  컬럼명 or 테이블명.컬럼명, '%Y-%m-%d %H:%i:%s' ) AS XXX

예) 쿼리

SELECT 

A.commonID AS commonId,

A.ResourceDomain AS resourceDomain,

A.UseYN AS useYN,

DATE_FORMAT(A.RegDate, '%Y-%m-%d %H:%i:%s' ) AS regDate,

DATE_FORMAT(A.UpdateDate, '%Y-%m-%d %H:%i:%s' ) AS updateDate

FROM top_commoninfo A

WHERE A.CommonID = #{commonId}


예) 자바에서

http://stackoverflow.com/questions/21879382/convert-string-to-mysql-date-format

형식들

http://j07051.tistory.com/606

'DataBase > MySQL' 카테고리의 다른 글

[CentOS] mysql, maria DB sql 파일 import  (0) 2016.02.29
CentOS 7 mariaDB  (0) 2016.02.29
MySQL] dump / import  (0) 2016.01.24
[MySQL]DELETE Join delete  (0) 2015.09.21
mySQL 접속 & 재시작  (0) 2015.02.16

Database 관련 Naming Rule

 

 

1. Database Schema Name
1.1. 
규칙
    - Database Profile 
이름을 의미함
    - DB Alias 
이름과 동일하게 함
    - 
영문 대문자로 작성함
    - Database Short Name
의 길이는 최대 8자리를 넘을 수 없음
    - Database Short Name
은 각 Site Unique Name을 사용함
1.2. 
표기 방식
      
) TOURDB, ETKP, TKS

 

2. Table Name
2.1. 
규칙
    - 
테이블임을 표시하기 위해 테이블 명 뒤에 ‘_TB’ 라는 구분을 사용함
    - 
테이블명은 대문자로 사용함
    - 
시스템 구분 코드와 모듈구분코드로 업무 영역을 구분함
    - 
의미있는 테이블명은 3단어까지 사용할 수 있음
    - 
단어와 단어 사이는 ‘_’로 구성함
    - 
각 단어는 최대 8자리까지 사용함
    - 
구분명은 Table의 특성을 나타냄
    - 
예로는 Master, Detail, Control, Summary, Trigger, History 등이 있음
2.2. 
표기 방식
    <
시스템 구분> + _ + <의미있는 테이블명> + _ + TB
    
사용자 테이블 : ACT_USERS_TB

 

3. Column Name
3.1. 
규칙
    - 
물리명은 영문 대문자를 이용함논리명을 사용자가 알 수 있는 정도에서 명사 및 명사형동사를 사용함
    - Column
에 대한 자리수는 총 12자리로 하며제한은 없음
      
사용하는 Database의 특성에 따라 제한될 수 있음
    - Word
 Word 사이에는 ‘_’로 구분함
    - 
 Word 8자리를 넘을 수 없음
    - 
모든 Column Dictionary List에 등록된 약어사전 및 자료사전을 기초로 작성함
    - Dictionary List
에 등록되지 않은 약어는 책임자의 동의 하에 등록함
    - Column Name
은 약어의 조합으로 구성
    - 
컬럼명에 컬럼을 대표하는 접미사를 사용하여 컬럼명의 성격을 나타냄.
3.2. 
표기방식

    <
의미있는 컬럼명혹은 <의미있는 컬럼명> + _ + 접미사
    
종종 자주 사용하는 접미사는 다음과 같다.

 

접미사 

내용

설명

_CD

CODE

주로 코드 테이블의 코드각종 코드에 사용된다.
숫자나 문자로 이루어진 코드에 해당되며숫자나 문자의 각 부분이 의미가 있는 경우에 코드를 사용한다대부분 PK에 해당한다
.
대분류 코드
 CTGRY_CD,
     
시도코드
 SIDO_CD,
     
사용자 그룹 코드 USER_GROUP_CD 

_NM

NAME

코드에 대한 명칭에 주로 사용된다논리명이 이름명칭인 경우에 해당된다.
사용자이름
 USER_NM,
     
자원명
 RES_NM,
     
중분류 코드명
 DVSN_NM,
     
메뉴명 MENU_NM

_NO

NUMBER

숫자로만 이루어진 경우주로 논리명이 번호인 경우에 사용.
주민등록번호
 JUMIN_NO,
     
조문번호
 JO_NO,
     
게시물번호 BOARD_NO

_SQ

SEQUENCE

오라클의 Sequence, MSSQL Identity의 경우에 사용한다숫자 일련번호로 PK를 설정할 경우 SQ를 사용한다. MSSQL Identity의 경우 주로 _ID를 사용하는 경우가 많은데사용자 아이디 ? USER_ID ID와 의미가 틀려 SQ를 사용한다.
작업번호
 WORK_SQ,
    
이력번호 HISTORY_SQ

_ID

ID

주로 사용자 아이디의 경우에 사용한다.
사용자아이디
 USER_ID,
    
등록자아이디 REG_ID

_DT

DATE

날짜의 경우 사용한다. DT는 날짜 타입이 DATE형인 경우에만 사용한다보통 날짜의 경우 CHAR(8)형으로 20050718식으로 저장을 많이 한다이런 경우에는 _YMD를 사용한다.
삭제일자
 DEL_DT,
    
변경일자 CHG_DT

_YMD

YYYYMMDD

날짜의 경우 사용한다날짜 타입이 CHAR 인경우 사용한다년월일인 경우_YMD를 사용하고년월형식으로 CHAR(6)로 저장될 경우 _YM을 사용한다.년도일자 인경우에는 YEAR, MONTH, DAY등의 컬럼명을 사용한다.

_GB

구분

구분값을 나타낼 때 사용한다.
CD
는 주로 코드테이블을 별도로 사용할 때 적당하고테이블 없이 코드상에서 구별할 때 사용한다가령 사용자구분 필드가 있을 때 일반사용자내부사용자가 있다면 별도의 사용자 그룹테이블로 분리하여 사용할 경우GROUP_CD가 필드명이 되지만코드상에서 일반(G), 내부(I)로 사용하기로 결정했다면 GROUP_GB 필드명을 사용하면 된다
.
통계구분 STAT_GB

_ST

STATE

상태값이다주로 CHAR(1) 형식을 사용한다.
사용자 상태 USER_ST

_FL

FLAG

플레그값이다종종 삭제하지 않는 테이블에 삭제플레그를 많이 사용된다값은 0/1 이나 Y/N를 많이 사용한다.
삭제여부 DEL_FL, 요청여부 REQ_FL

_ORD

ORDER

순서를 나타낼 때 사용한다.
컬럼순서 COLUMN_ORD

_CNT

COUNT

조회수 VIEW_CNT

_AMT

AMOUNT

재고량 STOCK_AMT

_SUM

SUM

분기합계 QTR_SUM, 년도합계 YEAR_SUM

 

3.3. 순서규칙
    - 
기본적으로 관계형 모델에서 열(Column)의 순서는 의미가 없음.

그러나물리적인 형태로 생성되어 관리될 때에는 보다 효율적인 저장공간의 관리를 위해 다음 순서에 따라 우선순위를 결정함
    - Primary Key
가 우선함
    - Primary Key
내에서는 Index 의미에 따라 순서를 결정함
    - Not Null Columns
이 우선함
    - Not Null Columns 
내에서는 Foreign Key, Attributes 순서로 함
    - Null Columns 
내에서는 다음의 규칙에 따라 순서를 결정함
    - Fixed Length Columns
이 우선함(Date,Number,Char)
    - Smaller Length Column
이 우선함

 

4. Index Name
4.1. 
규칙
    - 
해당하는 테이블명 뒤에 ‘_IX’를 붙여 index임을 명확히 함
    - 
대문자를 사용함
    - 
일련번호는 01 ~ 99까지 사용할 수 있음
    - MSSQL
의 경우 클러스터드 인덱스와 넌 클러스터드 인덱스를 구분하여 작성함.

클러스터드 인덱스 _IXC를 사용하며넌 클러스터드 인덱스는 일반 인덱스 명 룰을 따름.
    - 
테이블에 인덱스가 하나만 존재할 경우 일련번호를 사용하지 않아도 됨
.
4.2. 
표기 방식

      <
시스템 구분> + _ + <의미있는 테이블명> + _ + IX{<일련번호>}
      
) Table명 ‘I01_MASTER_TB’의 Index : I01_MASTER_IX01

 

5. Primary Key Name
5.1. 
규칙
    - 
영문 대문자로 작성함
    - 
해당하는 테이블명의 맨 뒤에 ‘_PK’라는 구분을 사용함
5.2. 
표기방식
      <
시스템 구분> + _ + <의미있는 테이블명> + _ + PK
      
) Table 명 ‘AC_USERS_TB’의 Primary Key : AC_USERS_PK

 

6. Foreign Key Name
6.1. 
규칙
    - 
영문 대문자로 작성함
    - 
해당하는 테이블명의 맨 뒤에 ‘_FK’라는 구분을 사용함
    - 
일반적으로 테이블명과 컬럼명까지 사용하나, OBJECT의 명칭이 길어져서 테이블명을 기준으로 작성함.
    - 
일련번호
 : 1 ~ 9
6.2. 
표기방식

      <
시스템 구분> + _ + <의미있는 테이블명> + _ + FK{<일련번호>}
      
) Table 명 ‘I01_MASTER_TB’의 Foreign Key : I01_MASTER_FK1

 

7.  Stored Procedure Name
7.1. 
규칙
    - 
길이는 큰 제한이 없으나 오라클의 OBJECT NAME 길이 제한은 있음.
    - 
해당하는 테이블명의 맨 뒤에 ‘_SP’라는 구분을 사용함

    - 
기능명은 복수개 사용이 가능하면 3개의 단어를 넘지 않도록 함
    - 
기능을 나타내는 명칭이 하나일 경우 일련번호를 생략해도 됨.
    - 
단어간에는 ‘_’로 구분함

    - 
업무룰에 해당되지 않는혹은 특정 테이블에 해당되지 않는 DBMS 전반적인 프로시저의 경우,

시스템 프로시저로 작성하는 경우에는 시스템구분 과 테이블명을 생략하고 간단히 작성할 수 있다.

스키마 스크립트 GENERATION ? GENERATE_SP
    - 
오라클의 경우 패키지 내부의 프로시저의 경우 패키지 명칭에 시스템구분을 사용하므로,

프로시저나 함수명에 시스템구분 코드를 넣지 않는다.

또한 기능에 따른 일련번호를 사용하지 않고 OOP의 기능인 Method Overloading 의 기능을 사용하여 작성한다.

또한 명칭은 Camel 표기법을 사용하여 작성한다사용자를 가져오는 경우 getUsers()
7.2. 
표기방식

      <
시스템 구분> + _ + <의미있는 테이블명> + _ + <기능명>{<일련번호>} + _ + SP
      
I01_MASTER_TB’ 테이블에서 데이타 입력에 대한
 Procedure
          : I01_MASTER_INS01_SP



Mongo DB 설치




   (나는 최신버전으로 받음 R3.0.2)


  • c 드라이브에서 압축해제

   (나는 mongodb-win32-x86_64-2008plus-3.0.2 --> mongodb로 폴더명 바꿈)


  • data 폴더 하나를 만들어 준다.




  • cmd 실행 후 

   mongod --dbpath ..\data


입력하면 db연결

해제  ctrl + c


mongoDB 연결 참고 링크 http://bcho.tistory.com/889



'DataBase > NoSQL' 카테고리의 다른 글

No SQL  (0) 2015.04.20

No SQL에 대한 자료


Twitter, Tumblr

Facebook DB scheme

RDBMS vs NoSQL

카산드라 vs 몽고DB


상황에 맞게 여러 DB 사용

요즘 같은 시대에 기획자들의 컨텐츠를 따라가려면 한가지 DB를 사용하기에는 커다란 무리가 있습니다. 적어도 2, 3개의 DB를 가져가야 되죠. 게임을 개발하는데에 한 종류의 DB로 모든 것이 구현 가능해도 서비스에 문제가 발생할 것입니다. 기본 데이터는 RDBMS에 저장하고, 빠른 캐시성 대이터 읽고쓰기/정렬을 위해서는 Redis를 쓰고, 로그는 스키마에서 자유로운 MongoDB를 쓰는 등 적절한 곳에 DB등을 사용하여야 몸도, 마음도 편해질 것 같습니다.

'DataBase > NoSQL' 카테고리의 다른 글

Mongo DB 설치  (0) 2015.04.20

+ Recent posts