본문 바로가기

MySQL21

[MySQL] 인덱스(Index) 설정하기 📝MySQL Workbench 인덱스(Index) 설정하기 인덱스(Index)란? RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색 속도를 높여주는 자료 구조 인덱스를 거는 이유는 검색을 빨리 하기 위해 하는 것인데 서버 개발을 다 하고나서 쿼리문의 join의 on 컬럼, where 컬럼, order by 컬럼에 아래처럼 인덱스를 걸어준다 인덱스를 걸때 같은 쿼리문 안에 있는 같은 테이블의 컬럼은 같이 걸어준다 아래 예시 코드처럼 r테이블의 컬럼이(같은 테이블의 컬럼이) 한 쿼리문에 세개가 있으면 세개를 동시에 걸어준다 ex) … where r.userId = 1 and r.titleId = 2 order by r.rating desc; 이처럼 여러개의 컬럼에 인덱스를 걸때 체크하는 순.. 2023. 3. 31.
[MySQL] 화면 기획서 보고 테이블 만들어보기 📝MySQL Workbench 화면 기획서 보고 테이블 만들어보기 1. 회원가입 화면에는 이메일과 비밀번호, 이름을 입력받아 회원가입 2. 내 일정목록 화면에는 일정내용, 완료할기한, 완료여부를 표시 + 할일은 최대 100자 입력 가능, 완료 여부는 체크박스 표시 + 일정은 25개씩 가장 먼 미래의 일정부터 순서대로 표시 3. 친구들의 일정목록 화면에는 친구 추가하면 친구들의 일정이 현재시간 기준으로 지나지 않은 일정, 현재시간으로 지난(이전) 일정목록을 가져온다 화면 기획서를 보고 테이블 생성 > 테스트 데이터 인서트 > 화면에 필요한 SQL문 작성 (클라이언트에게 전달할 데이터 가공) 순서 : 단일 테이블 처리 가능한 것부터 작성하고 메인 화면처럼 여러 테이블 조인하는 것은 맨 나중에 작성한다 회원가.. 2022. 12. 9.
[MySQL] 테이블의 unique 설정하는 법 📝MySQL Workbench 테이블의 unique 설정하는 법 테이블 설정에 Indexes 탭에 들어가서 Type을 UNIQUE로 설정하고 unique하게 만들고 싶은 컬럼 값을 선택한다 ※ 테이블 인덱스에 유니크를 설정하면 같은 데이터가 두번 들어가지 않는다 ※ Error Code: 1062. Duplicate entry 에러 테이블 인덱스에 유니크 설정하면 같은 데이터가 두번 들어가지 않으므로 에러 발생 2022. 12. 8.
[MySQL] 테이블 합치기 join, left join 📝MySQL Workbench 테이블 합치기 테이블을 하나로 합칠때는 join 키워드 사용 ※ 합친 테이블에서 특정 테이블의 전체컬럼 가져오기 = 테이블명.* -- 2개의 테이블을 하나로 합치기 select * from orders join customers on orders.customer_id = customers.id; -- 줄여서 사용가능 (as생략가능) select * from orders as o join customers as c on o.customer_id = c.id; -- 특정테이블의 전체컬럼 가져오기 select o* from orders o join customers c on o.customer_id = c.id; -- 3개의 테이블 하나로 합치기 (join-on 두번 사용) se.. 2022. 12. 8.
[MySQL] 테이블 Foreign Key 설정 📝MySQL Workbench 테이블 합치기 테이블1과 테이블2를 연결시켜주는 Foreign Key 설정 ※ 테이블에서 연결시킬 id컬럼에 UN을 체크 해야한다 테이블을 전부 만들고 Foreign Key 설정하는게 제일 좋다 하단의 Foreign Keys로 가서 연결시킬 값(가르키는 값)을 입력한다 ※ 테이블 Foreign Key 탭에서 On Delete > CASCADE 설정시 참조한 데이터를 삭제되면 연결되어있는 테이블의 데이터도 함께 삭제된다 2022. 12. 8.
[MySQL] case, if 사용하기 📝MySQL Workbench case, if 함수 사용하기 ※ 새로운 컬럼 추가할때는 select * , 콤마 찍어주기 case ※ case와 end는 한쌍이며 select 아래 위치, when - then은 항상 같이 사용 else는 모든 조건이 True가 아닌 경우 else의 결과값을 반환한다(else가 없으면 null 반환) -- 년도가 2000년 이상이면 'Modern Book' 이라고 하고 -- 그렇지 않으면 '20th Book' 이라고 새로운 컬럼 Genre 를 만들기 -- 1. case문으로 처리하는 방법 select * , case when released_year >= 2000 then 'Modern Book' else '20th Book' end as 'Genre' from books.. 2022. 12. 7.
[MySQL] null인 데이터를 가져오기, 바꾸기 is null, ifnull 📝MySQL Workbench null 데이터를 가져오기 null인 데이터를 가져오는 is null null이 아닌 데이터 가져오는 not null인 데이터를 변경하는 ifnull null인 데이터를 가져오는 is null -- null인 데이터를 가져오는 방법 is null -- comments 테이블에서 updated_at 컬럼이 null인 데이터 가져오기 select * from comments where updated_at is null; null이 아닌 데이터 가져오는 not -- comments 테이블에서 updated_at 컬럼이 null이 아닌 데이터 가져오기 select * from comments where updated_at is not null; null인 데이터를 변경하는 ifnu.. 2022. 12. 7.
[MySQL] 데이터 가져오기 not equal, not like, in, not in 📝MySQL Workbench 데이터 가져오기 ~가 아닌 것을 가져오는 not equal ~를 포함하지 않은 것을 가져오는 not like ~가 들어있는 것을 가져오는 in ~가 들어있지 않은 것을 가져오는 not in ~가 아닌 것을 가져오는 not equal ( =! ) -- 출간년도가 2017년도가 아닌 데이터를 가져오기 select * from books where released_year != '2017'; -- 작가의 author_lname이 'Harris'가 아닌 데이터에서 책제목과 페이지수를 가져오기 select title, pages from books where author_lname != 'Harris'; ~를 포함하지 않은 것을 가져오는 not like -- 책 제목에 W가 포함되지.. 2022. 12. 7.
[MySQL] 테이블 Datatype TIMESTAMP 📝MySQL Workbench 테이블 Datatype TIMESTAMP 데이터타입을 timestamp으로 지정하고 디폴트값을 now()로 입력하면 데이터를 저장할때 해당 값을 입력하지 않아도 데이터를 입력한 시간으로 자동 저장된다 (테이블 Apply하면 CURRENT_TIMESTAMP으로 자동 변환된다) 데이터타입을 timestamp으로 지정하고 디폴트값을 now()로 입력하고 on update now()를 추가 입력해주면 해당 컬럼에 데이터를 변경(수정)할때 시간이 업데이트 되서 저장된다 (테이블 Apply하면 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP으로 자동 변환된다) 2022. 12. 7.
[MySQL] 날짜와 시간 처리하기 📝MySQL Workbench 날짜와 시간 처리하기 데이터에서 일, 월, 요일, 시간 등 정보 가져오기 -- 일 정보 가져오기 select name, day(birthdate) from people2; select name, dayofmonth(birthdate) from people2; -- 요일 정보 가져오기(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday) select name, dayname(birthdate) from people2; -- 숫자로 요일 정보 가져오기(1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday) select name, dayofweek.. 2022. 12. 7.