목록SQL과 DB (13)
wintertreey 님의 블로그
https://opentutorials.org/course/3884/25181
TRANSACTION 주요 트랜잭션 명령어명령어설명BEGIN TRANSACTION / START TRANSACTION트랜잭션 시작COMMIT트랜잭션 확정 → 변경 사항을 DB에 반영ROLLBACK트랜잭션 취소 → 변경 사항 모두 되돌림SAVEPOINT 이름트랜잭션 중간 저장 지점 설정ROLLBACK TO SAVEPOINT 이름지정한 SAVEPOINT까지 롤백SET TRANSACTION트랜잭션 격리 수준 지정 (READ COMMITTED, SERIALIZABLE 등) 예시START TRANSACTION; -- 트랜잭션 시작UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;UPDATE accounts SET balance = balance + 1..
RENAME테이블 이름 변경RENAME TABLE table1 TO table2; 자세한 설명은 하단에 첨부한 글을 참고.JOINhttps://opentutorials.org/course/3161/19545 DATABASE가 다음과 같다고 가정 LEFT JOINSELECT D.product_id, -- 상품 ID D.product_name, -- 상품 이름 D.product_type, -- 상품 타입 P.user_id -- 해당 유저가 상품을 보유/권한 있는지FROM PRODUCT DLEFT JOIN PRODUCT_USER P ON P.product_id = D.product_id AND P.user_id = '13'; 실행 결과 product_id..
1:N 관계를 객체 구조로 매핑할 때 사용된다. Service에서 비즈니스 로직을 처리할 때 Map 안에 List의 구조를 이중으로 넣을 수도 있지만, 의 개념을 사용하면 mybatis xml 에서 쿼리상으로 한 번에 출력할 수 있다. 즉 이런 식으로 출력한다는 것.{ "user_id": 1, "user_name": "홍길동", "order_list": [ { "order_id": 101, "product": "노트북" }, { "order_id": 102, "product": "키보드" } ]} 이게 mybatis에서 쓰일 때의 모습이다. SELECT U.user_idx, U.user_name FROM USERS U SELECT O.order_id, ..
https://opentutorials.org/course/3161/19541 UPDATE TABLENAMESET COL1='..', COL2='...'WHERE ID=''; WHERE 조건에는 되도록이면 PK로 하기. 속도 향상을 위해. DB상에서 UPDATE를 할 때는 무조건 작업 전 백업을 해두고 해야한다. ((프로그래밍 상이면 괜찮음!))
https://opentutorials.org/course/3161/19540 SELECT COL1, COL2.. FROM TABLENAME; FROM 이 없는 경우SELECT 1; → 결과는 1SELECT 'HELLO'; → 결과는 HELLOSELECT NOW(); → 현재 시간SELECT 2+3; → 5즉, FROM 절이 없으면 DB는 테이블 조회가 아니라 표현식 계산을 하고, 그 결과를 출력 LIMIT 3; 맨 뒤에 이렇게 붙이면 나오는 데이터 들 중 3개만 출력. ORDER BY 시 유의사항PK, CREATED 모두 데이터가 생성되면서 계속 값이 증가하므로 둘 중 아무거나 해도 해당 데이터를 특정짓기 쉽다.그러나 PK의 경우 인덱스 테이블이 생성된다.따라서 PK로 조건을 주어 데이터를 검색했..
https://opentutorials.org/course/3161/19539 테이블 생성 예시CREATE TABLE member ( id INT AUTO_INCREMENT primary KEY, NAME VARCHAR(50) UNIQUE KEY, price INT NOT NULL DEFAULT 0, cnt INT NOT NULL DEFAULT 0); INSERT SHOW DATABASES;USE DATABASENAME;SHOW TABLES;DESC TABLENAME; INSERT INTO EXAMPLETABLE (COL1, COL2..) VALUES('CONT1', 'CONT2'..); 없으면 INSERT, 있으면 UPDATE UK의 값이 중복되면 UPDATE, 값이 존재하지 않으면 INSERT I..
https://opentutorials.org/course/3161/19536 Structured Query Language row 2, column 4. https://opentutorials.org/course/3161/19537 File은 가로로 읽고, DB는 세로로 읽음. CHAR vs VARCHARCHAR는 무조건 해당 메모리만큼 할당한다. 따라서 주어진 값이 그보다 작다면, 뒤에 그만큼 공백을 붙여준다. VARCHAR는 가변적. 근데 그 뒤에 update시 데이터가 늘어나면 바로 해당칸에 붙는게 아니고, 맨 뒤 블록에 붙는다. 그게 체이닝 현상. 예전엔 그게 속도 저하의 문제가 있었으나 요즘엔 서버의 발달로 속도 저하이슈는 많이 발생하지 않는다.