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랑 비슷하기 떄문이다.