지금까지 SQL의 조인을 어설프게 이해하고 사용하고 있었다 덕분에 오늘 삽질좀 했다. 그래서 관련 내용을 정리해본다. 1. INNER JOIN - 두 테이블간의 조인 조건을 만족하는 ROW만 리턴함... (교집합 이라고 하기엔 좀 애매하지만 일단 그렇게 이해하는게 쉽다.) 2. OUTER JOIN - LEFT/RIGHT/FULL 형태의 OUTER JOIN 이 있음 - LEFT OUTER JOIN의 경우 조인문 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하며, 매칭되는 데이터가 없는 경우 NULL 매칭 - RIGHT OUTER JOIN은 LEFT 조인의 반대 - FULL OUTER JOIN은 일반적으로 사용할 일이 없으며, DB에 따라 지원하지 않음??? 간단히 설명하자면 두..
1. 테이블별 사이즈 확인 (쿼리 시점에 정확한 사이즈는 아니지만, 참고할 만한 데이터임)SELECT table_name, table_rows, round(data_length/(1024*1024),2) as 'DATA_SIZE(MB)', round(index_length/(1024*1024),2) as 'INDEX_SIZE(MB)' FROM information_schema.TABLES where table_schema = '데이터베이스이름' GROUP BY table_name ORDER BY data_length DESC LIMIT 10; 2. Database 별 사이즈 확인 (쿼리 시점에 정확한 사이즈는 아니지만, 참고할 만한 데이터임)SELECT count(*) NUM_OF_TABLE, table..
* 이 글에서는 mysqldump를 이용한 논리적 백업 과 복원을 위한 내용을 위주로 정리한다. (물리적 백업은 전문 DBA에게 부탁하는게 정신건강에 좋을 것 같다.) 백업 MySQL 데이터를 백업하는 방법은 크게 물리적 백업과 논리적 백업이 있다. 1. 물리적 백업 - 물리적 백업은 MySQL DB의 물리 파일을 백업하는 것이다. - 장점 + 물리적 백업은 속도가 빠르며 작업이 단순하다. - 단점 + InnoDB의 물리적 파일은 상응하는 논리 백업에 비해 상당히 크다. + 데이터 복구시에 문제가 발생할 소지가 있으면 문제발생시 원인파악 및 해결이 어렵다. 2. 논리적 백업 - 논리적 백업은 mysqldump 혹은 기타 툴을 이용해서 SQL문을 갖는 텍스트 파일을 생성하는 것이다. - 장점 + 논리적 백..
Use well defined and consistent names for tables and columns (e.g. School, StudentCourse, CourseID ...). --> 직관적이고 일관된 테이블/컬럼 이름을 사용해라 Use singular for table names (i.e. use StudentCourse instead of StudentCourses). Table represents a collection of entities, there is no need for plural names. --> 테이블 이름에 복수형 보다는 단수형 이름을 사용해라 (난 영어를 잘 못해서 항상 단수형을 써왔지만... 오픈소스 tutorial이나 예제에서는 복수형을 사용하는 경우를 자주 보았는..
1. 신규 사용자를 위한 Tablespace 생성 예제) SQL> create tablespace tablespace_name datafile '/oradata/datafile.dbf' size 100M; 참조 http://www.oracleclub.com/lecture/1095 2. 신규 사용자 생성 예제) SQL> create user user_name identified by password default tablespace tablespace_name; 참조: http://www.oracleclub.com/lecture/1005 3. 신규 사용자에게 권한 할당 예제) SQL> grant connect, resource to user_name 참조: http://www.oracleclub.com/l..
1. 데이터 베이스 추가 /* DB 목록 확인*/ show databases; /* DB 추가 */ create database DB명 2. 사용자 추가 (권한추가) /* 사용자 추가 */ create user 사용자ID /* 사용자 조회 (권환정보) */ select * from user where user = ' 사용자ID '; /* 사용자 삭제 */ delete from user where user = ' 사용자ID '; /* localhost 접속 권한 추가 */ GRANT ALL privileges ON database명.* TO 사용자ID@localhost IDENTIFIED BY '비밀번호'; /* localhost 접속 권한 추가 */ GRANT ALL privileges ON datab..
1. 문자셋 확인 $ mysql 접속... (mysql -u [사용자계정] -p) mysql> \s mysql> use DB명 mysql> \s 2. 문자셋 설정 2.1 해당 세션의 문자셋 변경 (다시 접속하면 원복됨 ^^;;;) mysql> SET character_set_client = utf8; mysql> SET character_set_results = utf8; mysql> SET character_set_connection = utf8; mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET utf8; mysql> commit; 2.2 기본 설정 변경 (/etc/my.cnf 파일 내용 수정) [mysqld] character-set-client-handsha..
컴포넌트 컬렉션 맵핑을 시도해 보았다. 하지만 실패다. 원인 모른다. 하이버네이트는 이래저래 쉽지 않은 놈인 것 같다. ㅠ.ㅠ @Entity @Table(name = "TBL_CONTENT_META") public class ContentMeta extends AbstractModel { . . . @ElementCollection @JoinTable(name = "TBL_CONTENT_FILE", joinColumns = @JoinColumn(name = "CONTENT_ID")) @CollectionId(columns = @Column(name = "ID"), type = @Type(type = "int"), generator = "native") private Collection contentFil..