기본키와 외래키

키( 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+38
  • DOUBLE: 약 -1.7976931348623157E+308부터 1.7976931348623157E+308
  • DECIMAL(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와 동일 , 옵션을 지정하지 않았을 경우 자동으로 선택됨