Engineering/DB 36

[mysql] INSERT ... ON DUPLICATE KEY UPDATE

MySQL 쿼리 구문중에 "INSERT ... ON DUPLICATE KEY UPDATE" 로 insert or update 를 자주 사용하는데, 그동안 잘못 이해하고 있었던 내용(on update datetime 필드)이 있어서 공유하고자 한다.  간단하게 num 이라는 key 컬럼과 테이블 데이터 변경될때마다 현재 시간을 저장하기 위한 mod_time 이라는 시간 필드가 있다.create table t ( num INT not null, val VARCHAR(10), unique key (num), mod_time datetime default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP); 빈 테이블일때, (1, 'value1') 이라는 데이터를 추가하면..

Engineering/DB 2024.12.11

update 특정 필드 내 문자열 변경 on MySQL

MySQL DB 테이블 내에 특정 필드안에 포함된 문자열을 다른 걸로 바꿔야 할일이 발생했다. 예를 들어 URL 을 가진 필드값이 'http://addr1.com/abc/cde/efg' 를 'http://addr2.com/abc/cde/efg' 로 변경한다. 변경해야할 시나리오는 문자열 앞부분만 바꿔주면 되는 상황이다. (addr1 -> addr2) 갯수를 세어보니 해당 데이터 건수가 1만건이 넘어가서 이걸 프로그램을 짜야하나 싶었다. 그런데 찾아보니 update 문에 replace 함수를 사용할 수가 있었다. update [테이블명] set 변경할필드명 = replace(변경할필드명, '이전문자열', '새로운문자열') 그래서 다음과 같이 전체 문자열에서 변경할 문자열만 지정해서 적용하니 생각보다 빨리 ..

Engineering/DB 2023.12.04

[MSSQL] 특정 테이블에서 날짜 필드로 삭제하는 StoreProcedure

[TABLE_DATA] 테이블은 PK가 "seq" 이고, "CREATION_STDDATETIME" 이라는 날짜 필드가 존재한다. 다음은 [TABLE_DATA] 테이블에서 14일 이전 데이터만 삭제하는 SP 이다. [TABLE_DATA] 테이블은 전체 100 만건 정도 가지고 있다. CREATE PROCEDURE "dbo"."usp_deleteBatch" AS BEGIN SET NOCOUNT ON; BEGIN TRY BEGIN TRAN DELETE FROM TABLE_DATA WHERE CREATION_STDDATETIME < DATEADD(DAY, -14, GETDATE()) ; COMMIT TRAN SELECT 1 END TRY BEGIN CATCH ROLLBACK TRAN; SELECT 0 END C..

Engineering/DB 2020.10.05

CentOS 7 에서 MySQL 5.6 설치

CentOS 7 에서 MySQL 5.6 설치 MySQL 5.6 부터 추가된 기능(timestamp 형에 default 시간값을 설정 가능)을 사용해보기 위해 CentOS 7에다가 MySQL 을 설치하려고 한다. CentOS 7 부터 mariaDB 가 MySQL 기본 패키지가 되어버려서 yum install mysql 을 실행하면 mariaDB 5.5 가 설치된다. 1. MySQL 5.6 yum repo 파일 다운로드: CentOS 7 부터 mariaDB 가 MySQL 기본 패키지가 되어버려서 yum install mysql 을 실행하면 mariaDB 5.5 가 설치된다. 그래서 별도의 MySQL 용 레포지토리(repository) 주소를 받아와야 한다. rpm 파일을 다운받고 install 까지 해야 레..

Engineering/DB 2016.02.22

jedis sample source

redis 서버를 실행시키고, java 클라이언트(jedis)로 서버에 접속 및 데이터 추가/조회를 위한 간단한 샘플 - maven dependency redis.clients jedis 2.6.0 jar compile - sample source package jedisTest; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class jedisConnect { public static void main(String[] args) { JedisPool pool = new JedisPool(new JedisPoolConfig(), "..

Engineering/DB 2014.10.08

MySQL 서버 설정값들

* wait_timeout- 서버와 연결해서 쿼리를 수행후, 다음 요청까지 유지되는 최대 시간. 기본값이 8시간(28800초)인데, 클라이언트 프로그램을 이용해서 접속할때는 최대 연결수가 관계가 있으므로 수를 줄일 필요가 있다. * interactive_timeout- 콘솔(mysql 클라이언트 프로그램)이나 대화형 클라이언트에서 mysql 서버와 연결해서 다음 요청을 기다리는 최대 시간. 기본값 8시간(28800초) * connect_timeout- 서버에 연결하기 위해 대기하는 시간. * max_connections- 최대 연결 가능 수 * 현재 connections 수 확인mysql> show global status like 'threads_connected'; * 현재 연결된 작업 확인(conn..

Engineering/DB 2014.06.11

MySQL auto increment 를 0 으로 설정할때, insert 하기

MySQL 에서 테이블의 필드(보통 ID)를 auto increment 로 설정하면 행이 하나씩 추가할때 자동 증가하게 된다.그런데, 다음 테이블에서 'id' 값을 0 번부터 시작하기 위해서, AUTO_INCREMENT 를 0 으로 설정한다. (보통은 1번부터 시작하겠지만 0 번에 해당하는 초기값으로 설정되어 있어야 하는 상황이다.)CREATE TABLE 'id_tbl` `id` int(11) NOT NULL AUTO_INCREMENT `flag` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; INSERT INTO `Users` VALUES (0, 10), (1, 20..

Engineering/DB 2014.03.21

PPAS 9.2 설정 및 관련 자료 정리

PPAS 는 Postgres Plus Advanced Server 의 약자이고, EnterpriseDB 라는 회사에서 오픈 소스인 PostgreSQL 에다가 오라클 기능을 추가시킨 상용 버전 입니다. 서버는 192.168.X.Y 이고, 포트는 5444, 사용자/패스워드는 myid/mypasswd 로 설정했습니다. PostgreSQL 을 지원하는 DB 연결 프로그램으로 연결해보시면 다음과 같은 그림이 보일겁니다. X Database 밑에 mydb 가 있고, 다시 밑으로 Schemas 밑에 Service 가 있습니다. 우리가 사용할 테이블들은 Service 스키마라는 객체에 보이고 있습니다. 테이블의 특정 컬럼을 참조할 때 select “userId” from Service.”AAA” 와 같이 스키마를 명시..

Engineering/DB 2014.01.08