MySQL 쿼리 기초

강서진·2023년 12월 12일
0
post-custom-banner

DDL(Data Definition Language)

  • 주로 DBA 쪽이 사용
Command기능
CREATE테이블의 생성
ALTER테이블의 구조 변경
DROP테이블 삭제
RENAME테이블 이름 변경
COMMENT테이블 및 컬럼 주석 추가
TRUNCATE데이터 초기화

DML(Data Manipulation Language)

  • 주로 사용하게 될 명령어
Command기능
SELECT데이터 조회
INSERT데이터 삽입
UPDATE데이터 수정
DELETE데이터 삭제

DCL(Data Control Language)

  • 데이터베이스 라이브러리나 DB 프레임워크에서 제공
  • 스프링이 COMMIT과 ROLLBACK을 관리해 줌
Command기능
GRANT특정 사용자에게 권한 부여
REVOKE특정 사용자의 권한 회수
COMMIT트랜잭션의 작업이 정상적으로 완료
ROLLBACK트랜잭션의 작업이 비정상적으로 종료되어 원래 상태로 복구

유사한 표현

  • 용어가 다를 뿐 다 같은 것을 가리키는 표현들이다.
파일 시스템DB 모델링관계형 DB
파일 File엔티티 Entity테이블 Table
레코드 Record튜플 Tuple행 Row
키 Key유니크값 Identifier키 Primary Key, Unique Key
필드 Field어트리뷰트 Attribute컬럼 Column

CREATE

칼럼명은 백틱(`), 문자열은 작은 따옴표(')를 사용한다.

  • 데이터베이스 생성
CREATE DATABASE [DB명]
  • 테이블 생성
CREATE TABLE [테이블명]
(
[컬럼명][타입][컬럼 속성][DEFAULT][COMMENT]
...
PRIMARY KEY([기본키 컬럼])
)

혹은 Workbench GUI를 통해 만들 수도 있다. 이 편이 더 쉽고 간편하기도 하다.

INSERT

INSERT INTO [테이블 이름]
(
	[컬럼 이름1],
    [컬럼 이름2],
    [컬럼 이름3]
)
VALUES
(
	[컬럼1의 데이터 값],
    [컬럼2의 데이터 값],
    [컬럼3의 데이터 값]
)
  • 포함하지 않아도 되는 값:
    • NULLABLE 컬럼,
    • DEFAULT 값을 가지는 컬럼,
    • AUTO_INCREMENT(PRIMARY KEY) 컬럼
INSERT INTO `user`
(
    `name`,
    `age`,
    `email`
)
VALUES
(
	'홍길동',
    10,
    'gildong@gmail.com'
);

UPDATE

UPDATE [테이블 이름] SET
[컬럼 이름]=[값],
...
WHERE [조건절]
UPDATE `user` SET
age = 20
WHERE 
id>0 and name='홍길동';


QUERY 문을 치기 번거롭다면, 테이블에 직접 입력할 수도 있다. 적용을 누르면 알아서 WORKBENCH가 쿼리문을 작성해준다.

DELETE

GUI를 사용하여 행을 삭제할 수도 있고, 쿼리문을 작성할 수도 있다.

DELETE FROM `user`.`user` 
WHERE (`id` = '2');
TRUNCATE & DROP


GUI를 사용하여 테이블 우클릭-TRUNCATE를 실행할 수도 있고, 쿼리문을 작성할 수도 있다.

TRUNCATE `user`.`user`;
DROP TABLE `user`.`user`;

SELECT

SELECT [선택할 필드]
FROM [테이블 명] AS [별칭]
WHERE [조건절]
  • 추가로 ORDER BY, GROUP BY 등을 넣을 수 있음

SQL & Java 데이터 타입

문자열
MySQLJAVA설명
CHAR(n)String고정된 길이(n)의 문자열 데이터
VARCHAR(n)String최대길이가 n인 가변 길이 문자열 데이터
TINYTEXT(n)String문자열 데이터(255)
TEXT(n)String문자열 데이터(65535)
MEDIUMTEXT(n)String문자열 데이터(16777215)
LONGTEXT(n)String문자열 데이터(4294967295)
JSONStringJSON 문자열 데이터

가장 많이 사용하는 것은 VARCHAR, TEXT, 그리고 JSON이다. JSON 타입을 사용하면 JSON body 안의 내용 검색, 인덱싱이나 필터링이 가능해진다. TEXT에도 JSON 문자열을 담을 수 있긴 하지만, 이 경우에는 JSON 타입을 활용할 수 없다.

숫자
MySQLJAVA설명
TINYINT(n)Integer, int정수형 데이터 (-128~127, 0~255)
SMALLINTInteger, int정수형 데이터 (-32768~32767, 0~65536)
MEDIUMINTInteger, int정수형 데이터
INTInteger, int정수형 데이터
BIGINTLong, long정수형 데이터(수 제한 x)
FLOATFloat, float부동소수점 데이터
DECIMALBigDecimal고정 소수형 데이터
DOUBLEDouble, double부동 소수형 데이터

숫자는 주로 INT를 사용하고, DECIMAL은 금액을 다룰 때 사용한다. BIGINT는 혹시 모를 데이터 오버플로우를 막기 위해 PRIMARY KEY 등에 사용한다.
default 값에 null을 허용한 경우에는 primitive 타입을 쓸 수 없어 참조형 데이터타입 Integer, Long, Double 등을 사용한다.

시간
MySQLJAVA설명
DATEDate, LocalDate날짜 (년월일) 형태 기간 데이터
TIMETime, LocalTime시간 (시분초, 나노초) 형태 데이터
DATETIMEDateTime, LocalDateTime날짜와 시간 데이터
TIMESTAMPDateTime, LocalDateTime날짜와 시간 데이터, TimeZone 속성 사용
YearYear연도 표현 데이터 타입
바이트코드
MySQLJAVA설명
BINARY(n)BYTE[]CHAR 형태 이진 타입
BYTE(n)BYTE[]CHAR 형태 이진 타입
VARBINARY(n)BYTE[]VARCHAR 형태 이진 타입
TINYBLOB(n)BYTE[]이진데이터 타입(255)
BLOB(n)BYTE[]이진데이터 타입(65535)
MEDIUMBLOB(N)BYTE[]이진데이터 타입(16777215)
LONGBLOB(B)BYTE[]이진데이터 타입(4294967295)
post-custom-banner

0개의 댓글