- join
- 2개의 분산테이블에 있는 여러 컬럼 사용
- ex) 맥시코에 사는 사원의 이름과 팀장 이름
- 서브 쿼리
- 두 개의 쿼리로 가능한거면
- 특정 컬럼 안에서만 사용
- ex) 맥시코에 사는 사원
셀프 조인
- 실제 하나지만 두 개 테이블로 간주
- 이름 다르게 해줘야함
SQL
mysql
- 이체 작업
- 뺀 만큼 마이너스, 넣은 만큼 플러스가 되어져야 하는 게 한 덩엉리에 되어져야한다.
- 두 작업이 모두 실패하거나, 성공하거나
-> 하나의 트랜잭션으로 묶는다.
- 무결한 데이터 처리
- 변화를 반영한다.
- 커밋한다.
- 최종적으로 반영하겠어.
- 지금부터 트랜잭션 시작이야라고 알려야함
- 명시 안하면 DML 명령 수행할 때 마다 자동 커밋됨. (mysql 특징)
- 명시하면 취소 가능 (올백)
- 되돌려야겠어.
- 올백
DDL
- 트랜잭션이와 관련 X
- 무조건 커밋 -> 만들어라고하면 만들어짐
insert (create)
- 없었던 행 추가
- 열이름 생략될 경우, values다음에 나오는 값들의 순서 및 개수가 동일해야함
- 자동으로 증가하는 AUTO_INCREMENT
- 데이터를 집어넣을 때 없는 컬럼이라고 생각해도 된다.
- 숫자 형식만 가능
- values대신에 select명령
- 이미 만들어진 테이블에 입력
- 에러나면 그 이후 처리 안 함
- insert ignore 사용하면 무시하고 넘어감
- 이미 존재하는 얘면 수정,
update (new)
- 이미 존재하는 컬럼 변경하는 것
- where절 생략되면 테이블 전체 행 내용 변경 됨
- 올백하면 복구할 수 있음,
delete
- 테이블만 남겨두고 조건된 행 삭제(내용만 삭제)
- drop table : 테이블 자체 삭제
- where절 없으면 전체 데이터 삭제
- 트랜잭션 사용 가능 : 로그 작업
- truncate : 트랜잭션 적용 X
- 삭제되면 끝, 복구 불가
- 테이블 구조 남겨놓고 싶으면 효율적
with절
- CTE를 표현하기 위한 구문
- 일시적인 뷰 ( 수행하는 동안만 )
- 뷰
- 저장소를 가지고 있지 않음
- 자주 쓰는 selet명령이라고 생각하면 됨
- 만들어놓고 계속 재활용할 수 있음
- 복잡한 sql을 간략하게 하기 위해서
- 보안적
- 뷰를 통해서만 가져갈수 있도록,
- 개발자들은 뷰만 쓸 수 있도록
- 금융권에서 많이 사용함
- select * from (뷰);
- 뷰를 테이블이라고 생각해도 무방
- 뷰
- 일시적인 뷰 ( 수행하는 동안만 )
mysql의 데이터 형식
- 숫자 데이터 형식
- 정수 & 실수 : DECIMAL
- 문자 데이터 형식
- char(n) : 고정길이 문자형
- 남은 길이는 공백으로 들어감
- n : 문자 갯수
- varchar(n) : 가변길이 문자형
- 남은 공간은 없는 공간으로 취급
- char(n) : 고정길이 문자형
- 날짜와 시간 데이터 형식
- date
- datetime
- 텍스트
- longtext : 큰 텍스트 파일
- longblob : 동영상 파일, 큰 바이너리 파일
데이터 형식과 형 변환
- 내부 형 변환
- 문자는 0으로 변환
- select 0 = 'mega2', 결과 : 0
- select 1 > '2mega', 결과 : 0
- 암시적인 형 변환
- cats() : 형변환하는 대상 as 타입
- convert() " 대방 , 타입 길이
테이블 생성
- auto_increment 는 primary key여야 한다.
- 컬럼명 리스트 없으면 넣은 것 그대로 넣겠다.
- insert into usertbl values('---', '---', ,,,,)
- 집어 넣을 값 없으면 null
제약조건
- primary key 제약조건
- 행들 구별 할 수 있는 식별자 역활
- primary key로 설정된 얘는 자동으로 index가 설정됨
- foreign key
- 가지고 있는 값 정해져 있다.
- on delect cascade 또는 ON UPDATE CASCADE
- 참조하는 얘가 사라지면 나도 사라짐
- ex) 게시판 댓글
- add, modify 상요해서 생성
- unique 제약
- 중복된 값 저장 X
- null값 허용
- 입력하지 않아도 되는데, 입력하면 유니크 해야한다.
- check 제약 조건
- mysql 8.부터 지원
- 데이터 넣고 변경할 때마다, 이 컬럼에 저장하기 적합한 값인가를 본다.
- default 제약조건
- 안 넣으면 자동으로 default값이 됨
- null이 될 수 밖에 없는 상황에서 default값이 넣어짐
- 값 넣어야 하는 부분에 안 넣었을 때
- 데이터 무결성을 위한 제약 조건
- null 값 허용
- primay key는 자동으로 not null
- 공백과 0과 다름
- null 값 허용
테이블 수정
- 열 추가 add, modify
- 열 삭제 drop
- chang column : 타입 바꾸기
- 제약조건 수정
- drop primary key
- 하나의 테이블에 primary key 하나만 가능
- drop primary key
'study > JAVA 전문가' 카테고리의 다른 글
JDBC 2 (0) | 2021.12.21 |
---|---|
JDBC (0) | 2021.12.20 |
mysql 4 - 연습문제 (0) | 2021.12.20 |
Mysql 1 - 연습문제 (0) | 2021.12.18 |
조인 (0) | 2021.12.17 |