Final Project/SQL

[파이널 프로젝트 - SQL]

Ch's Lee 2025. 11. 11. 15:27

 
[계정 생성]

[ 데이터 베이스 생성 ]
create database eum_bank;


[ 계정 생성 ]
create user 'eum_bank'@'%' IDENTIFIED BY 'bank';


[ 권한 주기 ] - root, sys에서 해줘야함함
GRANT ALL PRIVILEGES ON eum_bank.* TO 'eum_bank'@'%';


[ 최종 commit ] 
FLUSH PRIVILEGES;


추가적인 설명 


MariaDB에서 사용자@'%'는 모든 IP 주소에서 접근을 허용하는 사용자 계정을 의미하며, 사용자@'localhost'는 현재 서버(로컬 호스트)에서만 접근을 허용하는 계정을 의미합니다. 즉, 접근 가능한 클라이언트(접속지)의 범위 차이가 가장 큰 특징

 
[자주 사용한 SQL문]

[ALTER]
ALTER TABLE transfer_order_tbl ADD COLUMN to_execution_type VARCHAR(30) NULL AFTER to_created_at;

ALTER로 대부분 수정이 많았다.
이유 : 보통 외래키로 참조하니, 부모키와 자식키 때문에 삭제가 잘 안됩니다.
on cascade를 풀어주면, 되긴하지만....

-- 많이 사용했던 alter문
alter table 테이블명 modify/add/rename/drop으로 컬럼삭제, 컬럼추가, 컬럼 이름 변경 등 진행헀어요.

-- 1. 컬럼 추가 (예: 자동연장 여부 컬럼 추가)
ALTER TABLE deposit_tbl ADD auto_renewal VARCHAR(1) DEFAULT 'N';

-- 2. 컬럼 삭제 (예: 임시로 만들었던 컬럼 삭제)
ALTER TABLE deposit_tbl DROP COLUMN temp_column;

-- 3. 컬럼 이름 변경 (예: deposit_amount를 principal_amount로 변경)
ALTER TABLE deposit_tbl RENAME COLUMN deposit_amount TO principal_amount;

-- 4. 컬럼 데이터 타입 수정 (예: interest_rate 자리수 변경)
ALTER TABLE deposit_tbl MODIFY interest_rate DECIMAL(5,2);

AFTER는 특정 컬럼 뒤에 위치하고 싶을때... 사용했습니다.

[COMMENT]
CREATE TABLE CUSTOMER_TBL (
	c_no	INT	NOT NULL AUTO_INCREMENT COMMENT '고객번호',
	c_id	VARCHAR(20)	NOT NULL COMMENT '고객ID',
	c_user_id	VARCHAR(50)	NOT NULL COMMENT '아이디',
	c_password	VARCHAR(100)	NOT NULL COMMENT '비밀번호',
	c_name_kr	VARCHAR(100)	NOT NULL COMMENT '한글이름',
	c_name_en	VARCHAR(100)	NULL COMMENT '영어이름',
	c_birth_dt	DATE	NULL COMMENT '생년월일',
	c_gender_cd	VARCHAR(1)	NULL COMMENT '성별',
	c_nationality_cd	VARCHAR(3)	NOT NULL	DEFAULT 'KOR' COMMENT '국적코드',
	c_phone_mobile	VARCHAR(20)	NOT NULL COMMENT '휴대전화',
	c_phone_home	VARCHAR(20)	NULL COMMENT '집전화',
	c_email	VARCHAR(150)	NOT NULL COMMENT '이메일',
	c_rrn_hash	VARCHAR(256)	NULL COMMENT '주민번호 해시',
	c_di_hash	VARCHAR(256)	NULL COMMENT '본인중복확인해시값',
	c_ci_hash	VARCHAR(256)	NULL COMMENT '본인확인해시값',
	c_auth_level	INT(2)	NOT NULL	DEFAULT 1 COMMENT '인증레벨',
	c_risk_grade	VARCHAR(10)	NOT NULL	DEFAULT 'LOW' COMMENT  '위험등급',
	c_aml_risk_score	DECIMAL(5,2)	NULL COMMENT 'AML점수',
	c_is_pep	VARCHAR(1)	NOT NULL	DEFAULT 'N' COMMENT 'PEP여부',
	c_is_sanction_hit 	VARCHAR(1)	NOT NULL	DEFAULT 'N' COMMENT '제재대상여부',
	c_status	VARCHAR(20)	NOT NULL	DEFAULT 'ACTIVE' COMMENT '고객상태',
	c_remark	VARCHAR(4000)	NULL COMMENT '비고',
	c_created_at	TIMESTAMP(6)	NOT NULL	DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시',
	c_created_by	VARCHAR(50)	NOT NULL	DEFAULT 'SYSTEM' COMMENT '생성자',
	c_updated_at	TIMESTAMP(6)	NULL COMMENT '수정일시',
	c_updated_by	VARCHAR(50)	NULL COMMENT '수정자',
	c_agree_terms	VARCHAR(1)	NOT NULL DEFAULT 'Y' COMMENT '서비스이용약관동의',
	c_agree_privacy	VARCHAR(1) NOT NULL DEFAULT 'Y' COMMENT '개인정보처리방침동의',
	c_agree_marketing	 VARCHAR(1)	NULL COMMENT '마케팅정보수신동의',
	c_login_type	VARCHAR(20)	NOT NULL DEFAULT 'EUM' COMMENT '로그인유형',
   c_pin_number   VARCHAR(300) NULL COMMENT '계좌 PIN 번호',
   c_address        VARCHAR(300) NULL COMNENT '주소',
   c_zip_code 	 	VARCHAR(300) NULL COMENT '우편번호',
    c_naver_id		VARCHAR(100) NULL COMMENT '네이버ID',
   c_role			VARCHAR(20) NOT NULL DEFAULT 'USER' COMMENT ‘권한’,
	PRIMARY KEY (c_no)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='고객';

특히, COMMENT 사용할 경우 영문으로 된 컬럼을  한글로 표시되어 알수 있습니다.

 
근데, 더욱이 ORACLE을 쓰다가 MariaDB를 사용할 경우 타입에 대한 문제가 많았습니다.
 
특히, Long Oracle인 경우 Long과자바에서의 Long/Clob 타입이 일치하더라구요.
 
MariaDB Long이 아닌,  LongText를 사용해도 된다. 왜냐하면, 숫자 범위 떄문이다. 은행 프로젝트를 하다보니, 범위에 대한 문제점들이 많았다.
 
그래서 mariaDB에서 bigint를 대부분사용하였다. 범위는 Long랑 비슷하기 떄문이다.