생각기록

2022-11-29 데이터베이스, mySQL 환경설정 기본개념 본문

SeSAC 풀스택/MYSQL

2022-11-29 데이터베이스, mySQL 환경설정 기본개념

끼록관 2022. 11. 29. 19:08

데이터 베이스란?

  • 데이터를 저장하는 공간
  • 데이터를 저장하는 구조/자료의 모음
  • 데이터의 집합소

 

 

Q. dbms 사용 전 쓰던 방식은?

파일 시스템

Q. 왜 파일 시스템을 계속 안 쓰고 데이터를 이용?

모든것이 파일의 처음부터 끝까지 확인해야 한다.

1. 데이터의 중복

2. 데이터 불일치

 

 

DBMS

  • DataBase Management System
  • 파일 시스템이 가진 문제를 해결하기 위해 만들어짐
  • 데이터베이스에 접근하고 이를 관리하기 위해 존재한다.

 

 

관계형 데이터베이스

RDBMS(저장 공간끼리 관계를 맺고 있다.)

table이란곳에 무엇인가 저장하게 되면,

table에 원하는 정보를 저장하고

그 table들에 관해 관계를 맺어 줄 수 있는게 관계형데이터베이스

 

 

거기에는 mySQL가 속해있다.

RDBMS 순위 중

Oracle을 많이 사용하는데 기업용이라 유료버전

mySQL도 완전 무료는 아닌데, 이 것을 사용할 것이다. (유료를 제외한 1위)

 

 


 

데이터베이스를 사용하기 전에 알아야 할 기본 용어

 

 

데이터베이스 용어

데이터 베이스는 기본적으로 엑셀표 처럼 만들 수 있는데

  • 열 세로 ( Column, Attribute, 속성 )
  • 행 가로 ( Record, Tuple, 튜플 )
  • 테이블 ( Table, Relation )

열 : 저장할 것을 구분지어주는 속성 Column 은 속성이다.

행 : 속성에 맞게끔 데이터를 저장 ( 한 줄로 저장 ) = 저장된 값

 

 

 

key

데이터베이스에서 튜플을 찾거나 순서대로 정렬할 때 구분하고 정렬의 기준이 되는 속성

 

 

기본키 ( pk, primary key )

메인 키로 한 테이블에서 튜정 튜플(행)을 유일하게 구별할 수 있는 속성

( 예: 학번처럼 중복되면 안되는 것들..)

  • null 값 불가 (비어있으면 안됨) *null? 데이터 값이 존재하지 않음
  • 중복 값 불가
  • 테이블당 오직 하나의 필드에만 설정 가능
*null? 데이터 값이 존재하지 않음
아직 정의되지 않은 미지의 값
현제 데이터를 입력하지 못하는 경우를 의미함

학번은 중복되면 안되는 기본키로 설정해야 한다.

 

 

외래키 (fk, foreign key)

어떤 테이블의 기본키 참조하는 속성

속성 이름은 달라도 되는데, 그 안의 값은 동일해야 한다.

 

보통 고객, 주문 테이블이 따로 존재 한다.

주문 테이블 - 무엇을? 몇개? 가격은? 누가? 중 누가의 정보가 필요하다.

주문 테이블의 고객id는 고객 테이블의 고객id를 참조할 수 있게

 

 


MYSQL

  • 가장 널리 사용되고 있는 관계형 데이터베이스 관리 시스템 (RDBMS)
  • 오픈 소스
  • 윈도우, Mac, 리눅스 등 다양한 운영체제에서 사용이 가능하다.

 

설치 방법-로컬

더보기

홈페이지 접속

아래거 다운

큰 버튼 누르지말고 no thanks
전부다 다운받으면 너무 커서 custom
중간에 있는 화살표로 우측에 필요한 얘들 삽입

excute 설치~~ 계속

비밀번호 설정~

계속 설치하고 넘기면

설치 완료


mySQL 사용 방법 

CMD 명령 프롬프트 켜서 경로에 접속

파일관리자 로 경로 확인 후

더보기

 

복사 붙이기

1. 해당 경로 이동

CD C:\Program Files\MySQL\MySQL Server 8.0\bin #경로에 공백있으면 따옴표로 감싸기

 

 

입장 명령어

2. mysql -u root -p #cmd, powershell

winpty mysql -u root -p #gitbash

패스워드는 mySQL 깔았을 때  지정한 비밀번호

 

 

그런데 cmd로 하면 불편하다..

3. quit    #  mysql 종료 (다시 콘솔로 돌아가기 ) 또는 exit

 

 

 

mysql에서 ul를 제공

> workbench 사용 방법

데이터를 시각적으로 확인하기 편함

비번치고 들어가서

 

 

Schemas 를 클릭해서 보면,

내가만든 AR_test 데이터베이스가 보인다.

sys는 자체적인 것이니 건들면 안된다.

 


SQL문

  • 데이터베이스를 제어하고 관리 할 수 있는 목적의 프로그래밍 언어
  • 구조적 질의 언어
  • DDL , DML, DCL 등이 있다

 

외울필요 없고 어디 속해있는지만 기억하자! 전부 SQL문임

 

 

DDL

데이터베이스를 정의하는 언어

  • CREATE : 생성 (데이터베이스, 테이블)
  • ALRER : 테이블 수정 
  • DROP : 지우겠다
  • TRUNCATE : 테이블을 초기화 ( 테이블 초기화가 아닌 저장해둔 데이터만! 값만 초기화)

 

 

CREATE 는 테이블과 데이터베이스를 생성

테이블 생성시, 기본 인코딩을 UTF8로 설정

CREATE DATABASE 이름 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 

이미 생성된 데이터베이스의 언어 인코딩 UTF8로 변환

ALTER DATABASE 이름 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 

데이터 베이스를 만들기 + 한글 인코딩    *한글인코딩? 프로그래밍 언어는 영어기반이어서 한글을 인식할 수 있게!

1. CREATE DATABASE 이름 DEFAULT CHARATER SET utf8 DEFAULT COLLATE utf8_general_ci;

 

 

데이터 베이스 선택

2. USE 이름 ; ( 데이터 베이스를 사용하겠다 )

 

 

데이터 베이스 안에 테이블 만들기

3. CREATE TABLE 테이블 명 (

  필드1 값형식,

  필드2 값형식 |

);

필드 = 속성

*주의할 점 : 명령어 끝에는 세미콜론(;) 반드시 붙인다.

데이터 형식
= 이런 형태로 값을 받겠다
학번이라는 것은 정수형이야
이름이라는것은 문자열이야
id = 필드 / varchar 등이 값형식 !!
ar_test라는 데이터베이스에 member라는 테이블을 만들건데~!

사용 예시 1
creat table member(
name varchar(10),  //멤버 테이블의 name은 문자열 최대 10글자 저장이 가능하다. 
gender varchar(2), // 남자, 여자
age int, //정수형 데이터 타입, 소수 = 실수 면 float, bouble등을 씁니다.
registered timestamp //이 데이터가 저장될 때 시간을 registered에 자동으로 넣어준다.
)

최대값 지정은 varchar (숫자) 해주면 되고
mediumtext, // 문자열 데이터 최대 길이가 정해져 있음

not null의미
id, name, birthday 이 값이 무조건 있어야 할 때!
not null = 이 값은 절대 비우면 안된다. 

문자형 데이터
숫자형 데이터
날짜형 데이터

 

 

 

alt + enter = 데이터베이스 실행

이라고 하면 오류가뜸

 

내 실행의 결과가 밑에

[ action output ] 밑에

No Database Selected > 어디다 만들지 모르겟어 설정해줘!

 

use ar_test; 라고 써줘야함 ( 어떤 데이터베이스를 쓸지 지정 )

 

새로고침 버튼

새로고침하고 난 후 보인다.

 

 

 

밑에는 같은 정보의 테이블을 만들 수 없기 때문에 생긴 오류

 

 

 

테이블의 정보 : desc '테이블이름';

desc member;

cmd도 이런식으로 뜬다.

 

 


 

ALTER : 테이블의 수정 명령어

 

1. 컬럼 삭제 drop

alter table 테이블명 drop column 컬럼명 ;

 

member 테이블에서 컬럼 birthday를 드롭시켜라

member 테이블에 birthfday 컬럼이 사라짐

field = 컬럼 

 

 

2. 컬럼 추가 add

- 컬럼 이름 , 타입 추가

alter table 테이블명 add column 컬럼명 타입 ;

 

member 테이블에 컬럼 date 속성을 붙인 birhday를 추가해라

date 속성이 있는 birthday가 추가됬다.

 

 

3. 컬럼 속성 변경 modify

alter table 테이블명 modify column 컬럼명 타입 ;

 

member 테이블을 수정한다. > 컬럼 brithday의 date 속성과 not null 속성으로

 


 

DROP 테이블 삭제하기

 

drop table 테이블명 ;

truncate table 테이블명 ;

DROP 테이블 삭제 TRUNCATE 테이블 초기화
  • 테이블 삭제
  • 테이블을 잘못 만들었거나, 필요 x 때
  • 테이블의 모든 행(row) 삭제
  • 저장해둔 데이터만! 값만 초기화

 

테이블 자체를 삭제

 


SQL 공통

use 데이터베이스명; : 어떤 데이터베이스를 사용

 

alt + enter = 데이터베이스 실행

 

desc '테이블이름'; : 테이블 구조 보기

 

데이터베이스 안의 테이블이 어떤게 있는지 보려면, desc도 좋지만 목록으로 보여주는 방법을 선호 한다 

show tables : 테이블들을 목록으로 보기

 

show database : 데이터베이스 목록 보기

내가 만든 ar_test가 보임/ 나머지는 기본 설정이라 건들이지 않는다.

 

 

기본키 설정 방법

primary key 기본키 설정

default '홍길동'  기본값

 


실습1.

정답

 


실습2

정답


DDL 은 공간을 만들었다면,

DML

DML 은 Data Manipulation Language

데이터베이스의 내부 데이터를 관리하기위한 언어

  • SELECT : 원하는 데이터 검색
  • INSERT : 테이블에 데이터 추가
  • UPDATE : 데이터를 수정하는 역할
  • DDELETE : 데이터를 삭제하는 역할

 

개념 차원

기본 컴퓨터 소프트웨어가 가지는 기본적 처리 기능

sql문이랑 헷갈리면 안됩니다~!!!!!

 

 

INSERT 테이블에 데이터 추가

INSERT INTO 테이블명 ( 필드1, 필드2, 필드3 ) VALUES ( 값1, 값2, 값3 ) ;

INSERT INTO 테이블명 VALUES( 값1, 값2, 값3 ) ;

*필드를 명시하지 않을 때는 테이블의 모든 컬럼에 값을 추가할 때만 가능

 

 

insert into user(어떤컬럼에 넣을지) values( 어떤값? )

값이 들어갔는지 왼쪽 user 테이블에서 확인

 

 

b값도 추가해보겟다

필드 지정 없이 값만 넣어준다면, 배열처럼 순서 제약이 생긴다.

 

 

insert 테이블명 (필드1, 필드 ) values (값1, 값2 );

 

 

 


SELECT 데이터를 검색

select * from 테이블명;

  • 어떤 테이블의 모든 필드를 가져와
  • * 모든 필드

 

 

select 필드 from user;

select ID, name from user;

아이디, 네임 필드만 가져와 user로 부터!

네임 아이디 필드 가져옴
id 가져옴

 


where 조건 걸기

 

select * from user where name="가나다";

user 테이블의 모든 필드에서 네임이 가나다인 것을 검색해라.

 

 

order by 어떤 필드 기준 정렬 시킴

select * from user order by ID ASC;

ID라는 필드를 기준

  • ASC 속성 : 오름 차순
  • desc 속성 : 내림 차순
  • limit 속성 : 개수 제한

 

 

 

select * from user order by ID desc;

ID 필드 기준 내림차순 검색

순서대로 써야 합니다.
1. 조건은 where
2. 정렬은 order by
3. 개수 제한 limit
select * from user where name="가나다" order by ID desc limit 2;
name 가나다
내림차순 하며,
위에서 두개를 가져온다

c가 없다

 


where 절 

비교연산자

=  같다
보다 크다
>=  보다 크거나 같다
<  보다 작다
<=  보다 작거나 같다

 

 

부정연산자

!=  같지 않다
^ 같지 않다
<> 같지 않다
not 컬럼명 =  ~와 같지 않다

 

 

select * from user where age > 81;

age가 81 이상

 

select * from user where age !=  81;

81과 같지 않은 얘들이 다 나온다.

 

where not age = 80;

나는 나이가 80이 아닌 것을 가져온다

 

 

SQL 연산자

BTWEEN a AND b  a 와 b 값 사이에 있으면 검사 (a~b 사이 검사)
IN ( list ) 리스트에 있는 값 중 하나라도 일치하면 참
like '비교문자열' 비교 문자열 형태가 일치하면 사용 (%, _ 사용 )
  % : 0개 이상의 어떤 문자
   _ : 1개의 단일 문자
IS NULL NULL 값인 경우 참, 아니면 거짓

 

 

select * from user where age between 81 and 98;

80과 98 사이에있는 것을 가져오겟다

 

in

select * from user where name in('성춘향' and '홍길동');

뒤에 있는 리스트에 있는지 없는지를 구분해서 조건으로 가져온다.

 

 

like

select * from user where name like '%소%';

조건 컬럼(name) + like  '%소%'

name 이란 컬럼중에 소라는 글자가 있으면 다 조회 한다.

 

퍼센트는%%는 %가 앞에 있으면 앞에 뭐가 있어도 상관없다 라는 뜻

'%김소' 김소로 끝나야한다, 앞에 뭐가 있어도 상관없는데 뒤에 뭐가 있으면 안된다는 의미!

 

%'소_' 소뒤에 한글자만 와도되는데 뭐든 상관없다!

'소_' 뭐든 소로시작해야하고, 소가 앞에 있는 두글자를 찾겠다.

 

 

is null

null값을 가진 name필드 조회

select * from user where name is null;

 

응용해서

부정문을 사용해보면

select * from user where not name is null;

name 필드가 아닌 모든 필드의 null값

 

 

 

논리연산자

AND 앞에 있는 조건과 뒤에 오는 조건이 참 = 참
OR 앞 뒤 중 어느하나라도 참 = 참
NOT 뒤에오는 조건과 반대되는 결과 반환

컬럼에 대한 한 조건이 끝나고, and  name="가나다";

select * from user where not name is null and name="가나다";

and는 앞 뒤가 true여야 함 

 

 

select * from user where not name is null and age between 80 and 90;

 

 

select * from user where not name is null or age between 80 and 90;

 

 

 

select * from user where not name="가나다"; 

네임이 가나다가 아닌것

 


 

UPDATE 데이터 수정

update 테이블명 set 필드1 = 값1 WHERE 필드2 = 조건2 ;

 

update user set age=20 where ID="b";

user 테이블에서 나이를 20으로 변경할건데,

id가 b인 얘만 변경한다!

DELETE 데이터 삭제

delete form 테이블명 WHERE 필드1 =  값1 ; 

 

delete from user where ID="a";

아이디가 a인 얘를 삭제

truncate table user;

값 초기화! > 빈 테이블

 


실습3

정답

실습4

정답

더보기