DB/MySQL

MySQL 기초(DB기초)- AWS 풀스택 과정 31일차

awspspgh 2024. 8. 27. 18:17

오늘은 DB 기초에 대해서 배워보겠습니다.

 

목차
1. DB 기초
2. 느낀 점

 

1. DB 기초

◈ 이론

 

 

 

※ 속성은 시험에 잘 나오는 질문

 

 

 

 

 

 

 

 

 

 

 

 

◈ cmd

day01-DB
// sql접속 => cmd
mysql -umyUser -pMySQL

show databases;

// 사용할 DB 선택
use textdb;

exit => root로 재접속

// 유저 생성 => root 계정에서만 사용 가능
mysql -uroot -p비밀번호

// mysql이 user를 관리하는 테이블로 이동
use mysql;

// user 생성 구문
create user 'mysqlUser2'@'localhost' identified by 'mysql';
(=> create user '유저 아이디'@'localhost' identified by '비밀번호';)

// 권한 부여
grant all privileges on textdb.* to 'mysqlUser2'@'localhost' with grant option;
(=> grant all privileges on textdb.* to 'mysqlUser2'@'localhost' 추가 옵션;)

// 권한 적용
flush privileges;

// 유저 확인
select user, host from user;

----------------------------------------
myUser로 변경
table 생성

mysql 데이터 자료형
숫자
(정수)
- BIT(m) : 1 ~ 64 binary 값을 지정
- BOOL : TRUE(1) / FALSE(0) = TINYINT(1)
- TINYINT(m) : 0 ~ 255사이의 작은 수를 표현 (-128 ~ 127)
- SMALLINT(m) : 2BYTE 0 ~ 65536 (-32768 ~ 32767)
- MEDIUMINT(m) : 3BYTE (0 ~ 166777215)
- INT(m) : 4BYTE => java int 동일
- BIGINT : 8BYTE => java long 동일

(실수)
- FLOAT(m, d) : 정밀도가 작은 부동소수점 표현 (d : 자리수)
- DOUBLE(m, d) : 정밀도가 큰 부동소수점 표현 (d : 자리수)
=> mysql 8.0.17 이후부터 사용하지 않음

- DECIMAL(m, d) : 고정 소수점 표현

문자
- CHAR(m) : 고정길이 문자열(0 ~ 255)
- VARCHAR(m) : 가변길이 문자열 (0 ~ 65536)
- TINYTEXT : 가변길이 1BYTE 문자열 저장
- BLOB : 바이너리 데이터 저장용 (이미지)
- TEXT : 2BYTE 가변길이 문자열
- MEDIUMTEXT : 3BYTE
- LONGTEXT : 4BYTE

날짜
- DATE : 날짜표현
- DATETIME : 날짜 + 시간 (=> 가장 많이 사용함)
- TIMESTAMP : insert, update 연산에 유리한 형태
- YEAR : 연도
- TIME : 시간


제약 조건
PK : PRIMARY KEY => 기본키 속성 추가
NN : Not Null (데이터 값으로 null을 오지 못하게 막음)
AI : Auto_Increment (자동 증가 : 정수만 가능)
UQ : unique (중복 안 됨)
B : binary 값
UN : Unsigned (음수 불가)
ZF : Zero_Fill (숫자 앞에 0으로 채우기) ex) 0001
G : Generated (속성 자동생성)

기본값 : 기본값을 주지 않고 값이 없으면 null
default 값

- null은 연산이 안 됨.

주석: 단축키 안 됨
 /* 여러 줄 주석 */, --한 줄 주석

-- 테이블 생성 구문
테이블명 : test1
속성 :
- id int ai pk,
- name varchar(10) not null,
- age int default 20 (기본값 20)
- address varchar(20)

create table text1(
id int auto_increment,
name varchar(10) not null,
age int default 20,
address varchar(20),
primary key(id));

-- 테이블 확인
show tables;

-- 테이블 구조 확인
desc 테이블 명;

-- 데이터 추가 구문
insert into 테이블명(필드명, 필드명)
values(값, 값);

insert into text1(name, address)
values('hong','seoul');
insert into text1(name, address)
values('kim','suwon');
insert into text1(name, address)
values('lee','seoul');
insert into text1(name, address)
values('choi','suwon');
insert into text1(name, address)
values('park','incheon');

-- 내용확인
select * from text1;

-- 테이블 생성
테이블 명 : test2
속성
- 학번(num) 숫자 => 111, 222 ...
- 이름(name) 문자
- 학과(dep) 문자
- 주소(addr) 문자
- 전화번호(tel) 문자

-- 데이터 추가 (5명) 추가
create table test2(
num int auto_increment,
name varchar(5) not null,
dep varchar(10) not null,
address varchar(20),
tel varchar(11),
primary key(num));

insert into test2(name, dep, address, tel)
values('hong','A','seoul','01012121212');
insert into test2(name, dep, address, tel)
values('kim','B','incheon','01034343434');
insert into test2(name, dep, address, tel)
values('park','C','suwon','01056565656');
insert into test2(name, dep, address, tel)
values('lee','D','suwon','01078787878');
insert into test2(name, dep, address, tel)
values('choi','E','seoul','01090909090');

(= insert into test2 values
('hong','A','seoul','01012121212'),
('kim','B','incheon','01034343434'),
... ('choi','E','seoul','01090909090');)
insert into test2 values

-- 테이블 구조 변경
- age를 int로 추가
alter table 테이블명 add(추가) 필드명 속성;
alter table 테이블명 change(수정) 필드명 변경필드명 속성;
-> alter table test2 change aag age int default 20;
add(추가), modify(수정), change(수정:이름변경가능), drop(삭제)
마지막에 추가
특정 필드 뒤에 추가 (after)
alter table test2 add age int default 20;

특정 필드 뒤에 추가 (after)
- age를 name 뒤에 위치
alter table test2 modify age int default 20 after name;

-- 테이블명 변경
- rename table 변경 전 to 변경 후

-- 데이터 변경
-- kim, park의 나이를 21로 변경
- update 테이블명 set 변결필드 = 값
where 조건

update test2
set age = 21
where name = 'kim' or name ='park';

(= where name in ('kim','park');)

update test2
set age = 22
where name = 'lee';

-- text1 phone 추가 varchar(20)
-- 추가된 phone 값을 추가

alter table text1 add phone varchar(20) default 010;
alter table text1 modify phone varchar(20) default 010 after address;
update test1
set phone = '010-1212-1212'
where id = 1;
update test1
set phone = '010-3434-3434'
where id = 2;
update test1
set phone = '010-5656-5656'
where id = 3;
update test1
set phone = '010-7878-7878'
where id = 4;
update test1
set phone = '010-9090-9090'
where id = 5;

rename table text1 to test1;

-- test1 테이블에서 address가 seoul인 학생만 출력
select * from test1 where address = 'seoul';

(= select name, age, address, phone
from test1 
where address ='seoul';)

-----------------------------------
-- 테이블 생성
테이블명 : student
num => 111,222 pk
name => nn
age => default 20
address => 주소
major => 학과

5명의 데이터 추가
create table student(
num int,
name varchar(5) not null,
age int default 20 not null,
address varchar(20),
major varchar(20),
primary key(num));

insert into student(num, name, address, major)
values(111,'kim','seoul','A');
insert into student(num, name, address, major)
values(222,'park','incheon','B');
insert into student(num, name, address, major)
values(333,'lee','suwon','C');
insert into student(num, name, address, major)
values(444,'choi','suwon','D');
insert into student(num, name, address, major)
values(555,'hong','seoul','E');

update student
set age = 21
where num = 111;
update student
set age = 24
where num = 222;
update student
set age = 23
where num = 333;
update student
set age = 22
where num = 444;
update student
set age = 20
where num = 555;

->
'> '; : '하나가 짝이 안 맞을 때 발생 '; => 종료

-- student 테이블 변경
score default 0 속성 추가

점수를 포함한 5명의 데이터 추가로 저장

alter table student add score int default 0;

insert into student values
(666,'lee',23,'suwon','C', 80),
(777,'hong',28,'seoul','D', 76),
(888,'park',24,'incheon','A',90),
(999,'kim',22,'incheon','B',56),
(1000,'choi',19,'seoul','E',79);

update student
set score = 88
where num = 111;
update student
set score = 67
where num = 222;
update student
set score = 98
where num = 333;
update student
set score = 53
where num = 444;
update student
set score = 87
where num = 555;

-- score가 높은 사람 순으로 정렬
select * from student
order by score desc;

--------------------------------------------
select : 데이터를 조회할 때 사용
select 칼럼명 from 테이블명
where 조건
- major가 A인 학생만 출력
select * from student where major = 'A';
- 나이가 23이상인 학생만 검색
select * from student where age >= 23;
- 점수가 80점 이상인 학생만 검색
select * from student where score = 80;
- 주소가 seoul인 학생만 검색
select * from student where address = 'seoul';
- 점수가 70점 미만인 학생만 검색
select * from student where score <= 70;

- 점수가 70 ~ 90 사이인 학생만 검색
select * from student where score between 70 and 90;

- 주소가 'seoul' 'incheon'인 학생만 검색
select * from student where address in ('seoul', 'incheon');

- k가 포함된 학생만 검색
select * from student where name like '%k%';

- 점수가 70 ~ 90 사이인 학생의 점수를 높은 순으로 검색
select * from student 
where score between 70 and 90
order by score desc;

 

▷ 출력

출력 (1)

 

출력 (2)

 

출력 (3)

 

2. 느낀 점

MySQL이 다른 언어보다 외울 명령어가 비교적으로 적어서 '다행이다'라고 생각을 하게 되었고, Html, Css, Js를 까먹지 않도록 틈틈히 복습을 해야겠다는 생각도 하게 되었다.