목록프로그래밍 언어/SQL(DB) (25)
IT 일기장
테이블에 공통적으로 들어가는 아이피 주소를 ipv4 버전 데이터로 넣으려다가ipv6 버전 데이터도 고려해 VARCHAR(15) 에서 VARCHAR(45)로 변경하고 싶다. 그럴려면 컬럼을 변경해야되는데.. 테이블도 많고 하니 일괄로 변경하고 싶다.그래서 프로시저를 사용했다. 우선 조건에 맞는 컬럼들을 검색하는 CURSOR를 정의해준다.나 같은 경우에는 컬럼명이 모두 Ip로 끝나고 데이터 타입이 VARCHAR, 그리고 길이가 15인 컬럼만 조회하는 쿼리를 짰다. 그 다음 조회한 결과의 테이블명과 컬럼명을 FETCH 한 뒤에 컬럼 변경 쿼리를 LOOP로 돌렸다. CREATE PROCEDURE UpdateDateType()BEGIN DECLARE done INT DEFAULT FALSE; DECLA..
날짜 데이터 저장 방식은 회사의 사용 목적과 시스템의 요구 사항에 따라 다르다.날짜를 저장하는 내가 아는 방법은 2가지가 있었는데 1. DATETIME 타입으로 사용 (년/월/일 시:분:초 통째로 저장)2. CHAR 또는 INT 타입으로 사용 (년,월,일 시,분,초 각각 따로 저장) 어떤 방법이 개발에 유리할까?일반적으로는 DATETIME 타입으로 사용하는 것이 더 유리하다. 그 이유는 아래에서 두 가지 방식의 장단점을 비교해본다. DATETIME의 장점 하나의 필드로 날짜와 시간을 모두 저장하기 때문에 구조가 간단하고 관리가 편리날짜와 시간의 형식이 DB에서 자동으로 관리되므로 입력 및 처리에서 실수 방지날짜와 시간을 기준으로 쉽게 정렬하거나 비교할 수 있음-- 날짜와 시간을 기준으로 비교SE..
이 오류는 MySQL에서 발생하는 전형적인 외래 키 제약 조건 위반이다. 보통 외래 키 제약 조건을 가진 테이블에서 부모 테이블의 데이터를 삭제하거나 수정하려고 할 때 자식(참조하는) 테이블에 여전히 연결된 데이터가 있을 경우 이 오류가 발생한다. 이 오류를 해결할 수 있는 가장 빠른 방법은 자식 테이블에서 어떤 데이터가 부모 데이터를 참조하고 있는지 조회하는 것이다. MySQL의 INFORMATION_SCHEMA를 활용해 외래 키 관계를 확인할 수 있다. SELECT TABLE_NAME AS child_table, COLUMN_NAME AS child_column, CONSTRAINT_NAME AS constraint_name, REFERENCED_TABLE_NAME AS pare..

프로젝트 하면서 어디 좋고 쓸만한 무료 Grid가 없나.. 찾아보던 중에 Toast Grid를 발견하게됐다.여기서 들었던 의문점 중 하나가 "Toast Grid는 많은 데이터들을 커버할 수 있을까?" 였는데계획 및 방법은 다음과 같다. 계획1. 테스트 테이블 toast_test 하나 만들어놓고 데이터를 10만개 정도 넣어본다.2. 화면볼때 이상이 없는지 확인한다.3. 이상이 없다면 10만개씩 더 넣어본다.4. 이를 반복 방법1. Java에서 function 하나 만들어서 DB에 데이터를 집어넣는다.2. 프로시저를 사용해서 DB에 데이터를 집어넣는다.3. INSERT 구문을 이용해서 하나씩 DB에 데이터를 집어넣는다. 참고로 현재 DB 개발환경은 MariaDB 11이다.이정도까지만 생각하고 방법 3가..

DB마다 sql export는 필수인데 그 중에서 접근성이 제일 쉬운게 HeidiSQL인데 방법을 정리해둔다. 1. export할 DB 마우스 우클릭 => "데이터베이스를 SQL로 내보내기" 클릭 2. 데이터베이스, 테이블 생성 체크박스 활성화 (데이터베이스가 있다면 체크 안해도된다.) => 데이터 "INSERT (신규 데이터를 삽입)" 선택 => 폴더 아이콘 클릭 후 저장경로 및 sql 파일명 입력 => 내보내기 클릭

에러 데이터를 삭제 하려는 중에 생긴 일이였다. 원인 MySQL Workbench에서 막아 놓은거 같다. 특정 데이터만 삭제 하는게 아니라 전체 삭제하는 경우에.. 해결 # 1번째 방법 일시적으로 Safe 모드를 해제하는 쿼리를 동작시키는 것 (담에 다시 Workbench 킬 때 안된다) set sql_safe_updates=0; # 2번째 방법 Edit 메뉴 => Preferences... => SQL Editor 클릭 => Safe Updates ( ... ) 체크박스 활성화 그리고 Workbench를 재시작해준다

MySQL Workbench 에서 테이블 컬럼을 생성하는데.. 컬럼 정보를 변경하려고 적용버튼 클릭했더니 요런 에러가 발생했다. 원인 데이터 일부분이 잘렸을때 발생하는 에러. 자료형의 범위를 벗어나는 데이터가 들어가 있을 때 발생하는 에러라고 한다 해결 나 같은 경우에는 새로 생성한 컬럼에 Primay Key(기본키)와 Not Null이 체크 돼있었다. 생성할때 옵션도 안붙였는데 왜 붙었나.. 내가 무의식적으로 눌렀나.. 자동으로 붙여주는 옵션이 설정돼있나 아무튼 체크 해제하고 다시해보니 잘 된다. 만약 컬럼 내에 범위를 벗어난 데이터가 들어가 있다면 그 보다 더 큰 자료형으로 변경해서 해결하면 될 듯 ex) 자료형이 int인 경우 : ALTER TABLE [TABLE NAME] MODIFY [COLUM..

상품관리 시스템을 개발하다가 순서 정렬이 제대로 되지 않는 오류건이 발생했었다. 테스트 Table 하나 만들어서 진행해봤는데.. 순서 정렬하는 컬럼 타입이 varchar2 였다. 데이터 넣고 간단하게 조회해 보고 select * from t_order; 내림차순으로 정렬해보니까 이상하게 나왔다.. select * from t_order order by ord desc; varchar2는 제대로 정렬이 안되는구나 하고 숫자로 변경해줬더니 잘됐다. 순서 정렬할 때는 앞으로 컬럼 타입을 숫자로 바꿔주거나, 이미 데이터가 많이 쌓이고 변경하기 부담스럽다면 CAST 변환을 해주면 될듯 싶다. select * from t_order order by cast(ord as unsigned) desc;