[DB] Maria DB + Linux

:)·2024년 5월 29일
0

DB

목록 보기
7/8

Maria DB - 서버와 연동

  • 설치 및 언어 설정
    • 설치
      yum install maria*
      mysql port : 3306
    • 구동
      • systemctl list-unit-files |grep maria 확인
        serivce mariadb restart
        systemctl enable mariadb
        systemctl list-unit-files |grep maria 확인
        netstat -lntup |grep mysql
    • mysql 로그인
      mysql -u root -p (비번 X 엔터) ->linux root와 상관 x
    • 상태확인(char확인) : \s
    • mysql 한글 설정
      • vi /etc/my.cnf.d/

        [mysqld]
        character-set-server=utf8
        [client]
        default-character-set=utf8

        • 저장 -> service mariadb restart
        • mysql -u root -p
        • \s 혹은 show variables like 'c%';
        • 전부 utf8로 나오는것 확인
  • ctrl+l = clear
  • DBMS (DATABASE MANAGEMANT SYSTEM): 2010년 oracle사가 썬마이크로 시스템즈를 인수하면서 mysql도 같이 인수함, 이후 mariaDB가 출시
  • 오픈소스 DB

    MYSQL 세계에서 가장 많이 씀 (GPL정책과 GNU저작권) (win/linux)

    postgresql 오라클과 가장 가까운 오픈DBMS

    mariaDB GPLv2 라이선스

  • 부분 상용화

    MSSQL windows 플랫폼 (win) 기본적으로 무료 // 2012부터 core라이센스 적용 즉 유료

    ORACLE 엔터프라이즈급 DB관리 시스템 가장 오래되고 세분화된 DB 기업 DB시장 절반 이상 코어당 라이센스 적용 → 가장 많이 사용

    DB2 IBM장비에서 사용하는 전용 DB - 현재 DB4까지 사용

  • DB 의 필요성: 컴퓨터는 수많은 연산을 진행하는데 이에 대한 패턴이나 기본 재료가 존재해야 함 → 어떠한 연산이나 수행에 필요한 모든 데이터를 넣어두는 곳을 database 즉 db라 함 → DBMS: DB를 관리해주는 시스템
  • DB 명령어 순서
    • DB>table>field>value table = 학생 / filed = 학번, 이름 / value = 20250202, 김홍동
  • DB 사용시 주의사항
    1. 명령문 끝에 반드시 ; 세미콜론으로 마침 선언할 것
    2. 명령어 선언 후에 Query Ok 문구 확인할 것
    3. 자동 줄바꿈 기능보다 먼저 줄바꿈할 것

데이터 베이스 명령

  • 명령문 DB TABLE

    생성 create O O DDL
    삭제 drop O O

    보기 show O O

    사용 use O X
    정보 desc X O

    삽입 insert X O DML
    수정 update X O
    삭제 delete X O
    선택 select X O

  • DDL (생성 정의 삭제 ) (data definition language) < DB, TABLE>

    • DB관리자가/설계자가 사용 (데이타 구조를 정의 하는 언어)
      create , alter , drop , truncate
      생성 재정의 삭제 초기화
  • DML (데이터 수정 = 값 삽입) < TABLE >

    • 테이블 내 값 삽입 수정 삭제 조회 (DATA를 조작하기 위한 언어)
      insert , update , delete , select
      삽입 수정 삭제 조회 <<<<<<<(value)
  • DCL (데이터 제어)

    • 복구 권한 할당 DBMS를 제어하기 위한 언어
      grant revoke commit rollback
      권한부여 권한해제 실행적용 복구
  • 스키마 ( 데이터 구조를 정의 ) = schema (준비물) → 보안에서 중요 → 헤더와 같은 역할..(DB 와 table 정보가 담겨있음)

    SEVAS
    no 이름 수강과목 성적

    1. 외부 스키마 → (사용자가 사용하는) 질의나 프로그래밍 언어를 이용해서 접근하는 데이터 베이스

      [ no 이름 수강 과목 성적 ]

    2. 개념 스키마 → 개체, 데이터, 유형, 관계, 사용자, 연산, 제약조건 등을 정의 = (desc 에서 나오는 필드 타입 형식 등이 개념적 스키마 )

      [ no int(2) 이름 char(10) 수강 과목 varchar(20) 성적 int(3)]

    3. 내부 스키마 → 물리적 저장 구조에 대한 정의 = 데이터 메모리 , DB의 length값 필드들의 바이트와 osffest인덱스 등등 용량으로 표현되는 것들 = 컴퓨터 처리를 위해 필요

      • DB상에서 값의 용량은 구할 수 없음(table, db만 가능)

      int = 4byte
      문자 = 1byte

      유니코드 = 2byte

      sevas length=10
      no byte(8) offset=0
      이름 byte(10) offset=8
      수강과목 byte(2) offset=10

    • 용량 예시
      1. 데이터 베이스별 용량

        SELECT table_schema AS 'sevas',
        ROUND(SUM(data_length+index_length)/1024/1024, 1) AS 'Size(MB)'
        FROM information_schema.tables
        GROUP BY table_schema
        ORDER BY 2 DESC;
      2. 전체 용량조회

        SELECT ROUND(SUM(data_length+index_length)/1024/1024, 1) AS 'Used(MB)',
        ROUND(SUM(data_free)/1024/1024, 1) AS 'Free(MB)'
        FROM information_schema.tables;
      3. 테이블 별 용량 size 조회

        SELECT table_name AS 'sevas',
        ROUND(SUM(data_length+index_length)/(1024*1024), 2) AS 'All(MB)',
        ROUND(data_length/(1024*1024), 2) AS 'Data(MB)',
        ROUND(index_length/(1024*1024), 2) AS 'Index(MB)'
        FROM information_schema.tables
        GROUP BY table_name
        ORDER BY data_length DESC;
  • 보안을 위해서는 char (값과 별개로 크기가 같기에)- 아이디, 패스워드 .. / 주소→ varchar ..
  • DATABASE 구현
    1. 요구 사항 분석 (데이터 수집)
    2. 개념적 설계 ( 스키마를 만들기 위한 데이터 DB, TABLE로 구분) DB,TABLE 정의
    3. 논리적 설계 ( 스키마 속성을 정의 속성 int varchar 권한 ) field values 속성 값
    4. 물리적 설계 (논리적 설계를 사용한 스키마의 SQL구문 정의) alter modify
    5. 구현 (DBMS사용 ,SQL 쿼리문 구현)

DDL

  • DDL (data definition language) <생성 정의 삭제> - DB,table
    1. DB보기 show databases;

    2. DB 생성 (create) create database korea;

    3. DB 삭제 (drop) drop database korea2;

    4. DB 이동 (use) use korea
      5.정보 보기 \s

    5. table 확인 show tables;

    6. tables 생성

      MariaDB [korea]> create table class (
      -> id varchar(40),
      -> age int(2),
      -> atk int(2)
      -> );

    7. table 포멧 확인
      describe class;
      desc class;

    8. 테이블 삭제 drop table class2;


    • alter 재정의
      • 필드 삭제 alter table class drop id;
      • modify 타입 변경 alter table class modify age varchar(20);
      • change 필드명 & 타입변경 → 필드를 바꿀 때 타입도 같이 정의해줘야 함
        alter table class change age 나이 int(2), change atk 공격 int(2);
      • add 필드추가 및 고유값 추가 → after, first 만 사용 (before X)
        MariaDB [korea]> alter table class
        -> add 순번 int(10) first,
        -> add 이름 varchar(20) after 나이,
        -> add 방어 int(2);
    • 고유값 unique primary key index(검색속도) → 중복 쿼리 절대 나오면 안됨
      • DATABASE의 제약조건 4가지
        • primary key 고유값, 널 X (unique + not null) -> pk에는 권한을 줄 수 있음
        • unique key 고유값, 널 허용
        • not null 널X
        • foreigen key 외래키
    • 제약 조건 주는 방법
      alter table class add primary key(이름),add unique index (순번);
    • 고유 값 삭제
      • unique key drop index 순번 on class;
      • primary key alter table class drop primary key;
    • null 되돌리기 alter table class modify 이름 varchar(20) null;
    • no int unsigned: 음수를 양수로 바꿈(128 +128 => unsigned 256 (음수와 양수 범위를 정수범위로 만들어 버림))
    • auto_increment: 무결성을 위해 반드시 주기(오류 나면 제외하고 증가)
    • 고유값이 2개 필요할경우 -> 원래 pk는 index가 안되지만 index 먼저 선언시 pk를 같이 쓸 수 있음... 일반적으로 잘 쓰진 않음(보통 unique+not null에 index넣음)
      create table sevas3 (
      no int unsigned auto_increment,
      id varchar(20),
      name varchar(20) not null,
      class varchar(20) default 'student',
      address text not null,
      reg_date datetime,
      index (id),
      primary key(no,id));
    • primary
      • primary 값이 2개 나올 경우 2개의 필드를 모두 검사
      • primary 값 1개만 주기
      • primary key 삭제 alter table class drop primary key;
      • primary key 1개만 생성
      • primary key 는 내용이 없는 것도 값으로 인식. 필수로 들어가야 함
      • pk에는 인덱스를 붙일 수 없음
      • 여러 개의 unique 존재, 하나에 not null 넣을 시 → 걔가 pk가 됨
    • unique 여러 개를 묶을 경우 →multikey가 됨

DML

  • DML (데이터 수정 = 값 삽입) → TABLE
  • 문법 ( column = field )
  • 테이블 데이터 초기화 alter table class drop primary key; 값만 삭제
  • 빈칸 ( '' ) 도 하나의 값
  • insert (내용 추가)
    insert into [테이블명] (칼럼명,칼럼명) values ('값','값');
    - unique key 는 내용이 없으면 NULL 로 인식, 값을 안넣어도 됨
    - class 뒤에 칼럼 미 지정시 모든 칼럼 내용 삽입
    insert into class (이름,공격) values ('2','서영','21','8','6'); → 칼럼 수가 맞지 않아서 에러
    insert into class (이름,공격) values ('서영','8'); → 칼럼 수가 맞아야 입력
  • update (내용 수정)
    update [테이블] set 칼럼='값' where 칼럼 [연산] '값';
    - 비교 연산 update class set 공격='9' where 나이 >= 30;
    - 문자열 검색 update class set 방어='9' where 이름 like '영%';
    - 데이터 삭제 delete from class where 이름='korea';
  • select (확인)
    select * from class; 전체 내용 확인
    select 이름,나이 from class; 이름 나이만 확인
    select 이름,나이 from class where 이름='sevas'; sevas의 이름 나이 확인
    - 정렬
    select * from class order by 사번 desc; 내림차순
    select * from class order by 사번 asc; 오름차순
    - and or 필터링
    - 나이가 23 이고 방어 7 출력 (&& 가능)
    select * from class where 나이='23' and 방어='7';
    - 나이가 23이거나 방어 7인 내용 (|| 가능)
    select * from class where 나이='23' or 방어='7';
    - limit 2,2; -> (0부터 시작)3번째부터 2줄 출력
    - select 이름, 사번,나이 from class where 나이 like '%2%' && 공격>='60' order by 사번 asc limit 2,2;
    - 값 변조
    - select 이름, 사번, (나이+20) from class where 나이 like '%2%' && 공격>='60' order by 사번 asc limit 2,2;
    - select 이름, 사번, (나이+20) as 나이 from class where 나이 like '%2%' && 공격>='60' order by 사번 asc limit 2,2;
profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글

관련 채용 정보