기본키와 외래키
키( key )
조건에 맞는 데이터를 찾기 위한 식별자
기본키
- Primary Key , PK
- 행을 특정 지을 수 있는 데이터
- 중복 불가 , 고유해야함 , NOT NULL
고유키
- Unique Key
- 기본키와 유사하나 Null 가능
외래키
- Foreign Key
- 다른 테이블을 연결(참조)하기 위한 키
참조한 테이블이 변경/삭제 될 경우 SET NULL : 전부 NULL 값으로 채움 CASCADE : 같이 변경( 삭제 , 업데이트 같이 적용 ) RESTRICT : 삭제,업데이트 자체를 제한
데이터 베이스와 테이블 생성하기
데이터 베이스
데이터 베이스 생성
// testdb 생성
create database test;
create database xxx
데이터 베이스 조회
// testdb 조회
show databases;
show schemas;
데이터 베이스 (스키마) 사용
//test db 사용
use test;
데이터 베이스 (스키마) 삭제
drop database test;
테이블
테이블 생성
create table tableName (
열이름 자료형 , [default 기본값] []
);
테이블 조회
show tables;
show tables from dbname;
-- 다른 database의 테이블 조회
테이블 구조 조회
desc test;
describe test;
테이블 이름 변경
rename table old_name to new_name;
테이블 삭제
drop table tableName;
truncate table tableName;
자료형
숫자 데이터 타입
TINYINT
: -128부터 127 (부호 있음), 0부터 255 (부호 없음)SMALLINT
: -32,768부터 32,767 (부호 있음), 0부터 65,535 (부호 없음)MEDIUMINT
: -8,388,608부터 8,388,607 (부호 있음), 0부터 16,777,215 (부호 없음)INT
: -2,147,483,648부터 2,147,483,647 (부호 있음), 0부터 4,294,967,295 (부호 없음)BIGINT
: -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807 (부호 있음), 0부터 18,446,744,073,709,551,615 (부호 없음)FLOAT
: 약 -3.402823466E+38부터 3.402823466E+38DOUBLE
: 약 -1.7976931348623157E+308부터 1.7976931348623157E+308DECIMAL(M, D)
: M은 전체 자릿수, D는 소수점 이하 자릿수. 예를 들어,DECIMAL(10, 2)
는 -99,999,999.99부터 99,999,999.99까지의 값을 가질 수 있음.
문자열 데이터 타입
CHAR(M)
: M은 최대 255자. 고정 길이로, 지정된 길이보다 짧으면 공백으로 채워짐.VARCHAR(M)
: M은 최대 65,535자. 가변 길이로, 실제 길이에 따라 저장 공간이 다름.TEXT
: 최대 65,535자. 긴 문자열 데이터에 사용.BLOB
: 최대 65,535바이트. 바이너리 데이터에 사용.
날짜 및 시간 데이터 타입
DATE
: ‘1000-01-01’부터 ‘9999-12-31’까지.TIME
: ‘-838:59:59’부터 ‘838:59:59’까지.DATETIME
: ‘1000-01-01 00:00:00’부터 ‘9999-12-31 23:59:59’까지.TIMESTAMP
: ‘1970-01-01 00:00:01’ UTC부터 ‘2038-01-19 03:14:07’ UTC까지.YEAR
: 1901부터 2155까지.
기타 데이터 타입
ENUM
: 최대 65,535개의 값 중 하나를 선택할 수 있는 문자열.SET
: 최대 64개의 값 중 조합으로 선택할 수 있는 문자열.
데이터 입력_INSERT
데이터 추가
insert into 테이블이름 values (값1 , 값2 , 값3 , ...);
insert into users(username, email) values ('usersname','[email protected]');
insert into users(username, email , registration_date) values ('username','[email protected]',default);
데이터 조회_SELECT
SELECT
[ALL | DISTINCT | DISTINCTROW]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT]
[SQL_BIG_RESULT]
[SQL_BUFFER_RESULT]
[SQL_NO_CACHE]
[SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
FROM
table_references
[PARTITION partition_list]
WHERE
where_condition
GROUP BY
{col_name | expr | position}, ...
[WITH ROLLUP]
HAVING
where_condition
WINDOW
window_name AS (window_spec)
[, window_name AS (window_spec)] ...
ORDER BY
{col_name | expr | position}
[ASC | DESC], ...
[WITH ROLLUP]
LIMIT
{[offset,] row_count | row_count OFFSET offset}
[FOR {UPDATE | SHARE}
[OF tbl_name [, tbl_name] ...]
[NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]
[into_option]
into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}
url: https://dev.mysql.com/doc/refman/8.4/en/select.html
title: "MySQL :: MySQL 8.4 Reference Manual :: 15.2.13 SELECT Statement"
host: dev.mysql.com
select 컴럼
from 테이블
where 조건
group by 그룹화할_컬럼
having 필터_조건
order by 정렬할_컬럼
!=
,<>
같은 의미
select * from products where category_id <> 2;
where 절 조합해서 쓰기 and
select * from products where price < 1000 and category_id =3;
데이터 조회_세부적으로 검색하기
연산 및 집계 함수
- count
select count(*) from products;
- sum
select sum(price) from products;
- avg
select avg(price) from products;
- max
select max(price) from products;
- min
select min(price) from products;
LIKE를 이용한 패턴 검색 LIKE
- 부분적으로 일치해도 검색 가능
- 사용 가능한 와일드 카드
%
: 임의의 문자열_
: 임의의 문자
select name from products where name like '_onitor';
select name from products where name like '%monitor%';
GROUP BY & HAVING
GROUP BY
- 테이블 내 데이터를 그룹으로 묶어 조회하고 싶을 때 주로 집계 함수와 함께 사용
- where 조건식을 사용할 수 없음
HAVING
- GROUP BY 의 결과를 통해 필터링을 하고 싶을 때 사용
서브 쿼리
- 쿼리 속의 쿼리 (쿼리 속의 select)
데이터 수정_UPDATE
update tableName set 열 = 값 , 열 = 값 [where 조건식];
- where 절을 이용해 특정 행을 식별 ( 조건에 일치하는 모든 행을 대상으로 업데이트 )
- where 절이 생략된 경우 모든 행이 갱신
on update 제약 조건
- cascade : 참조 데이터 업데이트 시 상대방 데이터도 함께 업데이트
- set null : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Null로 업데이트
- set default : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default 값으로 업데이트
- restrict : 참조 하고 있는 경우 , 업데이트 불가
- no Action : Restrict와 동일 , 옵션을 지정하지 않았을 경우 자동으로 선택됨
데이터 삭제_DELETE
delete from tableName where 조건식;
제약 조건 on delete
- cascade : 참조 데이터 업데이트 시 상대방 데이터도 함께 삭제
- set null : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Null로 업데이트
- set default : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default 값으로 업데이트
- restrict : 참조하고 있을 경우, 삭제 불가
- no Action : Restrict와 동일 , 옵션을 지정하지 않았을 경우 자동으로 선택됨