😭 서론 실서버에 데이터를 추가, 업데이트, 삭제!!를 할 때는 살이 떨린다. 명령문을 작성하고 모니터를 바라보면서 내가 뭘 고민하는지도 모르지만 고민을 하면서 바라본다. 실수라도 하게되면.. 진짜 눈물난다.. (경험담) Spring에서 아주 쉽게 애노테이션으로 트랜잭션을 사용하지만, 왜 CLI에서 할 생각은 못했을까. 후회하면서 트랜잭션 하는 법을 정리한다.. 😇 본론 BEGIN; /* or START TRANSACTION */ SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT; /* or ROLLBACK */ 끝이다. 매우 간단하다. 꼭.. 꼭 하자.. (나한테 하는 말) h..
🥲 서론 MODIFY로 comment를 추가할 일이 있어서 추가를 진행했었다. 그런데, 적용 후에 확인해보니 not null -> null로 변경되었다. 😅 본론 ALTER TABLE user MODIFY name varchar(50) COMMENT '사용자명'; 이렇게 적용하면 not null 옵션이 null로 변경된다. ALTER TABLE user MODIFY name varchar(50) not null COMMENT '사용자명'; not null이었어도 not null을 명시해주어야 null로 변경되지 않는다. null만 그러냐? 아니다. 이번엔 NOT NULL이 빠졌으니 NOT NULL 옵션만을 추가해보자. ALTER TABLE user MODIFY name varchar(50) NOT NUl..
서론 잘 되던 게 안 됐다. 어떤거 때문일까??🤔 본론 MS-SQL에서는 매개변수를 최대 2100개까지만 허용하도록 해놓았다. 원인은 IN문을 통해 2100개 이상의 매개변수가 전달이 되어서 안 됐던 것.. 이전에는 2100개까지 전달할 일이 없었지만 최근 데이터가 커지면서 발견된 버그! SQL에 대해 또 하나를 알아간다.. * 해당 문제는 IN으로 조회한 컬럼 외에 다른 컬럼으로도 조회할 수 있는 방법으로 해결이 되었다. * IN 문 자체가 효율이 좋지 않기 때문에 IN을 쓸 때에는 다른 방법으로 할 수 있는지를 체크해 보는 것도 좋은 방법일 것 같다. 다른 SQL들은 ?? 😏 MySQL은 max_allowed_packet 값을 통해 최대 크기가 결정되는 데 기본 값은 64MB 이다. Oracle은 최..
🤸♂️서론 예전에 @Lob 에러 관련 글을 적은 적이 있다. 당시에는 postgresql에서 @Lob을 아예 사용할 수 없는 줄 알고 @Column(columnDefinition="TEXT") 사용을 무조건 해야 한다고 알고 있었지만 최근에 틀렸단 것을 깨닫고 글을 작성한다. 🙋♂️LOB? CLOB? 그게 일단 뭐야! 간단하게 알려줘!! LOB - Large Objcts ------------ CLOB - Character LOBs : DB 내부에 존재하는 대용량의 텍스트 BLOB - Binary LOBs : Image, Sound, Video 등의 대용량의 DB내부에 존재하는 데이터 NCLOB - National Character LOBs : DB 내부에 존재하는 대용량의 내셔널 텍스트 BFILE ..
- 첫 작성일 : 21년 1월 10일 velog 블로그 🕶 서론 ('~이다'로 끝내는 것은 글을 편하게 쓰기 위해서이니 양해바랍니다.) 이 글은 postgresql 문법으로 작성되었지만 다른 sql에서도 주의해야 할 사항이다. 회사에서 COUNT를 사용하다가 생각했던 값과 다르게 나오는 것을 발견되었다. 과장님께서 간단하게 해결책을 제시해주셨고, 그 방법을 기록할 생각이다. 🎃 count COUNT 란 해당하는 조건(없어도 가능)에 원하는 컬럼 값이 존재하는지 확인하여 존재하는 것의 총 개수를 확인하는 문법이다. 위 테이블에서 contents에 내용이 있는 것들의 개수를 알아보기 위해 COUNT를 사용한다. 내가 원하는 답은 값이 들어있는 것의 합인 '6'을 원한다. 8???? 결과는 생각과는 다르게 8..
특정 컬럼만 혹은 특정 컬럼만 제외하고 보고 싶을 때엔 IN / NOT IN / EXISTS / NOT EXISTS 이런 명령어를 사용하여 하곤 합니다. 위와 같은 명령어들은 하나의 테이블에서도 가능하고, 두 개의 테이블에서도 사용이 가능합니다. 하지만! 속도면에 있어서 두 개 이상의 테이블에서 사용할 경우 별로 좋지 않기에 JOIN을 통해서 해결하시는 방법을 추천드립니다. --- 1. 간단하게 생각했을 때에 개념잡기! IN / EXISTS => 조건에 부합하는 결과를 찾습니다. NOT IN / NOT EXISTS => 조건에 부합하는 결과를 제외시킵니다. 2. 그래도 둘의 차이점은? IN : 서브쿼리를 먼저 검색 -> 결과 목록 형성 -> 쿼리에서 하나하나씩 리스트 요소에 부합하는지 찾기 EXISTS ..
첫 번째 테이블은 조건과 관계없이 모두 결합된다. SELECT [열 목록] FROM [첫 번째 테이블] LEFT OUTER JOIN [두 번째 테이블] ON [조인될 조건] WHERE [검색 조건] 예시) select a.* , b.device_id from simple_check_list a left outer join (select * from simple_device_check where device_id = #{deviceId}) b on b.check_list_id = a.check_list_id where a.device_type_id = #{deviceTypeId} ------------------------------------------------------ select a.* , b.d..