sql

DataBase

[DataBase] CLI에서 쿼리할 때도 트랜잭션을 쓰자

😭 서론 실서버에 데이터를 추가, 업데이트, 삭제!!를 할 때는 살이 떨린다. 명령문을 작성하고 모니터를 바라보면서 내가 뭘 고민하는지도 모르지만 고민을 하면서 바라본다. 실수라도 하게되면.. 진짜 눈물난다.. (경험담) 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..

DataBase

[SQL] MODIFY 시 기존 옵션 조심!

🥲 서론 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..

DataBase

[MS-SQL] IN 구문 사용 시 매개변수 2100개 초과

서론 잘 되던 게 안 됐다. 어떤거 때문일까??🤔 본론 MS-SQL에서는 매개변수를 최대 2100개까지만 허용하도록 해놓았다. 원인은 IN문을 통해 2100개 이상의 매개변수가 전달이 되어서 안 됐던 것.. 이전에는 2100개까지 전달할 일이 없었지만 최근 데이터가 커지면서 발견된 버그! SQL에 대해 또 하나를 알아간다.. * 해당 문제는 IN으로 조회한 컬럼 외에 다른 컬럼으로도 조회할 수 있는 방법으로 해결이 되었다. * IN 문 자체가 효율이 좋지 않기 때문에 IN을 쓸 때에는 다른 방법으로 할 수 있는지를 체크해 보는 것도 좋은 방법일 것 같다. 다른 SQL들은 ?? 😏 MySQL은 max_allowed_packet 값을 통해 최대 크기가 결정되는 데 기본 값은 64MB 이다. Oracle은 최..

DataBase

[PostgreSQL] CLOB타입과 TEXT타입 - JPA

🤸‍♂️서론 예전에 @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 ..

DataBase

[PostgreSQL]COUNT 사용 시 주의

- 첫 작성일 : 21년 1월 10일 velog 블로그 🕶 서론 ('~이다'로 끝내는 것은 글을 편하게 쓰기 위해서이니 양해바랍니다.) 이 글은 postgresql 문법으로 작성되었지만 다른 sql에서도 주의해야 할 사항이다. 회사에서 COUNT를 사용하다가 생각했던 값과 다르게 나오는 것을 발견되었다. 과장님께서 간단하게 해결책을 제시해주셨고, 그 방법을 기록할 생각이다. 🎃 count COUNT 란 해당하는 조건(없어도 가능)에 원하는 컬럼 값이 존재하는지 확인하여 존재하는 것의 총 개수를 확인하는 문법이다. 위 테이블에서 contents에 내용이 있는 것들의 개수를 알아보기 위해 COUNT를 사용한다. 내가 원하는 답은 값이 들어있는 것의 합인 '6'을 원한다. 8???? 결과는 생각과는 다르게 8..

DataBase

[SQL]IN / NOT IN / EXISTS / NOT EXISTS 은 어떻게 쓰는걸까?

특정 컬럼만 혹은 특정 컬럼만 제외하고 보고 싶을 때엔 IN / NOT IN / EXISTS / NOT EXISTS 이런 명령어를 사용하여 하곤 합니다. 위와 같은 명령어들은 하나의 테이블에서도 가능하고, 두 개의 테이블에서도 사용이 가능합니다. 하지만! 속도면에 있어서 두 개 이상의 테이블에서 사용할 경우 별로 좋지 않기에 JOIN을 통해서 해결하시는 방법을 추천드립니다. --- 1. 간단하게 생각했을 때에 개념잡기! IN / EXISTS => 조건에 부합하는 결과를 찾습니다. NOT IN / NOT EXISTS => 조건에 부합하는 결과를 제외시킵니다. 2. 그래도 둘의 차이점은? IN : 서브쿼리를 먼저 검색 -> 결과 목록 형성 -> 쿼리에서 하나하나씩 리스트 요소에 부합하는지 찾기 EXISTS ..

DataBase

left outer join ?

첫 번째 테이블은 조건과 관계없이 모두 결합된다. 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..

Hyo Kim
'sql' 태그의 글 목록