본문 바로가기
  • 포르쉐타고싶다

SQL5

[mysql] INSERT - 중복되는 데이터는 넣지 않기 1. 배경 어떤 테이블은 데이터가 중복으로 들어가면 안되는 항목을 갖고있다. 예를 들어, 어떤 게시물의 [좋아요] 데이터를 갖고있는 테이블은 게시물_idx 유저_idx 조합의 칼럼을 갖고있고 로직을 간단하게 생각해보면 저 조합이 중복으로 들어가면 안된다는 것을 알 수 있다. (통신오류로 좋아요를 여러번 눌렀는데 제대로 취소되지 않고 중복으로 좋아요 데이터가 들어가게되면 나중에 유저가 나중에 좋아요를 취소했는데 좋아요 기록이 아직 남아있는 오류 발생) 그렇다면 애초에 중 {게시물_idx, 유저_idx}의 조합이 중복으로 insert되는 것을 미연에 방지해야 한다. 2. 개념 크게 두가지의 방법이 있다 1) 매 쿼리문에서 방지 ->where not exists 2) 컬럼 속성 설정을 통해 방지 -> (1) .. 2020. 4. 24.
[MySQL] trigger란 1. 배경 서버와 DB가 통신을 할 때, 소켓통신이 아닌 이상 서버가 요청한 쿼리문을 통해 DB가 수정된다. 하지만 한 테이블에 여러 테이블이 얽혀있는 경우가 있다. 예를 들어, 한 게시물에 '좋아요'를 누르면 1) 게시물 좋아요 갯수 키 값 1 증가 2) 게시물 좋아요 테이블에 {게시물 - 유저(좋아요 누른)} 데이터 추가 3) 알림 테이블에 좋아요 추가 알림 추가 . . . 등등 여러 테이블이 동시에 수정되는 경우가 있다. 이런 단일 상황에 정말 여러개의 쿼리를 직접 만들어야 하는걸까? 아니다. 2. 개념 trigger : 방아쇠 - 어떠한 상황이 발생하면 그에 따라 자동으로 수행되도록 정해놓은 프로시저 trigger는 위에서 설명한 것과 같이 한 테이블에 변화가 생겼을 때 그것과 연관된 다른 테이블.. 2020. 4. 15.
[MySQL] Insert 할 때 특정 컬럼만 select 보통의 INSERT문은 INSERT INTO [TABLE] (COLUMN1, COLUMN2, COLUMN3) VALUES (VALUE1, VALUE2, VALUE3) 의 형태로 사용된다. 하지만 본인은 쿼리문을 작성 중, 다른 테이블에서 어떠한 조건을 가진 레코드에 대해서, 해당 인덱스에 대해서만 다른 테이블에 그에 대한 정보를 insert해야할 일이 생겼다. 그리고 INSERT해야하는 값 중에는 다른테이블의 값이 아닌 일반 상수도 포함되어야 한다. 예를 들어, 학생들 중 점수가 90점이 넘은 학생들만 장학생 테이블에 추가한다고 해보자 먼저 학생 테이블 [STUDENT]를 보면 STUDENT_IDX STUDENT_NAME STUDENT_SCORE 1 철수 92 2 영희 87 3 민수 95 그리고 점수가 .. 2020. 3. 31.
[MySQL] ORDER BY에 여러가지 기준과 선순위/후순위가 있을 때 ORDER BY는 기본적으로 SELECT 한 결과물들을 어떻게 정렬할 것인가를 결정해준다 예를 들면 한 유저가 갖고있는 쿠폰목록을 가져오려고 할 때 더 나중에 추가된 쿠폰(최근 쿠폰)부터 차례로 정렬해서 가져오고 싶을 때 ORDER BY coupon_idx DESC // 더 나중에 추가된 쿠폰의 idx부터 내림차순으로(DESC)! 를 SELECT문에 덧붙여주면 된다. 실제 쿼리문을 보자 SELECT coupon_idx, coupon_title, coupon_detail // 가져오려는 칼럼 FROM coupon// 테이블명 : coupon WHERE user_idx = 3// user_idx 칼럼이 3인 쿠폰을 선별해라! ORDER BY coupon_idx DESC// coupon_idx가 큰 것부터 내.. 2020. 3. 3.
[MySQL] 여러 테이블 합쳐서 SELECT하기 - JOIN ~ ON ~ 데이터베이스에서 게시글 정보를 꺼낼 때 '게시글'이라는 한 테이블이 게시글에 대한 모든 정보를 갖고있지 않는다. 예를 들면 우리가 한 게시글을 보면 게시글의 제목, 내용 뿐만 아니라 게시글을 쓴 사람, 게시글의 첨부파일, 게시글에 대한 좋아요수 등 완전 직접적이진 않은(?) 정보 또한 보여주고 있다. 이 게시글의 모든 정보를 데이터베이스에서 꺼낼 때 [게시글] 테이블엔 게시글의 '제목', '내용' 을 갖고있고 [유저] 테이블에 게시글을 쓴 '사람 정보' [게시글 좋아요] 테이블에 게시글과 좋아요 한 사람의 매칭되는 정보가 들어있다. 그리고 클라이언트가 게시글 정보 조회를 요청하면 서버는 이 세 테이블의 내용을 합쳐서 응답 데이터로 보내줘야 한다. 여기서 두가지 방법이 있다 1) 데이터베이스에서 세 테이블.. 2020. 3. 1.