프로그래밍 언어/DB

    [MySQL] MySQL에 csv 파일 INSERT 하기

    [MySQL] MySQL에 csv 파일 INSERT 하기

    MySQL에 csv 파일에 있는 데이터를 INSERT 하고자 한다. 데이터 가져오기 데이터를 넣고자 하는 테이블 우클릭 후 데이터 가져오기 선택 csv 에서 가져오기 선택 후 다음 클릭 다음선택 후 csv 파일 선택 csv 파일에서 해당 테이블에 어떤 컬럼값으로 매핑해서 넣어줄지 선택 csv 파일을 만들때 컬럼명이랑 동일하게 해도 되고 Target 에서 적용하고자 하는 컬럼을 선택해도된다. Mapping에 create 가 나온다면 새로운 컬럼이 생기면서 추가된다. 만약 테이블 컬럼의 변경 없이 데이터만 넣고 싶다면 create 라는 내용이 있으면 안된다. 위의 내용을 다 하면 데이터가 들어가 있는 것을 확인할 수 있다.

    [MySQL] 데이터 null 을 0 으로

    DB 데이터 조회 시 null 인 값을 0으로 변환하고자 한다. 조회할 때만 null 을 0으로 바꾸는 방법이다. select COALESCE(h.point, 0) from history h ; 실제 DB에 데이터를 null 을 0으로 수정하는 방법이다. update history set refund_point = 0 where refund_point is null;

    [sql] functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    잘못된 쿼리를 사용해서 생기는 오류이므로 서버 설정보다 쿼리로 해결할 수 있도록 하는게 좋다. 쿼리로 해결하기 쿼리 상의 GROUP BY 절을 따로 분리해 준다. 서버 설정으로 해결하기 MySQL 실행 시 only_full_group_by 옵션의 활성화/비활성화를 비활성화 한다. 1. mysql 설정 상태 확인 > select @@sql_mode; 2. mysql 설정이 되있음을 확인 (아래 출력 처럼 only_full_group_by이 나오면 설정이 필요) > | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE, DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 3. my...

    [mysql] Failed to determine a suitable driver class

    [mysql] Failed to determine a suitable driver class

    spring 에서 db 를 사용하는데 아래와 같은 메리지가 나오면서 db 연결이 안되고 빌드되지 않았다. 에러 메시지 해결방법 application.yml 파일에 mysql 드라이브가 추가 되어 있는지 확인하고 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver build.gradle 에 mysql 를 추가해준다. implementation 'mysql:mysql-connector-java:8.0.30' 버전은 아래 링크에서 확인할 수 있다. maven repository https://mvnrepository.com/artifact/mysql/mysql-connector-java

    MySQL EXPLAIN 실행 계획 보기 (쿼리 최적화 하기)

    MySQL EXPLAIN 실행 계획 보기 (쿼리 최적화 하기)

    사용이유 MySQL 쿼리를 실행할 때 최적화 계획을 세운다. 이러한 계획은 실행계획이라고 하는데 Explain 키워드를 사용해 실행계획에 대한 정보를 확인할 수 있다. 실행계획을 통해 문제가 발생하는 쿼리문을 이해하고 어떻게 최적화할지에 대한 인사이트를 제공하는 도구가 될 수 있다. 사용법 select문 앞에 explain 을 붙여서 사용한다. EXPLAIN SELECT * FROM table_name EXPLAIN SELECT * FROM table_name WHERE table_no = 1 explain을 사용해 쿼리문을 실행하면 아래 이미지와 같은 컬럼을 확인할 수 있다. 컬럼 설명 id : 쿼리 안에 있는 각 select 문에 대한 순차 식별자이다. 만약 하나의 select 문에서 여러 개의 테이..

    [PostgreSQL] 중복 데이터 하나만 남기고 삭제하기 delete

    중복 데이터 확인 셀프 조인을 통해 중복된 행의 id값을 확인하는 방법이다. id가 제일 작은 값으로 사용한다. 근데 아래와 같은 명령어를 사용하면 데이터가 중복되어 좀 더 많이 보이는 현상이 있긴하다. schemas 에 본인이 사용하는 스키마 이름 tablename 에는 테이블 명을 입력해준다. select s1.* from schemas.tablename s1 join schemas.tablename s2 on s1.title = s2.title and s1.link = s2.link where s1.id > s2.id; 중복 데이터 삭제하기 sql문으로 데이터 삭제하기에 대해 검색하면 row_number 를 사용해 partition by로 중복된 컬럼을 지정하고 row_num>1 을 설정해 삭제할 ..

    postgresql 한글 포함 여부 확인하기

    postgresql 한글 포함 여부 확인하기

    postgresql 에서 한글을 포함한 데이터와 한글을 포함하지 않은 데이터를 추출하고자 한다. 한글을 포함한 데이터는 아래 쿼리문으로 사용하면된다. 자음까지도 확인하고 싶을때는 [ㄱ-힣] 로 사용하면된다. select * from tablename where column ~ '[0-9]+' and column similar to '%[가-힣]%' 한글을 포함하지 않은 데이터는 ^ 를 붙여서 사용한다. select * from tablename where column ~ '[0-9]+' and column similar to '%[^가-힣]%'

    postgresql log 확인하기

    postgresql log 확인하기

    postgresql 을 사용하다가 에러때문에 로그를 확인해야했다. 먼저 postgresql 이 설치되어 있는 경로로 들어간다. 경로가 기억나지 않으면 psql 로 접속해 아래 명령어로 경로를 확인할 수 있다. show data_directory; 혹은 아래 명령어가 있는 파일로 이동하면 로그파일의 위치를 찾을 수 있다. find / -name postgresql.conf 나의 경우 아래의 경로에서 로그를 확인할 수 있었다. /var/lib/pgsql/11/data/log ls 로 파일에 있는 내용을 보면 요일별로 로그가 저장되어 있는것을 확인할 수 있다.

    DBeaver 에서 DB 데이터 내보내기

    DBeaver 에서 DB 데이터 내보내기

    DBeaver 에서 DB 데이터를 내보낸 후 다른 곳에 불러와서 사용해보고자 한다. 데이터를 내보내고자 하는 테이블을 우클릭한 후 데이터 내보내기를 선택한다. 아래 옵션들 중 사용하고자 하는 타입을 선택하면 된다. 나의 경우 sql 로 내보낼 것이다. 다음을 누르면 아래와 같은 내용이 나오고 다음을 누르고 넘어간다. 아래 이미지에서 Directory 부분에는 sql 데이터를 저장하고자 하는 위치를 적어준다. file name pattern 에 있는 이름으로 저장이 된다. 다음을 누르면 저장하고자 하는 데이터의 마지막 확인 내용이 나온다.

    mysql/postgresql 중복되는 데이터 항목 찾기

    mysql/postgresql 중복되는 데이터 항목 찾기

    중복 데이터 찾기 mysql 에서 특정 컬럼에서 중복되는 항목이 있는지 찾고자 한다. 컬럼 하나일 때 select 컬럼이름 , count(컬럼이름) from 테이블이름 s group by 컬럼이름 having count(컬럼이름) > 1 컬럼 여러개일 때 select 컬럼이름1, 컬럼이름2, 컬럼이름3, count(컬럼이름1) from 테이블이름 s group by 컬럼이름1, 컬럼이름2, 컬럼이름3 having count(컬럼이름1) > 1 select title,date,site , count(title) from tablename s group by title ,date,site having count(title) > 1