Database

    [MySQL-MyBatis] insert후 pk를 반환하는 selectKey와 useGeneratedKey의 동시성 이슈

    [MySQL-MyBatis] insert후 pk를 반환하는 selectKey와 useGeneratedKey의 동시성 이슈

    0. 개요 MyBatis를 쓰면서 INSERT된 행의 PK를 획득해야할 일이 자주 있습니다. 이럴때 사용하는 방법이 두 종류인데요, selectKey구문과 insert 구문의 속성인 useGeneratedKeys입니다. 이중 하나가 동시성 이슈가 있다는 말을 들어서 찾아보게 되었습니다. 1. SelectKey INSERT INTO... SELECT LAST_INSERT_ID()

    MySQL] 조인(Table join) 종류

    MySQL] 조인(Table join) 종류

    1. Inner join : A ∩ B, 교집합연산 쿼리 SELECT 컬럼명 [, 컬럼명] FROM 테이블A [INNER] JOIN 테이블B ON A.조인키 컬럼 = B.조인키 컬럼 Inner join은 교집합 연산으로, 조인 키 컬럼 값이 양쪽 테이블에 모두 존재하는 경우만 추출합니다. INNER 키워드는 생략가능하지만, 가독성을 위해 왠만하면 써주는것이 좋습니다. 예시 테이블 실행 쿼리 SELECT * FROM 상품 P INNER JOIN 옵션 O ON P.상품ID = O.상품ID 결과 주의할점은, 보시다시피 id 3인 탕수육 컬럼이 존재하지 않습니다. 왜냐하면 옵션 테이블에 상품ID가 3인 튜플이 존재하지 않기 때문입니다. 위처럼 inner join은 코인 키 컬럼값이 모두 존재하는 데이터만 출력하..

    Mybatis) 조건문 if-else -> choose-when-otherwise

    Mybatis) 조건문 if-else -> choose-when-otherwise

    mybatis에서 if-test만 사용하는게 아닌. if-else를 사용해야 할때 choose-when을 사용하면 됩니다. //codition1 is true, then running this block //condition1 is false and condition2 is true, then running this block //all contition is false, then running this block

    [MySQL] ON DUPLICATE KEY UPDATE [짧]

    [MySQL] ON DUPLICATE KEY UPDATE [짧]

    ON DUPLICATE KEY UPDATE란? 데이터 삽입시에 PK나 UK가 중복되었다면 지정 데이터만 업데이트 해주는 명령어이다. 단, 중복된 키가 없을경우 insert를 실행하니 잘만 사용하면 insert, update 구문을 따로 작성할 필요가 없게 구현할수 있다. 사용법 CREATE TABLE BOOK ( bId INT AUTO_INCREMENT primary KEY, bName VARCHAR(50) UNIQUE KEY, bPrice INT NOT NULL DEFAULT 0, ); 꼴의 테이블이 있다면, INSERT INTO BOOK (bName, bPrice) VALUES ('chaos_theory', 23000) ON DUPLICATE KEY UPDATE price = price + 5000;..

    [MySQL] 복합키 설정하기 [짧]

    [MySQL] 복합키 설정하기 [짧]

    복합키란? 2개이상의 칼럼을 묶어 기본키처럼 사용 sql) 생성하면서 만들기 CREATE TABLE TABLE_NAME ( COL1 VARCHAR(10) NOT NULL, COL2 int(11) NOT NULL, PRIMARY KEY(COL1, COL2) sql) 생성후에 선언하기 ALTER TABLE TABLE_NAME ADD PRIMARY KEY(COL1, COL2); gui) Work bench로 만들기 그냥 pk를 복수 선택하면 알아서 복합키로 만들어 준다.

    Procedure 기본

    Procedure란? SQL Server에서 지원해주는 프로그래밍 기능입니다. 쿼리문을 메서드형식으로 만들 수 있습니다. 기본 형태 CREATE DEFINER=`user_name` PROCEDURE `procedure_name`( //받을 매개변수 ) BEGIN //query END 예제 CREATE DEFINER=`admin`@`%` PROCEDURE `practice_procedure_just_select`() BEGIN SELECT * FROM practice_table WHERE id = 1; END call query in php $query = "CALL practice_procedure_just_select();" *DEFINER MS-SQL에서는 SP에 대한 EXECUTE 권한만 있으면 O..

    [MySQL] 방금 수행한 질의 대상 얻어오기

    [MySQL] 방금 수행한 질의 대상 얻어오기

    최근 ios 프로젝트 중에, 업로드한 이미지를 별도 테이블에 관리해야 했다. 하여, 다른 정보는 기존 테이블에 저장되고, 이미지는 방금 저장된 테이블의 no를 fk로 가져야 했다. SELECT LAST_INSERT_ID() 를 질의문으로 사용하면 된다. 반환값은 가장 최근에 성공한 질의의 가장 가까운 AI속성값이다. 보통은 PK로 사용하는 AI속성의 인조식별자는 첫번쟤 속성값으로 두기 때문에 쉽게 사용할 수 있다. 여기서 사용하는 id는 connection 별로 별도 생성이라고 하니 꼬일 염려도 없다. 단, 질의에 성공한 질의만 반환한다!

    MySQL에서 LIMIT과 OFFSET을 사용해 Paging하기

    MySQL에서 LIMIT과 OFFSET을 사용해 Paging하기

    mysql에선 limit과 offset을 활용해서 페이징을 구현할 수 있으며, 퍼포먼스도 좋다. 속성을 별도로 추가하지 않고 튜플의 출력위치를 설정할 수 있기 때문이다. SELECT * FROM paging ORDERS LIMIT 20 OFFSET 0 SELECT * FROM paging ORDERS LIMIT 0, 20 LIMIT은 출력할 행의 수이고 OFFSET은 가져올 데이터의 초기 위치값이다. 위의 코드에서 ORDERS LIMIT 0, 20(OFFSET , LIMIT)은 쿼리의 결과로 나온 튜플들의 0번째부터 20개를 출력한다는 말이다. 그렇다면, 10개의 튜플씩 한 페이지가 되게끔 페이징을 한다면 쿼리문은 어떻게 되는가? 글번호순으로 오름차순 출력한다고 한다면 아래와 같다. //1페이지 : 글번..

    Workbench ERD로 DB 만들기

    Workbench ERD로 DB 만들기

    첫화면에서 우측의 ERD처럼 생킨 아이콘을 클릭해 줏비다. 새 모델을 만들것이므로, +버튼을 눌러서 추가해 줍시다. Add Diagramd으로 다이어그램을 새로 만들 수 있구요, 물리스키마 우측의 +/- 버튼으로 DB를 만들거나 삭제할 수 있습니다. 처음 화면은 이렇게 보이는데요, 기본적으로 생상할땐 저 두 빨간 사각형만 필요합니다. 테이블을 생성하게 되면 데이블을 추가하고 속성과 제약사항등을 만들 수 있습니다. 이렇게 해서 간단히 erd를 작성해 보겠습니다. 간한하게 ERD를 그려보았습니다. 이제 제 DB 서버에 해당 DB를 생성해 보죠 상단 Database에서 Forward Engineer를 클릭합니다 이런창이 뜨는데요, 어디서버에 생성할지 선택해주고 계속 컨티뉴 눌러줍니다. 그러면... 쨔잔 간편하..

    mac에서 MySQL Workbench 사용해보기

    mac에서 MySQL Workbench 사용해보기

    여태껏 sql작억은 터미널에서 하다가 호스팅 서버에 phpMyAdmin을 연결해서 사용하고 있었습니다. 학원에서 workbench를 알려주어서 복습겸 포스팅 해보겠습니다. 우선 저는 m1칩 macbook air를 쓰구 있구요 , 빅서 11.2.3버젼입니다. 시작하겠습니다. 설치부터 시작하겠습니다. 아래 사이트에서 Community Server와 Workbench를 각각 다운받아 줍니다. dev.mysql.com/downloads/ MySQL :: MySQL Community Downloads The world's most popular open source database dev.mysql.com Community Server 설치후(마지막에 레거시 선택) Workbench을 깔아주면 구성은 간단히 끝납..

    ERD(Entity-Relationship-Diagram) -이론

    ERD(Entity-Relationship-Diagram) -이론

    서론 SQLD자격증 공부를 하거나, 대학교에서 강의를 들어도 이론공부와 SQL Query만 주로 공부하지 실제로 대상을 매핑하는 경험은 굉장히 적었었고 개인프로젝트를 진행해도 기술위주로의 적용에 신경쓰지 data에 대해선 굉장히 소흘했었단걸 이번 학원에 강의를 수강하며 느끼게 되었습니다. 소규모 매핑에도 직접 머리를 싸매고 해보니 이게 맞나? 싶으면서 확신은 들지가 않더라구요. 반성하는 의미로 수강하며 공부한 내용을 정리할겸 포스팅 해 보겠습니다. ERD란? ER(Entity-Relationship) 데이터 표기법을 도식화하여 다이어그램으로 표현하는것이 ERD입니다. 데이터 흐름과 프로세스의 연관성을 시각적으로 표현하는데 아주 훌륭한 표기법입니다. 표현방법 Entity -> 사각형 Relationship..

    데이터 모델링

    데이터 모델링

    1. 모델링이란? 모델링이란, 현실세계를 일정한 표기법에 의해 표현하는 기법입니다. 그냥 표현하는건 아니고, 추상화, 단순화, 명확화 해야합니다. 추상화 : 일정한 형식에 맞춰 표현 단순화 : 약속된 표기법이나 언어로 표현 명확화 : 현상을 이해하기 쉽고 정확하게 기술 2. 모델링 관점 데이터 모델링은 업무를 분석하고 설계하는데 이용되며, 변경 및 관리목적으로도 사용합니다. 따라서 데이터와 프로세스, 데이터와 프로세스의 관점에서 행위와 대상들의 관점에서 바라보게 됩니다. 3. 단계별 구분 모델링은 크게 3단계로 구분할 수 있습니다. 개념 데이터 모델 : 추상화 수준이 높고 업무중심적입니다. 전체적으로 포괄적인 모델링을 수행합니다. 논리적 데이터 모델링 : 이전모델을 엄무중심의 데이터 모델을 구체적으로 작..