Lock wait timeout exceeded 오류가 계속 발생했다. 이전의 경험으로 해당 오류는 한 스크립트에서 커밋을 하지 않고 다른 스크립트에서 작업 시 발생했었다. 그런데 이번에는 그런 것도 아니었다. 그래서 다른 작업자에게 DB 데이터 수정하고 있는지 확인했는데, 아니라고 했다. 에러 해결하기아래 쿼리문으로 현재 lock 이 걸린 테이블이 뭔지 조회해봤다. 그런데 아무것도 나타나지 않았다. 서치 후 확인해보니, 실제 문제가 발생한 프로그램을 실행중일 때 아래 쿼리문으로 조회가 가능한 것이었다. SELECT * FROM information_schema.INNODB_LOCK_WAITSSELECT * FROM information_schema.innodb_locks; INNODB_LOCK_W..
프로시저를 사용한 프로젝트의 유지보수를 1년 가까이 진행하고 있다. 개인적으로 느끼는 프로시저의 장점과 단점을 정리해 보겠다. 경험을 기억하기 위해 기록하는 것이니 참고 바란다. 내가 작성한 프로시저는 아니기에, 프로시저 구현 방법에 따라 장점과 단점이 달라질 수 있음을 유의해주길 바란다. CS 적인 측면에서의 장점은 말할 수 없다 ..모르니까! 참여한 프로젝트의 전체적인 개요는 .. 자바는 프론트와 프로시저의 연결고리로만 사용되어있고 체감 99% 프로시저로만 기능이 구현되어 있다. 예로, 화면에서 조회, 수정 등을 해야할 경우 따로 판매 추가 등의 모듈화가 되어있는 것이 아닌, 조회 기능의 프로시저. 수정 기능의 프로시저 이런식으로 구현이 되어있다.갓 경력이 1년 지난 주니어 개발자라 뭐가 맞는지는 모..
UNION 개념개념은 아래 글을 참고하면 된다.https://skylarcoding.tistory.com/170 [SQL] UNION vs UNION ALLUNION / UNION ALL 여러개의 쿼리문을 이용하여 데이터를 하나로 출력할 때 사용한다. UNION 중복값을 제거하고 보여준다. UNION ALL 중복값을 제거하지 않고 전부 보여준다. 중복값의 기준은 ? 2개의 컬skylarcoding.tistory.com UNION 과 UNION ALL의 차이UNION 은 중복값을 제거하고 보여주고, UNION ALL 은 중복값을 제거하지 않고 보여준다. UNION 사용 예시UNION 사용 시 주의점SELECT 문에 입력한 컬럼의 개수가 UNION 하려는 컬럼의 개수와 일치해야 한다. 사용 방법UNION..
아래 나의 경우 입력시간에 따른 금액의 누적 합계를 출력해야 했다. SUM(합계할 값) OVER (ORDER BY 누적 기준) AS 컬럼명 사용 시 유의할 점은, 누적 기준이 같은 값일 경우 모든 값의 합만 나온다. 뿐만 아니라, order by 기준에 따라 원하지 않는 값으로 나올 수 있으니 전체 데이터의 order by 와 일치 시키는게 좋을 것 같다. order by 는 ','를 이용해 여러개 입력할 수 있다.
테이블 구조 + 데이터 복사아래와 같이 작성하면 새테이블명의 새로운 테이블이 생성되고, 새테이블이 기존테이블의 데이터와 컬럼으로 채워진다.create table 새테이블명 (select * from 기존테이블명) 테이블 구조 복사CREATE TABLE 새테이블 LIKE 기존테이블 테이블 데이터 복사INSERT INTO 새테이블 (SELECT * FROM 기존테이블)
권한을 부여하는 것은 관리자 계정의 콘솔 창에서 진행해도 무방하다.단, 관리자 계정이 다른 계정을 생성할 권한이 있어야 한다. 어디까지 허용할지 권한 주는 것도 허용되어 있어야 한다. 확인계정 관리자 권한 확인show databases;select * from mysql.user; 자세한 권한 확인show grants for '계정명'@'호스트이름' 계정 생성계정 생성CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY '비밀번호'; 계정 권한 부여 GRANT SELECT ON `my_database`.* TO 'readonly_user'@'localhost'; // my_database 에만 조회 권한 부여GRANT SELECT ON *.* TO 'rea..
CTE란?CTE 는 공통 테이블 표현식으로 SQL 에서 쿼리를 작성할 때 사용되는 일종의 임시 테이블이다.주로 복잡한 쿼리를 더 간단하고 가독성이 좋게 작성하기 위해 사용된다. WITH 테이블 AS ( 테이블을 사용할 쿼리문); WITH 멤버 AS ( SELECT NAME FROM MEMBER )SELECT * FROM 멤버
PostgreSQL 에는 NVL 이 없다. COALESCE 사용NVL 이나 IFNULL 대신 COALESCE 를 사용하면 된다.SELECT coalesce(profile_img,'nothing')FROM member프로필 이미지가 전부 없어서 nothing 으로 나옴 ㅎㅎ.. Redundant code in COALESCE call 발생 경우컬럼이 Not null 은 아닌지 확인해보자. not null 일 경우, null 이 절대 발생하지 않아 두번째 값으로 대체 될 일이 없다.
각각 DB에는 장단점이 있는 것처럼 ... postgreSql 에서는 변수 사용이 복잡하다.MariaDB 는 SET 변수명 으로 간단하게 선언이 가능한데 .. (보러가기 클릭)PostgreSQL 은 그렇지 않다. 콘솔 변수 사용방법여러가지 방법이 있지만, 그나마 간단해 보이는 with 임시 테이블을 사용하는 방법을 설명하겠다. with 변수 as ( select '값' as 변수명 select 'skylar' as vName)select *from 테이블명 where member_name = (select vName from 변수); WITH 사용 예시실제 사용 사례는 다음과 같다.with 변수 as ( select '2411020001' as vGroup_id), this_week AS..
쿼리문을 작성하다보면 변수로 받아오는 부분에 실제 데이터를 넣어 테스트해야 한다.해당 변수를 실제 값으로 변경해주면, 테스트 할때마다 해당 값을 바꿔줘야 한다. 변경해야하는 부분이 많을때, ctrl+ R 로 replace 해줘도 되지만 다른 부분이 바뀔 염려도 있고 생각보다 번거롭다.아래와 같이 변수를 설정해주면 변수 값을 바꿀때 한번만 바꿔도 된다. 훨씬 찾기도 쉽고. 해당 console 세션에 잠시 변수를 선언하는 방식이라, 시간이 지나면 풀려서 다시 선언해줘야 한다.해당 콘솔 외에는 사용할 수 없기도 하다. SET @vTEST = 'skylar';SELECT * FROM MEMBERWHERE USER_ID = @vTEST ;