728x90

database 19

트리거란? (+예제)

트리거란? 트리거(Trigger) 는 방아쇠라는 뜻인데, DBA라면 기본으로 자주 접할 것이고, 소규모 회사의 개발자라면 직접 DB까지 관리해야 하는 경우도 있는데, 어느정도는 알아두면 좋을 것 같습니다. 개념이나 자세한 이론은 검색하면 많이 나오니, 간단하게 설명하고, 어떻게 사용하면 되는지 간단한 예제로 설명하겠습니다. 트리거는 Oracle 등 다른 RDMBS도 지원하는 기능인데, MS-SQL에서만 사용해 보았습니다. (그래서 제목을 MS-SQL로 달아놓았고, MS-SQL을 기준으로 설명합니다. Oracle 도 사용법 등은 조금 다르지만, 그 사용 목적은 다르지 않습니다.) 위의 뜻처럼 DB에서 어떤 특정 이벤트가 발생하면 자동으로(방아쇠 당기면 총알이 나가듯이) 무언가 실행이 된다는 것으로 보면 되..

MS-SQL 2022.12.08

커서란? (+예제)

커서 행 단위 작업을 효율적으로 하기 위한 방식으로 테이블에서 여러 개의 행을 조회한 후 쿼리의 결과를 한 행씩 처리하는 방식입니다. SELECT 한 결과(행 집합)를 반복 작업해줘야 할 경우 유용하게 사용 가능 한 방식입니다. 커서의 특징 1. 커서는 내장 SQL 문의 수행 결과로 반환될 수 있는 복수의 튜플들을 액세스 할 수 있도록 해주는 개념입니다. 2. 커서는 질의 수행 결과로 반환되는 첫 번째 튜플에 대한 포인터로 생각할 수 있습니다. 3. 커서를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한 번에 하나씩 차례대로 처리할 수 있습니다. 커서 관련 명령어 DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는 명령입니다. OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트 하도록 ..

MS-SQL 2022.12.08

MSSQL 날짜 변환표(GETDATE, CONVERT)

MSSQL 날짜 변환표 (기준날짜를 대상으로 CONVERT 실행하여 날짜 형변환) 번호 쿼리 결과 코드 0 CONVERT(CHAR(19), DATETIME, 0) 01 02 2000 1:14PM MM DD YYYY H:MM 1 CONVERT(CHAR(10), DATETIME, 1) 01/02/2000 MM/DD/YYYY 2 CONVERT(CHAR(8), DATETIME, 2) 00.01.02 YY.MM.DD 3 CONVERT(CHAR(8), DATETIME, 3) 02/01/00 DD/MM/YY 4 CONVERT(CHAR(8), DATETIME, 4) 02.01.00 DD.MM.YY 5 CONVERT(CHAR(8), DATETIME, 5) 02-01-00 DD-MM-YY 6 CONVERT(CHAR(8),..

MS-SQL 2022.12.07

datepart 함수 - 원하는 날짜 형태로 변환하는 함수

DATEPART 함수는 지정한 날짜에서 원하는 날짜 형태를 출력하는 함수 DATEPART 함수 사용하는 방법 DATEPART ( datepart , date ) DATEPART 함수 사용 예제 * 현재 년도 출력하기 SELECT DATEPART(yyyy,GETDATE()) * 현재 월 출력하기 SELECT DATEPART(mm,GETDATE()) * 현재 일 출력하기 SELECT DATEPART(dd,GETDATE()) * 그 외, datepart 인수 DATEPART 함수를 사용하여 출력할 수 있는 datepart 인수는 다음과 같다. datepart 인수 약어 year yy, yyyy quarter qq, q month mm, m dayofyear dy, y day dd, d week wk, ww w..

MS-SQL 2022.12.06

dateadd() 함수

SQL 에서 datetime 형식의 시간에 원하는 만큼을 추가하려면..? dateadd(Type, Add, Date) 을 사용하면 됩니다. 시간 추가 - Date 시간에 원하는 시간을 더해서 구해 줍니다. Type 에 입력될 항목 year , yy, y month, m, mm day, d, dd week, w, wk hour, hh minute, m second, s, ss millisecond, ms Add 에 입력될 항목 Type 에 따른 값. dateadd(year, 1 입력시 1년 추가. Date 추가할 기준 시간 2008-10-10 or 2008-10-10 20:00:00 의 datetime or smalldatetime 형식 샘플 select dateadd(hour, 1, sdate) as v..

MS-SQL 2022.12.02

(MS-SQL 복합키) primary key가 2개일 때

MS-SQL에서 기본키 2개인 복합키를 생성하는 방법 table 생성 CREATE TABLE test_table( id numeric(10,0), sub_id numeric(10,0), content varchar(100), PRIMARY KEY(id, sub_id) ) data insert insert into test_table( id, sub_id, content ) values( 1, 1, 'test' ) Table을 생성했으면 위의 쿼리로 데이터를 두번넣으면 기본키가 중복되어 오류가 나는 것을 확인 할 수 있습니다. (같은 PK의 데이터가 2번 들어갔기 때문..!) 추가로 alter 명령어로 기본키를 추가 하는 방법은 아래와 같습니다. ALTER TABLE TEST_TABLE ADD CONSTR..

Database 2022.11.02

JPA 낙관적 락(부제 - OPTIMISTIC)

OPTIMISTIC @Version만 적용했을 때는 엔티티를 수정해야 버전을 체크하지만 이 옵션을 추가하면 엔티티를 조회만 해도 버전을 체크한다. 한 번 조회한 엔티티는 트랜잭션을 종료할 때까지 다른 트랜잭션에서 변경되지 않음을 보장한다. 용도 : 조회 시점부터 트랜잭션이 끝날 때까지 조회한 엔티티가 변경되지 않음을 보장한다. 동작 : 트랜잭션을 커밋할 때 버전 정보를 조회해서 현재 엔티티의 버전과 같은지 검증한다(SELECT 쿼리 사용). 만약 같지 않으면 예외가 발생한다. 이점 : OPTIMISTIC 옵션은 DIRTY READ와 NON-REPEATABLE READ를 방지한다. DIRTY READ : 커밋되지 않은 데이터를 읽을 수 있다. 예를 등러 트랜잭션1이 데이터를 수정하고 있는데 커밋하지 않아도..

JPA 2022.06.22

(MySQL) Unique Index로 컬럼에 중복값이 못들어오도록 하려면..

PK 컬럼말고 따로 고유 값을 받아야 하는 컬럼이 있을 때 -> 유니크 인덱스(Unique Index)로 유니크 컬럼을 만들면 된다. 찾아보니 방법은 두가지가 있다. 매 쿼리문에서 방지 - 'where not exists' (비추천) INSERT INTO BOARD_LIKE (BOARD_IDX, USER_IDX) VALUES (11, 13) WHERE NOT EXISTS (SELECT BOARD_LIKE_IDX FROM BOARD_LIKE WHERE BOARD_IDX = 11 AND USER_IDX = 13) 컬럼 속성 설정 (추천하는 방식) 중복되면 안되는 컬럼 조합을 UNIQUE INDEX로 설정한다. UNIQUE INDEX ALTER TABLE BOARD_LIKE ADD UNIQUE INDEX (U..

Database 2022.03.21

[MySql] Cannot delete or update a parent row: a foreign key constraint fails 에러 해결 방법

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails mysql에서 DB 테이블이나 Row를 삭제하려고 할때 위와 같은 메시지가 발생할 때가 있다. 말그대로 현재 삭제하려고 하는 테이블 또는 행이 다른 곳에서 참조하고 있기 때문에 발생하는 문제다. 이 문제를 해결하는 방법은 아래와 같다. 1. 해당 테이블 또는 행을 참조하는 데이터를 삭제후 삭제를 한다. 가장 안전한 방법이고 초기 DB 설계자의 의도된 대로 데이터의 관계를 유지할 수 있다는 장점이 있다. (이 때, 참조하고 있는 테이블들의 행을 전부 찾아서 삭제 후, 원하는 테이블의 행을 삭제할 수 있으므로 주의하여야 한다.) 2. 외래키 체크 설정..

Database 2022.03.18
728x90