본문 바로가기

분류 전체보기

(101)
[MySQL / Stored Procedure] 에러 핸들링 (3) CONSTRAINT (上) [MySQL / Stored Procedure] 에러 핸들링 시리즈(1) DECLARE ... HANDLER(2) Error Logging(3) CONSTRAINT (上)(4) CONSTRAINT (下)(5) SIGNAL 어떻게 에러 핸들링에 Constraint를 활용할 수 있나.. (예 : 학생이 강의를 수강하는 모델) 1. 학생이 강의를 수강 학생이 강의를 수강하려면 attending 테이블에 row를 한 개 insert 해 주면 됩니다. 이 때, 이미 수강한 과목인지.. 그리고 학생과 강의가 실제로 존재하는지 확인할 필요가 있습니다.어떻게 할까요? 그냥 `attending` 테이블에 insert 하면 됩니다. 이미 수강한 과목이라면 `attending` 테이블의 Primary Key 제약 조건에 위..
[MySQL / Stored Procedure] 에러 핸들링 (2) Error Logging [MySQL / Stored Procedure] 에러 핸들링 시리즈(1) DECLARE ... HANDLER(2) Error Logging(3) CONSTRAINT (上)(4) CONSTRAINT (下)(5) SIGNAL 아래와 같은 테이블을 만들고, Stored Procedure 실행 중에 SQL Exception 이 발생했을 때, 디버깅에 필요한 단서를 저장합니다.12345678910111213CREATE TABLE `error_log` ( `error_log_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '에러 로그 ID', `proc_name` VARCHAR(100) NOT NULL COMMENT '프로시저 이름', `proc_step` TI..
[MySQL] 명명 규칙 (Naming Convention) 공통 소문자를 사용합니다. 축약어의 사용을 최소화합니다. 축약어를 사용하는 경우에도 소문자를 사용합니다. 테이블 snake_case를 사용합니다. 복수형 명사를 사용합니다. many-to-many 관계에 사용하는 교차 테이블 적절한 명사가 없다면 두 테이블을 and로 연결합니다. movies 테이블과 genres 테이블 사이의 교차 테이블 ⇒ movies_and_genres 컬럼 snake_case를 사용합니다. 특별한 이유가 없다면 Auto Increment 속성의 대체키 (Surrogate Key)를 Primary Key로 사용하고, 컬럼의 이름은 “테이블 이름의 단수형” + “_id” 형식으로 합니다. movies 테이블의 PK 컬럼: movie_id 참조 관계에서 자식 테이블의 Foreign Ke..
[MySQL / Stored Procedure] 에러 핸들링 (1) DECLARE ... HANDLER [MySQL / Stored Procedure] 에러 핸들링 시리즈 (1) DECLARE ... HANDLER(2) Error Logging(3) CONSTRAINT (上)(4) CONSTRAINT (下)(5) SIGNAL Stored Procedure가 실행되는 도중에 발생하는 에러는 DECLARE ... HANDLER 구문을 사용해서 처리할 수 있습니다. MS-SQL의 TRY ... CATCH 구문과 비교했을 때 아무런 부족함이 없다는 점... 칭찬해~ 기본 문법12345678910111213141516DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement handler_action: CONTINUE | ..
[MySQL] 가장 가까운 시설물 조회 - 두 좌표 (위도, 경도) 사이 거리 계산 보통 위도와 경도로 표현된 두 좌표 간의 거리를 계산할 때 Haversine 수식을 사용합니다. 하지만, 이 글에서는 MySQL 5.7.6 이상에서 사용할 수 있는 Spatial 함수로 문제를 풀어봅니다. 예제로 사용할 테이블은 아래와 같습니다. 12345678910CREATE TABLE library_in_seoul ( seq int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT '고유번호' , fclty_nm varchar(50) NOT NULL COMMENT '시설명' , gu_nm varchar(10) NOT NULL COMMENT '구명' , neadres_nm varchar(100) NOT NULL COMMENT '새주소명' , fclty_loc..
[MySQL/Stored Procedure] 접근 제어 설정 (SQL SECURITY) MySQL의 Stored Procedure는, 실행한 user의 privilege 또는 Stored Procedure를 생성한 user의 privilege에 영향을 받습니다. 물론 개발자가 선택할 수 있는데, SQL SECURITY 특성 값에 따라 좌우되죠. SQL SECURITY DEFINER : 생성한 user의 권한을 따름 SQL SECURITY INVOKER : 실행한 user의 권한을 따름 SP에서 이 구문을 생략하면 DEFINER가 기본값이기 때문에 SP를 생성할 때 사용한 user의 권한으로 SP가 실행됩니다. MS-SQL에서는 SP를 호출한 계정의 권한이 사용되는 것과 대조를 이루는데요.아마도 EXECUTE 권한의 차이에서 비롯된 것 같습니다. MS-SQL에서는 SP에 대한 EXECUTE ..
[MySQL/Stored Procedure] 명명 규칙 Stored Procedure 명명 규칙접두어 usp_ 를 사용한다.SP의 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.특정 테이블에 대한 단순 CRUD 작업인 경우, 각각 아래와 같은 이름 규칙을 사용한다.CREATEusp_add_{테이블 이름}RETRIEVEusp_get_{테이블 이름} / 단일 행을 반환하는 경우usp_get_list_{테이블 이름} / 여러 행을 반환하는 경우UPDATEusp_mod_{테이블 이름}DELETEusp_del_{테이블 이름}SP가 특정 비즈니스 로직을 처리하는 경우, 적절한 동사와 명사의 조합을 사용한다.(예) usp_validate_applicant, usp_check_brand_user, ...local variab..
데이터베이스 형상 관리 제가 생각하는 RDBMS에서의 형상관리는 아래 글을 적은 이후 그다지 바뀌지 않았습니다. 2009/04/01 - [MS SQL/Sequel Safe] - [Sequel Safe] 개요 블로그로 정리하기 전부터 사용하던 방식이니.. 벌써 10년이 되었군요. (먼산) 계속 스타트업을 좇다보니 근래에는 주로 MySQL로 개발하고 있습니다.자연스레 MySQL 용으로 형상관리 도구를 만들게 되었구요. 다만 이번에는 함께 일하시던 정기수님의 도움으로 MySQL만으로 처리할 수 없던 부분을 웹 서버에서 처리하게 되었고, UI도 갖추게 됐습니다. 이 툴을 만들어 사용한지도 2년 정도 된 것 같은데요. 어떤 내용인지 소개하는 간단한 동영상을 만들어 봤습니다. 사실 소개라기 보다는 실제로 DB를 하나 만들어 간단히 형상관..