[SQL] 현실 속 외래키(foregin key) 활용 실태
·
STUDY/DB SQL
"외래 키는 개념적으로는 설계에 포함되지만, 실제 데이터베이스에서는 제약 조건 없이 관리되는 경우가 많습니다."Foregin key를 실질적으론 잘 사용하지 않고 개념만 가지고 사용한다는게 사실을 처음 들었다. 실제로 많은 개발자들이 데이터베이스에서 외래 키(Foreign Key)를 물리적으로 설정하지 않고, 개념적으로만 사용하는 경우가 많은데 아마 아래와 같은 이유들로 인한 것 같다.1. 성능 이슈: 대규모 트랜잭션이 발생하거나 많은 데이터를 저장하는 경우 외래 키 제약 조건이 성능에 부정적인 영향을 줄 수 있습니다. 따라서 물리적으로 외래 키를 설정하면 데이터베이스의 속도가 저하될 수 있습니다.2. 분산 시스템: 마이크로서비스 아키텍처 같은 분산 시스템에서는 여러 데이터베이스를 사용할 수 있기 때문에..
[SQL] 행 개수 지정 조회 SELECT TOP LIMIT FETCH FIRST ROWNUM
·
STUDY/DB SQL
SQL SELECT TOP 절SQL의 SELECT TOP 절은 반환할 레코드의 수를 제한할 때 사용하는 절입니다. 주로 수천 개 이상의 레코드를 포함한 대형 테이블에서 필요한 수만큼의 레코드만 조회하여 성능을 최적화하는 데 유용합니다.그러나 모든 데이터베이스가 SELECT TOP을 지원하지는 않습니다. 데이터베이스에 따라 비슷한 기능을 제공하는 다른 구문이 있습니다. SQL Server / MS Access 구문:SELECT TOP number|percent column_name(s)FROM table_nameWHERE condition; MySQL 구문:SELECT column_name(s)FROM table_nameWHERE conditionLIMIT number; Oracle 12 구문:SELECT..
[MySQL] 테이블 스키마 백업하기
·
STUDY/DB SQL
데이터값(레코드값)을 제외한 데이터베이스 스키마(테이블구조)만 백업하는 방법mysqldump명령어로 백업할 때에 -d옵션을 사용하면 백업대상 데이터베이스의 스키마(테이블구조)만을 백업 결과파일에 저장해준다. 즉 데이터값(레코드값)을 생성하는 SQL문은 결과파일에 저장되지 않는다는 의미이다. mysqldump -u DB사용자명 -p -d DB명 > 파일명 [root@sulinux bin]# pwd/usr/local/mysql/bin[root@sulinux bin]# ./mysqldump -u root -p -d tempdb > tempdb.sqlEnter password: ********[root@sulinux bin]# ls -l tempdb.sql-rw-r--r-- 1 root root ..
[MySQL][JAVA] 연동 시 Public key retrieval is not allowed 오류
·
STUDY/DB SQL
Public key retrieval is not allowed 오류 해결법Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowedMySQL 8.x 버전 이상에서 발생하는 문제로 위와 같은 오류가 발생한다.이럴때 JDBC URL에 allowPublicKeyRetrieval=true&useSSL=false를 추가한다.String url = "jdbc:mysql://localhost:3306/DB명?&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=UTC"
[MyBatis] <selectKey> 시퀀스 획득
·
STUDY/DB SQL
FK 컬럼이 있는 테이블과, 참조의 대상이 되는 테이블을 한꺼번에 Insert해야 하는 상황에 사용한다.예를 들어, 주문이 발생했을 때 주문 테이블과 결제 테이블의 Insert 작업은 동시에 진행되어야 한다. 이 때, selectKey를 사용한다. 태그 내부에 정의하는 태그INSERT 구문 실행 전, 실행 후 실행할 SQL문을 지정할 수 있다. 태그에서 실행하는 SQL 구문은 새로 발행되는 기본키값을 획득하는 쿼리 태그의 주요 속성keyProperty: 결과 값을 저장할 객체의 프로퍼티 이름을 지정합니다.resultType: 결과 값의 데이터 타입을 지정합니다.order: 쿼리 실행 순서를 지정합니다. (BEFORE, AFTER)statementType: 사용할 SQL 문의 종류를 지정합니다. (STAT..
[MyBatis] Oracle Clob Select String 마이바티스 오라클 clob 출력
·
STUDY/DB SQL
SELECT ID, TO_CHAR(CLOB_COLUMN) FROM TABLE 문제 발단 : clob형 데이터들은 varchar2 형 데이터 처럼 단순히 select 하여 값을 갖고오면 바로 우리가 볼 수 있는 string형으로 보이지 않는다. 그래서 to_char를 사용해서 위와 같이 쿼리문을 작성했으나 아래와 같은 에러가 발생했다.; uncategorized SQLException for SQL []; SQL state [99999]; error code [22835]; ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 4944, maximum: 4000) ; nested exc..
[SQL] 오라클 삭제한 데이터 복구
·
STUDY/DB SQL
오라클 데이터 복구delete 후 commit 해서 날라간 데이터 복구방법 SELECT * FROM '복구할테이블명' AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '원하는시간' MINUTE); 일반적으로 30분 정보가 DEFAULT 값이므로 데이터를 날렸다 싶으면 30분 이내로 위의 쿼리를 사용하면 데이터를 복구할 수 있다 데이터가 살아있는 것을 확인했으나 지금 이 데이터는 메모리 상에 적재되어있는 데이터로 시간이 지나면 사라져버린다.이 데이터가 사라지기 전에 다시 원래의 테이블에 넣어주어야 한다.다음과 같이 처리하면 다시 데이터를 기존의 테이블에 복구할 수 있다. INSERT INTO 테이블명 SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAM..
[MyBatis] <trim> 사용법
·
STUDY/DB SQL
MyBatis의 trim 태그는 동적 SQL 문에서 불필요한 공백과 문자를 제거하고 조건에 따라 SQL 문을 조립하는 데 사용됩니다. 태그를 보완하는 역할을 해줍니다.은 4가지의 속성을 가지고 있습니다. prefix 속성 태그 내부 실행될 쿼리문 가장 앞에 붙여준다. update board username=#{username}, password=#{password}-- 최종 실행 쿼리문update boardsetusername=#{username},password=#{password} prefixOverrids 속성태그 내부 실행될 쿼리문 가장 앞의 단어가 속성값에 설정해둔 문자와 동일할 경우 문자를 지웁니다.select * from tbl_board where OR title = "Bo..