Database

Database 개념과 기본 명령어

방감자 2024. 5. 17. 17:17

DBMS

= database management system

  • 관계형 데이터베이스 RDB

서로 관계를 가진 데이터들의 집합

글쓴이 - 게시글 두 테이블이 1:n 관계를 가지고 있음

Mysql, Oracle, MariaDB, Postgres

  • 비관계형 데이터베이스 NoSQL

관계형 데이터베이스의 문법을 SQL이라 하는데 이를 쓰지 않는 데이터베이스

RDB에 비해 비정형화된 데이터베이스 (테이블, 행, 열 등 처럼 구조화 x)

비정형화됨에 따라 성능이 올라감

Redis, MongoDB

MariaDB

mysql를 fork하여 만들어졌음 (*fork : 그대로 copy)

SQL문 - RDB에서 CRUD를 하기 위해 사용되는 언어 혹은 문법

  • DB구축시 3가지 작업이 필요 (sql문을 3가지로 분류)
  1. DDL문을 활용하여 테이블 구축 (*DDL: Data Definition Language)

테이블 생성,구조 변경, 삭제 CREATE, ALTER, DROP

  1. DML문을 사용하여 데이터 삽입조회수정삭제(*DML: Data Manipulation Language)
  2. DCL문을 활용하여 DB사용자 관리 (*DCL: Data Control Language)

데이터베이스 용어

스키마 : 데이터베이스

테이블 : 행과 열로 구조화된 자료 집합

행, 열 :

테이블에서 가로,세로 방향의 자료 집합

키 primary key : 한 행을 구별할 수 있도록 식별자로 이용되는 열

값이 유일해야하며 null값일 수 없다 = unique, not null

외래키 foreign key : 연관된 두 테이블을 연결하는데 사용되는 열

  • 외래키가 설정되면, post테이블 데이터의 생성, 삭제, 수정에 대해 제약이 발생한다 만약 author_id에 not null 조건이 있다면 author에 없는 데이터는 post에 생성불가
  • pk fk 은 인덱스가 생성된다..
  • 인덱스는 조회의 성능을 높이기 위한 별도 페이지라 이해하면 될 것

 

데이터베이스 명령어

 

-- 데이터베이스 접속
mariadb -u root -p

-- 도커를 통해 접속
docker exec -it my_mariadb mariadb -u root -p

-- 스키마(database) 목록 조회
show databases;

-- 스키마(database) 생성
create DATABASE board;

-- 데이터베이스 선택
use board;

-- 테이블 조회
show tables;

-- author 테이블 생성
create table author(id INT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255), password VARCHAR(255));

-- 테이블 컬럼 조회
describe author;

-- 컬럼 상세 조회
show full columns from author;

-- 테이블 생성문 조회
show create table author;

-- posts 테이블 생성
-- foreign key(author_id) references author(id) 테이블 차원의 foreign key, 제약조건 author 의 id를 침조
create table posts(id int primary key, title varchar(255), content varchar(255), author_id int, foreign key(author_id) references author(id));

-- 테이블 index 조회
show index from author;
show index from posts;

-- ALTER문 : 테이블의 구조를 변경
-- 테이블 이름 변경
alter table posts rename post;

-- 테이블 컬럼 추가
alter table author add column test1 varchar(50);
alter table author add column address varchar(255);

-- 테이블 컬럼 삭제
alter table author drop column test1;

-- 테이블 컬럼명 변경
alter table post change column content contents;

-- 테이블 컬럼 타입과 제약조건 변경, 컬럼이 아래 변경 사항으로 덮어쓰기
alter table author modify column email varchar(255) not null;
alter table post modify column title varchar(255) not null;
alter table post modify column contents varchar(3000);

-- 테이블 삭제
drop post;

 

 

-- insert into : 데이터 삽입
insert into 테이블명(컬럼1, 컬럼2, 컬럼3) values(데이터1, 데이터2, 데이터3);
insert into author(id, name, email) values(1,'eunji','eunji@test.com');
insert into posts(id, title, content, author_id) values(1,'제목','내용',1);

-- select : 데이터 조회, * : 모든 컬럼 조회
select * from author;

-- 테이블 제약 조건 조회
-- information_schema의 key_column_usage라는 컬럼 중 table_name이 posts인 것을 조회
select * from information_schema.key_column_usage where table_name = 'posts';

insert into author(id, name, email,password,address) values(2, hong, hong@naver.com,1234,1234);
insert into author(id, name, email,password,address) values(2, 'hong', 'hong@naver.com','1234','1234');

-- update 테이블명  set 컬럼명=데이터 where 조건;
-- 덮어쓰기 x, 지정 속성만 변경
-- where문을 빠뜨리게 될 경우, 모든 데이터에 update문이 적용됨에 유의
update author set name = abc, email='abc@test.com' where id=1; 
update author set email='abc2@test.com' where id=2;

-- delete from 테이블명 where 조건;
-- where문이 생략 될 경우, 모든 데이터에 delete문이 적용됨에 유의
-- 실무에서는 delete를 거의 사용하지 않는다 데이터를 영구히 삭제하지 않고 DEL_YN 사용함
delete from author where id=5;

-- select문의 다양한 조회 방법
select * from author;
select * from author where id=1;
select * from author where id>2;
select * from author where id>2 and name=bang;

-- 특정 컬럼만을 조회할때
select name, email from author where id=3;

-- 중복제거하고 조회하기
select distinct title from post;

-- 정렬 : order by, 데이터의 출력 결과를 특정 기준으로 정렬
-- 정렬 조건 없이 조회할 경우, pk를 기준으로 오름차순 정렬
-- asc :오름차순, desc: 내림차순
select * from author order by name asc;

-- multi order by : 여러 컬럼으로 정렬
-- 먼저 쓴 컬럼 우선 정렬, 그다음 정렬 옵셥 적용
select * from post order by title;
select * from post order by title, id desc;

-- limit number  특정 숫자로 결과값 개수 제한
select * from author order by id desc limit 1;

-- alias(별칭)을 이용한 select : as 키워드 사용
select name as 이름, email as 이메일 from author;
select a.name as 이름, a.email as 이메일 from author as a;

-- null을 조회조건으로 
select * from post where author_id is null;
select * from post where author_id is not null;