IT 관련/Database24 [MySQL]트랜잭션(transaction) 처리#1 트랜잭션(transaction) 처리#1 조금 어려운(?) 트랜젝션 처리를 생각해보자. 어렵지는 않은데 매우 자주 보게 되는 실수다. 예를들어 보자트랜젝션 예를 들때... 항상 그렇듯이 은행 계좌에서 이체를 한다고 하자.고객계좌 테이블(account) 하나와 모든 이체 이력을 저장 하는 테이블 (TransferHistory)이 있다고 하자. CREATE TABLE account ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR (50) NOT NULL, amount DECIMAL (19, 4) NOT NULL ); CREATE TABLE TransferHistory ( id INT AUTO_INCREMENT PRIMARY KEY, from_id INT NOT NUL.. IT 관련/Database 2017. 12. 28. [MySQL] 트랜잭션(transaction) 처리 트랜잭션(transaction) 처리 트랜젝션이라는 단어를 수 없이 들었을 것이며, 대부분의 개발자들은 잘 처리하리라 생각한다. 다만 DB에서의 트랜잭션 처리는 기본중의 기본이며, 데이터의 뮤결성을 유지 하는 핵심이다. MySQL, MariaDB에서 나의 불만 중 하나는 왜 autocommit = on이 default 인가 하는 문제다. 과거 30년전 오라클을 처음 사용했을때 신나게 insert... 구문을 실행(약 1000번쯤)하고, 얼마 지나지 않아 DB가 먹통이 되어 욕을 바가지로 먹은 기억이 있다. 고참이 간단하게 commit; 한문장을 실행하고 DB가 정상으로 돌아 왔을때 그 놀라움이란... 예를들어 보자 트랜젝션 예를 들때... 항상 그렇듯이 은행 계좌에서 이체를 한다고 하자. 고객계좌 테이블.. IT 관련/Database 2017. 12. 28. Primary Key vs Unique Index Primary Key vs Unique Index Primary Key = Unique Index + Not null 위의 말이 틀린 것은 아닙니다만... 저 등식 자체가 성립되지 않습니다. 이산화탄소( CO2) = 탄소(C) + 산소(O) * 2 위의 공식이 일견 틀린 것 같지는 않지만, 왠지 부적절해 보이는 것과 마찬가지 입니다. Primary Key라고 하는 것은 논리적인 개념이라고 이해 하셔야 합니다. 일반적인 프로그램밍에서 두 객체가 동일한 것인지 알아 보기 위해 객체의 해시값을 확인하듯이 Primary Key도 자신과 다른 레코드가 서로 다른 인스턴스임을 확인할 수 있게 해 주는 역할을 합니다. 즉, 레코드의 해시 값(고유한 값)입니다. DBMS 입장에서 보면 Primary Key Column.. IT 관련/Database 2017. 12. 27. [MySQL] CONNECT Storage Engine Oracle연동 CONNECT Storage Engine Oracle연동 실무중 많이 발생하는 이기종 DB간의 연결이다. 이 글에서는 MariaDB-Oracle DB 를 예로 설명한다. Oracle DB가 아닌 MSSQL , Postgre 등의 연결도 해당 DB에서 제공하는 Driver 들을 설치 설정하면 크게 다르지 않다. 예를 들어 가입자(회원) 정보는 Oracle DB에 있고 실제 단위 서비스에 대해서는 MariaDB or MySQL를 사용하는 경우 회원 정보 1,2명의 데이터를 처리가 아니라 수백 수천만명의 데이터를 처리 해야 하는 경우... 이럴때.. MariaDB(MySQL)에서 제공하는 CONNECT Storage Engine을 통해서 MariaDB(MySQL) --> Oracle DB로 직접 억세스 해보자.. IT 관련/Database 2017. 12. 26. [MySQL] 요일 구하기 함수 weekday() 주의 요일 구하기 함수 weekday() 주의 특정일자의 요일을 구하는 로직은 프로그램을 짤때 많이들 사용 하는 로직입니다.주로 사용 하는 몇몇 랭귀지의 예를 보면[javascript] var d = new Date(); d.getDay(); return : 0 = Sunday, 1 = Monday, .... 6 = Saturday [PHP] $date = date('w'); return : 0 = Sunday, 1 = Monday, .... 6 = Saturday 즉, 대부분의 프로그래밍 랭귀지에서는0 = Sunday, 1 = Monday, .... 6 = Saturday 로 리턴됩니다.전통적으로 sunday가 0부터 시작이지요. Database에서도 동일한 함수들을 제공 합니다.단, ODBC에서 표준은 요.. IT 관련/Database 2017. 12. 25. [MySQL] csv 파일을 직접 테이블로 Import csv 파일을 직접 테이블로 Import -- LOAD DATA INFILE statement LOAD DATA [LOCAL] INFILE 'file_name' INTO TABLE tbl_name [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] ※ 주의점CSV File 를 읽어 이를 처리 하는 방버은 매우 빠른 속도를 제공합니다. 그러나 데이터 등록시 해당 테이블에는 lock이 걸릴 수 있습니다.처리 하려는 CSV 파일의 .. IT 관련/Database 2017. 12. 25. [Data 모델링] 엔티티(Entity), 애트리뷰(Attribute) [Data 모델링] 엔티티, 애트리뷰 엔티티(Entity) 현실 세계에서 다른 모든 것들과 구분되는 유형, 무형의 것을 엔티티라고 정의하며 업무 수행을 위해서 알아야 될 대상이 되는 것들을 엔티티로 정의한다. - 무지 어렵다. 엔티티라는 것을 도출해 내는 일이 쉬운일이 아니기 때문이다. 가장 쉬운 말로 관리 되어야 하는 단위 라고 표현하는 것리 나의 생각이다.예) 사원, 부서, 회사 등등 엔터티 선정시 유의사항 엔터티 후보의 선택은 데이터 모델링의 시작 부분이다. 엔터티 후보를 선정하는 동안에 아래와 같은 몇 가지의 유의사항을 염두에 두어야 한다. 1. 프로세스(업무 흐름)은 머리에서 지우자. 모든 개발자 혹은 설계자들이 흔히 하는 실수다.엔티티를 찾아 내는 일은 업무의 흐름(일의 진행)등에 대해서 먼저.. IT 관련/Database 2017. 12. 18. [MySQL] last_insert_id() 사용시 주의 많은 개발자들의 Database 관련 코드를 보면 심심치 않게 위험한 요소들을 가지고 있다. MySQL 를 다루면서 많은 실수를 하는 부분이 바로 Last_insert_id() 사용과 관련된 부분이다. 오늘은 잘못된 auto_increment 과 last_insert_id() 사용을 이야기 하려 한다. 1. auto_increment MySQL ( or MariaDB) 사용 시, 테이블은 InnoDB로 생성하고 PK를 auto_increment 로 설정 하는 경우가 많다.성능면에서 보면 당연한 선택이다.헌데 가끔 MySAM로 테이블을 생성 하는 경우가 있다. 이 부분은 나중에 Engine을 설명할 기회가 있다면 그때 언급하자.반드시 engine은 특별한 경우가 아니면 InnoDB로 생성하여야 한다. 2... IT 관련/Database 2017. 12. 17. NULL 데이터에 대한 이해 DB에서 null 값은 매우 특별한 값이다. null 값은 과연 어떤 값일까?공백문자일까?, 0 일까?, empty 값일까? 그냥 null data는 말 그대로 값이 존재 하지 않는다 라고 이해 해야한다.값이 존재 하지 않는다라고 이해를 하면...값이 존재 하지 않으니 인덱스를 생성 할수도 없다.당연히 비교 자체가 불가 하다. 흔히들 SQL문을 작성해서 원하는 결과가 나오지 않으면(속도가 느린 것은 나중문제고) 데이터가 이상하다며, 데이터 검증을 하고 있는 모습을 간혹 보는데 아래는 흔히들 null 에 대한 실수를 하는 예이다. 아래와 같이 tableA 의 column b_id에 null 값이 섞여 있는 데이블이 있다고 하면 SELECT * FROM tableA a_id A_col b_id ------ .. IT 관련/Database 2017. 12. 17. MariaDB Full outer join MariaDB Full Join 처리 MariaDB에서는 MySQL 과는 다르게 Full Join 은 지원하지 않는다. 그러나, 다른 방법을 통해 얼마든지 구현 가능하다. MySQL join 내용은 MySQL Join정리(http://cirius.tistory.com/1135 )를 참조 하세요. -- select from Table A full outer join Table B on A.key = B.key where A.key is null SELECT * FROM tableA a LEFT JOIN tableB b ON a.b_id = b.b_id UNION SELECT * FROM tableA a RIGHT JOIN tableB b ON a.b_id = b.b_id a_id A_col b_id b_i.. IT 관련/Database 2017. 12. 17. MySQL join 정리 MySQL join 단, MariaDB에서는 Full Join 은 지원하지 않는다. 아래와 같이 tableA, tableB 의 데이터가 존재한다면 -- tableA data SELECT * FROM tableA a_id A_col b_id ------ ------ -------- 1 a1 (NULL) 2 a2 1 3 a3 2 4 a4 3 5 a5 4 -- tableB data SELECT * FROM tableB b_id B_col a_id ------ ------ -------- 1 b1 1 2 b2 2 3 b3 3 4 b4 4 5 b5 (NULL) -- select from Table A Inner join Table B on A.key = B.key SELECT * FROM tableA a, tab.. IT 관련/Database 2017. 12. 17. [data 모델링] 모델링이란? * 이 글은 완벽하고 철저하게 나의 경험과 실전에서 쓴 글이니 학문적으로, 또는 원리적으로 따지지 말자.몇개의 짧은 글을 통해서 Data Modeling을 완벽하게 설명이 불가 할뿐만 아니라(나 역시 그 정도의 수준이 되지 않으며)실전과 이론에는 엄청난 차이가 있음을 인정해야 한다. 거의 대부분의 IT에서 database 사용은 필수이다.그러나 대다수의 개발자들이 DB를 이용하기만 할 뿐 DB설계를 올바르게 하지 못하거나, 이해하지 못한 상태에서 빠른 코딩에 집중한다. 안타까운 점은 DB설계를 못한다고 해서 코딩을 못하거나, 개발을 못한다라고 말하지 않는다. 반대로 코딩 하면서 함수를 잘 못 만들거나, 클래스를 잘 만들지(구조적으로) 못하면 어느 정도 수준 있는 개발자들은 상당히 불편해 한다."이거는 그.. IT 관련/Database 2017. 12. 17. 이전 1 2 다음