Database 23

DB 데이터베이스 인덱스(Index)

1. 인덱스(Index)란? Index는 RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색 속도를 높여주는 자료 구조를 말하며, 테이블 내에 1개의 컬럼 혹은 여러 개의 컬럼을 이용하여 생성한다. 특정 테이블의 컬럼을 인덱싱(Indexing)하면 검색을 할 때 테이블의 레코드를 전부 다 확인하는 것이 아니라 인덱싱 되어있는 자료 구조를 통해서 검색되기 때문에 검색 속도가 빨라지는 것입니다. Index는 빠른 검색 속도뿐만 아니라 레코드 접근에 대한 효율적인 순서 매김 동작에 대한 기초를 제공 데이터베이스의 인덱스는 데이터베이스에서 메모리에 일정 공간을 사용해서 저장하게 된다. *** 인덱스에는 여러 가지 유형이 있지만 그중에서도 많이 사용되는 인덱스 구조는 B+TREE 구조이다 (B+T..

Database 2023.03.31

MySQL 에서 예약어와 예약어 필드명, 데이터베이스명으로 사용시 에러해결 방법

MySQL 에서 테이블명으로 like 를 사용하고 select 문으로 해당 테이블의 데이터를 확인하려했더니 오류가 발생하였다. 오류 메세지는 다음과 같다. Error message : Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like' at line 2 위와같은 오류가 발생한 이유는 테이블명으로 사용한 like 가 mysql에서 이용하는 예약어이기 때문이다. 예약어를 필드명, 데이터베이스명으로 사용하고자 할 때는 1. 테이블명 변경 2. 테이블명 미변경시에는 ~ 표시 아래에 ..

Database 2023.01.17

테이블 설계 시, created_on, updated_on - default 값 설정

테이블을 설계할 때, created_on 또는 updated_on 을 설정하는 경우가 있다. create_on 은 데이터베이스에 insert 한 시간이고, updated_on 은 데이터베이스에 있는 데이터를 변경했을 때의 시간이다. 이때의 default 값 설정하는 방법이다. created_on, updated_on 의 데이터타입은 둘 다 TIMESTAMP 로 설정한 후, created_on 의 default 값은 now() updated_on 의 default 값은 now() on update now() 로 설정해주면 된다.

Database 2023.01.04

null 값을 다른 값으로 대체하는 방법 - ifnull()

null 값에 데이터를 넣을 때는 ifnull() 함수를 이용해준다. sql 에서 null 을 다른 값을 대체하는 방법이다. 아래의 null 데이터란을 문자열과 숫자로 채울것이다. ifnul() 괄호 안에 null 이 들어있는 컬럼명과 널값을 채울 데이터를 컴마로 연결하여 넣어주면 된다. ifnull( p.title, 'Missing' ) 은 컬럼명 title 의 null 값을 missing 문자열로 대체한다는 의미이다. 위처럼 작성을 해주면 null 값이 각각 missing 문자열과 숫자 0 으로 대체된다.

Database 2022.12.08

MySQL foreign key 로 연결돼있는 데이터 지우기 설정 - cascade

sql 에서 두개의 테이블을 연결할 때, foreign key 를 이용한다. foreign key 는 제약조건의 하나로 외래키라고 부른다. 외래키는 다른 테이블의 레코드를 참조하기 위한 키값으로 사용되며, 해당 레코드를 대표하는 기본키가 외래키로 설정될 수 있다. 두 개의 테이블을 join 으로 연결했다고 예를 들었을 때, foreign key 를 설정해두면, 데이터를 delete 할 때 두개의 테이블에서 각각 데이터를 지워줘야한다. 또는 한 테이블에서 데이터를 지우고 다른 테이블에서 foreign 키로 연결돼있는 데이터를 지우지 않는다면, 나중에 오류가 발생할 수 있다. 한번에 데이터를 효율적으로 지우기 위해서는 foreign key Options 의 on Delete 를 CASCADE 로 설정해두어야..

Database 2022.12.08

여러 개의 테이블에서 데이터 가져오기 , join

join 데이터를 가져올 때, 하나의 테이블이 아니라 여러 개의 테이블에서 데이터를 가져와야하는 경우에는 Join을 이용한다. 여러 테이블에서 데이터를 가져온다. 여러개의 테이블을 하나로 합칠 때 join 을 이용하면 된다. 형태는 join 합칠 테이블 on 연결 기준이 되는 컬럼 이다. 테이블1 join 테이블2 on 조건; 아래에서는 orders 테이블에 customer 테이블을 연결한 것이다. 이때 on 에는 연결 기준이 되는 컬럼을 작성해준다. 예시에서는 orders 테이블의 customer_id 컬럼과 customer 컬럼의 id 컬럼값이 같기 때문에 기준 컬럼을 아래처럼 둔 것이다. 테이블명을 줄여서 작성할 수 있다. orders o 는 orders as o 로 as 를 생략하여 작성한 것이다..

Database 2022.12.08

MySQL 에서 조건문 - if 문

if 문을 사용하는 방법이다. 데이터베이스에서 조건물을 사용할 때, if 문을 이용한다. 형태는 if( 조건문, 참일때의 리턴값, 거짓일 때의 리턴 값) 로 작성을 한다. 위 예시는, 만약 released_year 컬럼의 데이터 값이 2000 이상이라면 'Modern Book' 값을 리턴하고, 그렇지 않으면 '20th Book' 값을 새로운 컬럼 genre 에 데이터를 담아서 리턴하라는 의미이다.

Database 2022.12.07

MySQL 에서 조건문 - case 문

조건이 3개 이상일 때 주로 case 문을 이용한다. 기본 문법은 : case 컬럼 when 조건1 then 값1 when 조건2 then 값2 else 값3 end 형태이다. 시작은 case 로 한다. when 절에 조건을 입력하고 조건을 만족하면 then 이후의 값이 실행되도록 한다. else 는 when 조건을 모두 제외한 나머지의 데이터에 적용하도록 하는 값이다. 조건문이 모두 끝나면 마지막에는 end 로 마무리를 지어줘야 한다. 위의 예시는 case 문을 이용한 것이다. when 절에서 released_year 컬럼의 데이터 값이 2000 이상이면 새로운 컬럼에 'Modern Book' 데이터를 넣고, 그렇지 않으면 '20th Book' 데이터를 넣도록 하였다. 실행을 하면 새로운 컬럼 genr..

Database 2022.12.07