MySQL 8

[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

MySQL insert all on update MyBatis 쿼리문

MySQL DB 에 MyBatis(마이바티스)로 다수의 데이터를 insert 와 update 를 동시에 하려고 쿼리문을 찾아보았다. 여러건의 데이터들은 마이바티스 쿼리문에 파라미터로 구문으로 list 형태의 데이터를 전달할 수 있다. 그런데, "on duplicate key update" 뒤의 문장을 완성하려고 하니깐 어떤 식으로 쿼리문을 작성해야할 지 난감했다. 다음 쿼리문처럼 list 에서 insert 하다가 동일키에 대해서 update 를 할때, list 의 현재 위치값을 표시해야하는데 일단 방법을 몰라서 문의 #{element.type} 으로 하고 테스트를 해보니깐 list 의 맨 마지막 값으로 모든 값들이 update 되어 버렸다. insert into tbl_word(word, type, mo..

Engineering/Java 2016.07.08

mysql create procedure / function 에서 발생하는 오류들

1. SQL 1418 오류 MySQL/maria DB 에서 procedure / function 을 생성할때, 아래와 같은 오류가 발생하는 경우가 있다./* SQL 오류 (1418): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) */ mysql 서버에 접속해서 아래 변수의 값을 확인한다.show global variables like 'log_bin_trust_function_creators' valu..

Engineering/DB 2013.07.10

MySQL subquery 에서 limit 사용

MySQL subquery 에서 limit 사용 MySQL/Maria DB 에서 서브쿼리(subquery) 내에서 limit 를 사용할 경우, 다음과 같은 오류가 발생한다. select * from Users where uidx in (select uidx from Users limit 10) limit 5 "This version of MySQL doen't yet support 'LIMIT & IN/ALL/ANY/SOME subquery', "This version of MariaDB doen't yet support 'LIMIT & IN/ALL/ANY/SOME subquery" 서브쿼리에서 limit 절을 사용못하는거 같지만, 적절한 alias 를 사용하면 가능하다. select * from Use..

Engineering/DB 2013.07.05

rownum 표현 방법

oracle 에서 지원하는 rownum 을 표현하는 방법에 대해서 DBMS 별로 정리해보자. * Oracle select rownum, Roles.* from Roles where rownum between 1 and 5;* MSSQL select * from ( select Row_Number() OVER (order by roleIdx desc) AS rownum, * from Roles ) t where rownum between 1 and 5 * MySQL : MySQL 에서 pagination 을 위해 사용하는 limit 말고, row 번호가 필요해서 아래와 같이 사용한다. select t.* from ( select @rownum := @rownum + 1 as rownum, Roles.* f..

Engineering/DB 2013.07.05

MySQL 설치후 암호 설정 및 사용자 추가

mysql 을 설치후, 사용자를 추가하려고 할때 사용하는 방법입니다. 아래 링크에서 필요한 부분만을 발췌해서 정리합니다. http://www.gpgstudy.com/gpgiki/MySQL%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%99%80%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0 - root 암호 설정 # mysqladmin 이용 $ mysqladmin -u root "passwd" "new-passwd" # update 문 이용 $ mysql -u root -p mysql> update user set password = password('..

Engineering/DB 2011.05.27

MySQL Injection - load_file()

MySQL 함수중에서 load_file() 은 String 계열 함수로써, 인자인 파일 이름에 해당하는 파일을 열어서 내용을 반환하는 함수입니다. LOAD_FILE(file_name) 예제) mysql> UPDATE t SET blob_col=LOAD_FILE('/tmp/picture') WHERE id=1; 예제와 같이 사용하면 무난하겠지만, 아래와 같이 하면 passwd 파일을 결과값으로 볼수 있게됩니다. select ename from emp UNION select LOAD_FILE('/etc/passwd'); 참조 : http://coffeenix.net/board_view.php?bd_code=1707%20 http://dev.mysql.com/doc/refman/5.1/en/string-fun..

Engineering/Etc 2010.07.30