티스토리 뷰

어제는 네임 서버를 구현해 보는 목적으로 실습을 하였고, 마지막에 DB에 관하여 조금 배웠다.

 

mysql 진입

DB는 대소문자를 구별하지 않는다.

시스템 예약어 : 시스템에서 예약한 단어들로 반드시 풀네임 형태로 입력해야만 한다.

사용자 정의어 : 사용자가 임의로 정하는 단어로 주로 데이터베이스 이름, 테이블 이름,
                              사용자 이름 등 사용자가 정하는 단어로 지정된다.
                              줄여서 쓰면 줄여서 쓴 대로 정해진다.

강의 중에는 시스템 예약어는 대문자로 쓸 것이고, 사용자 정의어는 소문자로 쓸 예정이다.


※ 데이터베이스는 반드시 1행으로 SQL 문장을 입력할 필요가 없다.
 ; 으로 마지막을 마무리하면 여러 행을 1행으로 인식하고 실행한다.


-------- DATABASE--------

1. 데이터베이스 생성
CREATE DATABASE [DB명]; #기본값으로 DB 명으로 데이터베이스 생성


CREATE DATABASE [DB명] DEFAULT CHATACTER SET utf-8 ;
                                                                                              euckr

utf-8로 설정된 모습을 볼 수 있다.


2. 데이터베이스 수정
ALTER DATABASE [DB명] DEFAULT CHATACTER SET utf-8;
               #생성된 DB명의 옵션 수정


3. 데이터베이스 조회
SHOW DATABASES; #전체 데이터베이스 목록 조회


SHOW CREATE DATABASE [DB명];  #특정 DB명이 어떤 옵션으로 생성되었는지 확인
defualt 언어 세팅 확인

explain [DB명];                                 #릴레이션 모습으로 출력


4. 데이터베이스 지정(선택)
USE [DB명] #사용할 데이터베이스를 선택

none -> shopping_db

5. 데이터베이스 제거
DROP DATABASE [DB명]; #DB명인 데이터베이스 제거


-----TABLE-----

 

 

테이블

고정길이(CHAR) 문자열 : 항상 일정한 길이로 저장
10자리 고정인데 3자리만 입력하면 7자리를 패딩으로 만들어서 저장
               장점: 처리 속도가 빨라짐 (메모리를 규칙적으로 건너뜀)
               단점: 낭비되는 용량이 생김

가변길이(VARCHAR) 문자열 : 입력된 문자 수만큼만 저장
적힌 만큼만 저장
               장점: 용량을 아낄 수 있음
               단점: 처리 속도가 느려짐



어떤 모양의 표를 만들지?

1. 생성
CREATE TABLE [TABLE명] (Field명 데이터형 [옵션], Field명 데이터형 [옵션]. ....);

예시)
CREATAE TABLE customer (
id  CHAR(10)  NOT NULL PRIMARY KEY,
name  VARCHAR(100)  NOT NULL,
age  INT,
address  VARCHAR(100));

2. 조회

1) show tables; #전체 Table 목록 확인


2) show create table [table명] #특정 table 생성이 어떤 옵션으로 생성되었는지 확인
※ 언어 set은 데이터베이스를 따라감


3) explain [table명] #특정 table 필드 구성 출력


3. 제거
drop tables; #특정 table 삭제


4. 수정
alter table [테이블명] 
               ㄴ add #필드 추가


add new필드 자료형 [옵션]


add new필드 자료형 [옵션] [after 필드] #after 필드 다음에 기술

첫 번째 넣고 싶다면 first 사용

 

add 옵션을 사용하여, address 속성을 추가하려고 한다.

이제 oddress를 address로 char를 varchar(100)으로 바꿔보자

ㄴ modify #필드 옵션 변경
               old필드 데이터형 [옵션]

modify 옵션으로 테이블 생성 시의 옵션들을 바꿀 수 있다.


ㄴ change #필드명 변경
               old필드 new필드 데이터형 [옵션] <==필수!!

change 옵션으로 이름까지 변경이 가능하다.

이름과 타입만 바꾸니 나머지가 기본값으로 바뀐 모습이다.

ㄴ drop #필드 제거
               drop 필드명

 

 

5. 데이터(레코드, 행) 삽입, 수정, 조회

1) 삽입
insert into [table명] Values (값1, 값2, 값3, ..... 값n) # n = 테이블의 필드 수(반드시, 순서대로)


insert into [table명] (필드1, 필드2) Values (값1, 값2) # 테이블의 특정 필드만 값들을 삽입
                                                                                    필드의 나열은 임의대로 가능, 값은 나열된 순서대로 삽입
                                                                                     필드에는 반드시 not null 필드를 모두 포함해야 함

 

 

전부 있어야 한다.

 

 

2) 조회 
select 필드1, 필드2,.... from [table명] # 특정 테이블에 조회하고 싶은 필드들을 나열하여 조회

 

3) 업데이트
update [table명] set 필드 = 값
update [table명] set 필드1 = 값1, 필드2 = 값2

 

누구를 지정하지 않으면 

전부 바뀐다.

 

조건이 필요하다.       ↑

update [table명] set 필드 = 값                     #특정 테이블의 필드를 값으로 업데이트하라 

                                                                                where절이 없으면 모든 행을 업데이트

 

update [table명] set 필드 = 값  where 조건  #특정 테이블에 모든 필드들을 나열하되

                                                                                 조건을 만족하는 행만 업데이트

 

다음과 같은 모습으로 수정해 보자

 

 

외래키에서 참조하는 데이터 중 참조 테이블에 PK 컬럼에 없는 값이라면 불가능함


 

3. 계정

1) 생성
create user '계정명'@'Client_IP' IDENTIFIED BY '암호';
계정명 : 각자 이니셜
암호 : p@ssw0rd
  대/소 각 1개 이상
  숫자 1개 이상
  특수 1개 이상
    
create user 'swj'@'192.168.1.200'
    -> identified by 'p@ssw0rd';


4. 권한

1) 권한 부여
grant 권한1, 권한2, 권한n...... on DB명.table명(필드1, 필드2....) to '계정명'@'Client_IP';
all privileges
shopping_db.customer : shopping_db의 customer 테이블만 부여
shopping_db.* : shopping_db의 모든 테이블
*.* : 시스템 전체 권한 (모든 데이터베이스, 모든 테이블)


2) 권한 회수
revoke 권한1, 권한2, 권한n...... on DB명.table명 from '계정명'@'Client_IP';

권한의 종류
create
drop
alter
select
.
.
..
all privileges (모든 권한을 제공)

모든 권한을 제공한다.

 


GUI DB

1) heidisql
    한글 지원
    UI 칙칙

 

이런 식으로 접속하면 연결 불가가 뜬다.

 

서버 쪽의 방화벽을 열어주지 않았기 때문이다.

 


방화벽을 열어주면 접속이 되는 것을 볼 수 있다.

 

하지만 일반 계정으로 접속되어 아까 만든 DB가 없는 것을 볼 수 있다.

 

권한이 없어서 그렇다.

 


권한을 제공하면 재접속 시 모든 DB가 보인다.

 


2) workbench 
    한글 미지원 
    UI 이쁨

 

 

거의 동일하므로 설명X


mysql 프롬프트 접속법

 


접속은 되지만 암호를 눈에 보이게 쳤다고 경고를 주고 있다.

 

-p 뒤에 암호를 적지 않고 진입하면 보이지 않게 칠 수 있다.


환경변수 설정

 

PATH=%PATH%;C:\Program Files\MySQL\MySQL Workbench 8.0 CE

이런 식으로, 일회용으로 넣어줄 수 있지만 반영구적으로 넣기 위해서는 윈도우의 설정을 해줘야 한다.

 

여기를 열어서

 

환경변수 버튼을 누르자

 

 

wonjae에 사용자 변수를 바꾸면 나의 계정에서만 바뀌고 시스템 변수에서는 모든 사용자가 바뀐다.

 

보통의 단일 사용자로 사용하는 사람이라면 둘 중 아무거나 하면되지만, 학원이나 공유 컴퓨터를 사용할 시 

 

타 사용자의 설정 기회를 뺏을 수 있다. (별 일 아니라는 것이다)

 

path를 찾아서 새로 만들기로 mysql.exe가 설치된 폴더를 넣어주면 된다.

 

보통은 경로가 이렇다.

 

C:\Program Files\MySQL\ <-이제 어떤 프로그램을 설치했냐에 따라서 다르지만 여기부터는 찾기 쉽다.


테이블 생성 연습


이제 강사님께서 제공해 주신 db 파일을 사용해서 연습해 보겠다.

 

 

 

select를 더 자세하게 알아보자

 

임시로 A를 끼워넣기


select 필드1, 필드2, ....필드n  AS "new 필드"

속성명을 커스텀해서 넣기 가능


같은 도메인 값이므로 정수형이라면 계산 가능


조건 선언

or 조건 사용 가능

 

and의 경우 한 컬럼에서 두 개의 데이터를 가지는 것이므로

 

and는 다른 조건과 함께 사용한다.

 

where address = "서울" or address = "경기"

where address in = ("서울", "경기")

 

동일한 결과

 

조건 - age가 20 이상이며 그리고 age가 30 미만인 회원
where age >= 20 and age < 30;



where 20 <= age < 30; # 지원하지 않음


하지만 between 20 and 29 # 로 원하는 값을 얻을 수 있음


sql 언어의 형식은 3개로 나눌 수 있다.

 

[1]

DDL(Data Definition Language)       : 데이터 정의어

ㄴ데이터베이스/테이블의 구조를 정의하는 언어

    ㄴcreate, alter, drop,....

View: 1개 이상의 물리 테이블을 통해서 만드는 가상의 논리 테이블

 

trucate 

테이블 구조만 남기고 표 내용을 비우는 명령어

 

create 테이블 생성 시 칼럼에 디폴트값을 지정하면 값을 넣지 않을 시 그 값이 자동으로 들어간다.

 

 


[2]

DML(Date Manipulation Language) : 데이터 조작어

ㄴ테이블에 데이터를 입력/업데이트/조회

    ㄴinsert, update, delete, select,....

 

조인 : 두 개의 테이블을 결합하여 데이터를 추출하는 기법

테이블1 JOIN 테이블2 

서로 다른 2개의 테이블을 1개로 묶어서 출력한다.

관계형 DBMS에서 핵심 기능이다.

 

서브쿼리 : SQL문 안에 포함된 SQL문 형태의 사용 기법으로 우리가 60점보다 높은 점수만 찾고 싶다면 그냥 적으면 되지만 만약 우리 반의 평균보다 높은 레이블을 찾고 싶다면 서브 쿼리로 질의가 가능하다.

select * from student where score >= (select avg from ....)식으로 말이다.

 

집합 연산자 :

union : 합집합


[3]

DCL(Date Control Language)          : 데이터 제어어

ㄴ사용자 관리, 권한 제어

    ㄴgrant, revoke

 


 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함