large database를 import 해 보면서, 어떤 식으로 mysql에 dump 파일을 db에 반영하는지 알아보겠습니다. 문제의 데이터 베이스는, 깃헙의 이 저장소에 들어 있습니다. test_db라고 다운을 받아보시면, dump 파일들이 있고, sql 파일이 있는데요. 이 중에, employees.sql을 열어보면 코드가 좀 길다는 것을 알 수 있습니다. 그런데, 이것을 해석해 보면 크게 2 부분으로 나눌 수 있습니다. 테이블과 view를 create 하는 문장이 있습니다. 이 중에서, create or replace view는 뷰를 없으면 생성하고, 있으면 대체합니다. 그런데, table은 생성하는 것만 있는데요. 해당 쿼리문 위에 drop table이 있습니다. 이것은 테이블이 존재하면 삭제하..
sql 검색 결과
예전에 게시판을 구현했을 때 페이징 처리를 해야 할 일이 있었습니다. 어떻게 처리할 지 고민하다가, limit와 offset 조합으로 처리하였던 기억이 납니다. 컬럼 수가 그리 많지 않다면, 시도해 보아도 괜찮은 방법 중 하나입니다. 실제로, 해커랭크나, 다른 사이트 sql 문제들을 풀고 나서, 다른 분들의 코드를 보면 limit는 정말 많이 볼 수 있음을 알 수 있습니다. 특히 rank 관련해서요. 예를 들어서, 모든 사람들의 score 값이 다 다를 때, k위를 한 사람을 구하는 쿼리를 쓸 때, 정렬하고 offset, limit 조합을 쓰면 너무 쉽게 처리할 수 있습니다. 예제 상황을 가지고 오겠습니다. dbeaver의 예제 데이터 베이스에는, Album 테이블이 있습니다. 그리고, Track이 있습..
테이블에서 collation은 어떤 것일까요? 사실, 저는 별 게 아니겠구나. 라고만 생각하였습니다. 그냥 인코딩에 대한 것만 중요하겠거니, 싶었습니다. 결론부터 말하자면, 그런 제 생각은 오만했다는 것이였습니다. testVC 테이블에 있는 데이터를 모두 조회해 보겠습니다. 이것을 str 오름차순으로 정렬해 보겠습니다. heroes, HEROES, kiwoom, KIWOOM, kIWOOM, Lotte giant, ... 이렇게 8개의 레코드가 있습니다. 여기서 의문점이 들 수 있습니다. 왜 대문자 소문자 구분없이 sorting이 되어 있지? 이는 테이블의 Collation을 보면 알 수 있습니다. utf8mb4_*_ai_ci. 이것은 Accent와 Case 둘 다 INSensitive하다는 것입니다. 앞..
오늘은 CRUD를 할 때 많이 써먹는 sql의 insert 문에 대해서 간단하게 알아보겠습니다. 보통, 저는 테이블에 레코드를 추가하는 것을 아래와 같이 작성합니다. 이제 예제를 보도록 하겠습니다. 저는 DBeaver에 mysql을 연동해서 실습을 해 보도록 하겠습니다. 먼저, 테이블 t의 정보를 보겠습니다. a라는 컬럼과 b라는 컬럼이 있습니다. 그리고, 저는 이 둘에 아무런 제약 조건을 걸어놓지 않았습니다. 이제 테이블 t(a,b)에 ('A','A')와 ('A',('B')를 추가하도록 하겠습니다. 그러면 위와 같이 작성하시면 됩니다. insert into t(a,b) values ('A','A'), ('A','B'); 이것은 a가 'A'이고 b가 'A'인 레코드와, a가 'A'이고, b가 'B'인 레..
테이블에서 PK가 걸린 컬럼이 있었습니다. 그 컬럼을 id라 하겠습니다. 수천개의 데이터를 insert를 해야 하는데, 해당 id값이 있는 데이터를 insert를 해야 하는 경우에, 오류가 발생합니다. 저는, 이러한 상황이 발생하는 데이터를 모두 뽑고 싶었습니다. 어떻게 하면 좋을까요? 제가 말한 문제를 해결하기 위해서, exists 구문을 사용하는 것을 고려해 볼 만 합니다. 이것은, 하위 질의의 결과가 빈 릴레이션을 반환하는 경우에 False를, 아니라면 True를 리턴합니다. 예제를 하나 들어보겠습니다. 먼저, t2에 있는 데이터들을 보겠습니다. 2개의 레코드가 있습니다. (1, 'cho')하고, (3,'gahui')가 있습니다. 먼저 exists 안에, select * from t2를 넣어보겠습니..
최근댓글