DataBase

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

[DB] 락(Lock) - MySQL 8.0 InnoDB

🧐 서론 데이터베이스에는 트랜잭션이 존재합니다. 트랜잭션을 통해 하나의 작업 단위를 묶어서 ACID 원칙을 지키기 위해 노력합니다. 하지만, ACID 원칙이 언제나 완벽하게 지켜지진 않습니다. 너무 완벽하게 지키기 위해 어떤 상황에서라도 지키려고 한다면, 동시성이 떨어지는 문제가 발생하기 때문이죠! 그렇기 때문에 ACID 원칙을 적절하게, 상황에 맞게 유지시키면서 동시성을 높일 수 있게 DB에서 기능을 제공합니다. 바로 Isolation level을 통해서요! (트랜잭션에 대한 추가 설명은 이전 글을 참고해주세요!) 결국, Isolation level 별 적절한 Lock을 진행하고, 이는 DBMS마다 다릅니다. 저는 MySQL InnoDB 기준으로 어떤 Lock이 있는지 알아보도록 하겠습니다. 🫢 본론 ..

DataBase

[DB] 상황에 맞는 Unique ID 생성 방법

😏 서론 개발을 하면서, 유니크한 값을 사용할 일이 많습니다. 예를 들어 PK가 있을 수도 있고, 쿠폰번호가 있을 수도 있고, 결제번호가 될수도 있습니다. 유니크한 값을 만드는 방식들은 어떤 게 있고, 어떤 상황에 어떤 방식을 사용하는 게 좋을지 정리를 해보겠습니다. 😎 본론 먼저 3가지의 유니크 ID를 생성 종류에 대해서 알아보고 각각 어떨 때 적용하면 좋을지에 대해 개인적인 생각을 적어보겠습니다! 1. RDBMS 의 Auto Increment 디비에서 자동으로 만들어주는 자동증가 값으로 PK 용도로 사용된다. 장점 구현이 매우 간단하다. 숫자 증가기 때문에 재정렬이 필요 없다. 순서가 보장된다. 물리삭제가 되지 않는 특성의 테이블의 경우 마지막 row id 값만으로도 대략 테이블 데이터의 수를 파악할..

DataBase

[Redis] 레디스 선택하는 이유

🥹 서론 이번 토이 프로젝트에서 Redis를 도입하기로 하여 Redis에 대해 학습한 내용을 정리해봅니다. Redis에 대해서 알아보기 전에 Cache에 대해 이해가 필요하신 분은, 아래 링크를 확인해주세요! [Network] 캐시(Cache) 알아보기 😗 본론 Redis (Remote Dictionary Server) 란? in-memory 형태의 No-SQL로써 Key-Value 쌍의 해쉬 맵 형태의 데이터베이스입니다. in-memory: disk가 아닌 memory에 저장하기 때문에 disk I/O 작업이 발생하지 않아 속도가 빠르며, 휘발성입니다. No-SQL: Not Only SQL를 뜻하며 RDBMS에 비해 속도가 빠른 장점이 있습니다. in-memory 종류 No-SQL 종류 대표적인 비교 ..

DataBase

[MySQL] Unknown column 'password' in 'field list'

🙃 서론 MySQL 8.0 버전으로 password field 를 보고 싶어서 검색을 했더니 'Unknown column 'password' in 'field list' 이와 같은 에러를 만나서 간단하게 정리해봅니다. 🙃 본론 위처럼 password 필드에 접근하려고 하면 에러가 발생합니다. 원인을 찾아본 결과 MySQL 5.7 버전에서 password 필드가 사라지고, authentication_string 필드가 새로 추가된 걸 확인할 수 있었습니다. 개인적으로 추측하자면, 5.7 버전에 password 에 관한 설정 정책들이 새로 추가된 게 영향이 있지 않을까 생각됩니다. 5.7 이상부터는 8자 이상, 소문자+대문자+숫자+특수문자 조합 등 등급 별 패스워드 체크가 새로 추가되었습니다. 이로 인해 5..

DataBase

[MySQL] Mac M1 에서 MySQL password 재설정

🙂 서론 아래 스펙 기준으로 작성하였습니다. (* 1. 경로이동 외에는 스펙과 무관 할 수 있습니다.) - MacBook Air M1 - homebrew 로 설치 😀 본론 1. 경로 이동 /opt/homebrew/opt/mysql/bin 2. mysql 종료 mysql.server stop 3. 인증생략 옵션 mysqld_safe --skip-grant-tables & 4. mysql 비밀번호 없이 접속 mysql -u root 5. password null 로 셋팅 UPDATE mysql.user SET authentication_string=null WHERE User='root'; 6. 권한 적용 FLUSH PRIVILEGES; 7. mysql 밖으로 이동 exit; 8. mysql 재접속 mysq..

DataBase

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

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

Hyo Kim
'DataBase' 카테고리의 글 목록