MySQL 입문 (1)

tahn·2022년 7월 4일
0

MySQL

목록 보기
1/1
post-thumbnail

레퍼런스 : 생활코딩 MySQL

목표 : MySQL 의 작동 방법 및 쿼리문 문법 습득

  • 데이터 베이스란?
    • 데이터를 구조화 하여 정렬한 것

    • 데이터를 구조화 하면 정렬(sort), 탐색(search)에 유리

      쿼리문 예시

      INSERT INFO FAVORITE VALUES('꿈', '조용필', '4:47', 'The Dream');
  • MySQL
    • 관계형 데이터베이스

      • mysql, oracle, mssql
    • nosql
      - mongodb
      - http://nosql-database.org/

      데이터 베이스의 종류에는 관계형 데이터베이스와 noSQL으로 나뉜다.

      여기서 mysql은 관계형 데이터 베이스이다.

      여기서 nosql은 관계형 데이터 베이스에서 처리 불가능한 데이터 (예: 페이스북, 인스타 같은 곳에서 사용되는 데이터)를 처리하기 위해 나온 방식이다.

      테이블 → 데이터베이스 → 데이터베이스 서버

      ≠ 여기서 데이터베이스는 데이터베이스 시스템과 다름

      테이블에는 로우컬럼이 있고,

      컬럼은 데이터 타입이,

      로우에는 데이터 그룹이 위치하며,

      구체적인 데이터를 레코드 라고 하며,

      각각의 교차점에 있는걸 필드 라고 한다.

    • 쿼리문 예시

      mysql -uroot -p
      // 로그인
      
      show databases
      //database list 보여줌
      
      use music
      // 뮤직이라는 테이블로 접근 -> 데이타 베이스 바뀜
      
      show tables
      // 뮤직이라는 테이블 안에 내용을 보여줌
      
      select * from favorite_music
      // 테이블 안 내용을 행과 열로 보여줌
      
  • 클라이언트
    • 클라이언트 목록

      ## **mysql-monitor**
      
      mysql -u아이디 -p비밀번호
      
      ## **mysql query browser**
      
      [http://dev.mysql.com/downloads/gui-tools/5.0.html](http://dev.mysql.com/downloads/gui-tools/5.0.html)
      
      ## **phpMyAdmin**
      
      [http://www.phpmyadmin.net/home_page/index.php](http://www.phpmyadmin.net/home_page/index.php)
      
      ## **올챙이**
      
      [https://sites.google.com/site/tadpolefordb/](https://sites.google.com/site/tadpolefordb/)
      
      ## **TOAD**
      
      [http://www.quest.com/toad-for-mysql/](http://www.quest.com/toad-for-mysql/) (무료)
      
      ## **navicat**
      
      [http://www.navicat.com/](http://www.navicat.com/) (유료)

      그 중 저는 mysql monitor 가 필요해서 이 프로그램만 공부했습니다.

      사용법

      `mysql **-u**아이디 **-p**비밀번호`
      
      `mysql **-h**호스트주소 **-p**포트번호 **-u**아이디 **-p**비밀번호`

      데이터베이스 생성

      **CREATE** **DATABASE** music **CHARACTER** **SET** utf8 **COLLATE** utf8_general_ci;

      데이터베이스 선택

      use music;

      테이블 생성

      **`CREATE`** **`TABLE`** ``favorite_music` (`
      
      ``title` **varchar**(255) NOT` `NULL,`
      
      ``musician` **varchar**(20) NOT` `NULL,`
      
      ``duration` **varchar**(20) NOT` `NULL,`
      
      ``album` **varchar**(30) NOT` `NULL`
      
      `) ENGINE=innodb;`

      테이블에 데이터 추가

      **insert** **into** favorite_music (`title`,`musician`, `duration`, `album`) **values**('Chasing Pavements', '아델', '3:30', 19);

      입력된 데이터 조회

      **select** * **from** favorite_music;

      종료

      mysql> exit;
  • 데이터 관리 - SQL (CRUD)

    SQL

    Structured Query Language, 데이터베이스에서 데이터를 저장하거나 얻기 위해서 사용하는 표준화된 언어.

    자료

    • mysql 공식 메뉴얼

    • mysql 한글 메뉴얼

    • w3school

    • cheatsheet (헷갈리거나 잊어버리기 쉬운 명령어들 모음)

    • 데이터베이스 사랑넷

    • udemy

      Database

      생성

      CREATE DATABASE `데이터베이스명` CHARACTER SET utf8 COLLATE utf8_general_ci;

      삭제

      DROP DATABASE `데이터베이스명`;

      열람

      SHOW DATABASES;

      선택

      USE `데이터베이스명`
      // 쉘에서 cd 를 이용해 폴더 안으로 들어가는것과 같음

      Table

      Databaes 가 폴더라면 Table은 파일

      스키마(schema)

      테이블에 적재될 데이터의 구조와 형식을 정의하는것

      테이블 생성

      CREATE TABLE table_name (
          칼럼명1 data_type,
          칼럼명2 data_type
      )
      CREATE TABLE `student` (
          `id`  tinyint NOT NULL ,
          `name`  char(4) NOT NULL ,
          `sex`  enum('남자','여자'),
          `address`  varchar(50) NOT NULL ,
          `birthday`  datetime, 
          PRIMARY KEY (`id`)
      );
      
      insert into student values (1, "asdas", "skawk", "asdsad", "asdsad");

      **테이블 리스트**

      SHOW tables;

      **테이블 스키마 열람**

      DESC `테이블명`

      테이블 제거

      DROP TABLE `테이블명`

      데이터 타입

      데이터 조회

      SELECT column1, column2, ... from table_name;
      
      SELECT * from table_name where id = 1;
      
      예제
      SELECT * FROM student where name = "younghee";
      
      SELECT student.name, grade.grade FROM student, grade where student.id = grade.student_id;

      삽입

      INSERT INTO table_name VALUES (value1, value2, value3,...)
      
      INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
      
      예제
      INSERT INTO `student` VALUES ('2', 'leezche', '여자', '서울', '2000-10-26');
      
      INSERT INTO `student` (`id`, `name`, `sex`, `address`, `birthday`) VALUES ('1', 'egoing', '남자', 'seoul', '2000-11-16');

      변경

      UPDATE 테이블명 SET 컬럼1=컬럼1의 값, 컬럼2=컬럼2의 값 WHERE 대상이 될 컬럼명=컬럼의 값
      
      예제
      DROP TABLE IF EXISTS `student`;
      CREATE TABLE `student` (
        `id` tinyint(4) NOT NULL,
        `name` char(4) NOT NULL,
        `sex` enum('남자','여자') NOT NULL,
        `address` varchar(50) NOT NULL,
        `birthday` datetime NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
       
      INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00'); 
      INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
      INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
      INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
      INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
      INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
      INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');
      
      UPDATE `student` SET address='서울';
      
      UPDATE `student` SET name='이진경' WHERE id=1;
      
      UPDATE `student` SET name='이고잉', birthday='2001-4-1' WHERE id=3;

      ALTER

      테이블 스키마를 변경

      삭제

      DELETE FROM 테이블명 [WHERE 삭제하려는 칼럼 명=]
      
      예제
      DROP TABLE IF EXISTS `student`;
      CREATE TABLE `student` (
        `id` tinyint(4) NOT NULL,
        `name` char(4) NOT NULL,
        `sex` enum('남자','여자') NOT NULL,
        `address` varchar(50) NOT NULL,
        `birthday` datetime NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
        
      INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00');
      INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
      INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
      INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
      INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
      INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
      INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');
      
      DELETE FROM student WHERE id = 2;

      DROP TABLE

      테이블을 삭제한다.

      DROP TABLE 테이블명;

      조회

      SELECT 칼럼명1, 칼럼명2 
          [FROM 테이블명 ] 
          [GROUP BY 칼럼명] 
          [ORDER BY 칼럼명 [ASC | DESC]] 
          [LIMIT offset, 조회 할 행의 수]
      
      예제
      DROP TABLE IF EXISTS `student`;
      CREATE TABLE `student` (
        `id` tinyint(4) NOT NULL,
        `name` char(4) NOT NULL,
        `sex` enum('남자','여자') NOT NULL,
        `address` varchar(50) NOT NULL,
        `birthday` datetime NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
       
      INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
      INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00');
      INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
      INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
      INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
      INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
      INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');
      
      SELECT * FROM student;
      
      SELECT name, birthday FROM student;
      
      SELECT * FROM student WHERE id=3;
      
      SELECT * FROM student WHERE sex='남자' AND address='서울';
      
      SELECT * FROM student WHERE sex='여자' OR address='서울';
      
      SELECT * FROM student LIMIT 1;
      
      SELECT * FROM student LIMIT 1,1;
      SELECT * FROM student LIMIT 2,1;
      SELECT * FROM student LIMIT 3,1;
      
      SELECT * FROM student WHERE sex='남자' LIMIT 2;
  • DB테이블 제약 조건(PK, FK,UK)

    제약조건

    • 테이블 단위에서 데이터의 무결성을 보장하는 규칙

    • 데이터, 테이블 수정 작업의 경우 잘못된 트랜젝션 수행을 방지하는 역할

    • 테이블 간 제약조건이 있어서 종속성이 있는 경우 테이블 삭제 방지

      PK(Primary Key)

    • 주 식별자키로 테이블의 모든 데이터를 식별하는 컬럼

    • 중복 불가, NULL 불가

    • 함수적 종속 관계

    • 테이블 생성시 단 한개의 PK 설정

    • 고유 인덱스 자동 생성

    • PK 지정 가능한 컬럼이 여러 개 있을 경우, 많이 사용되고 간단한 컬럼 선택

      FK(Foreign Key)

    • 외부 식별자키로 테이블 간의 관계 의미

    • 두 테이블 간의 종속이 필요한 관계이면 그 접점이 되는 칼럼을 FK로 지정하여 서로 참조할수 있도록 관계를 맺어준다.

    • 테이블간 잘못된 매핑을 방지하는 역할

    • FK 선언한 테이블이 하위 테이블이다.

    • 참조하는 테이블은 부모 테이블이다.

    • 상위 테이블, 참조할 컬럼이 존재 필요

    • 참조가 되면 해당 상위 테이블과 데이터 삭제/변경 불가

    • 삭제 가능한 경우 : 참조되는 상위 테이블 행에 대한 delete 허용 (상위, 하위 같이 삭제)

    • 참조하는 컬럼 데이터 타입(자료형) 일치

    • 참조되는 컬럼은 PK, UK만 가능

      UK(Unizue Key)

    • 고유키

    • 중복된 값을 허용하지만 여러개 NULL 값은 허용

    • 고유 인덱스 자동 생성

      NOT NULL

    • 테이블 레벨 정의 불가(컬럼 정의 시 끝에 NOT NULL 조건 추가)

    • 지정된 컬럼은 NULL 값 입력 불가

    • 가능한 모든 컬럼에 NULL 허용하지 않게 NOT NULL 설정하는게 좋음

      Check 설정

    • 행에 입력될 데이터의 조건을 정의

    • 조건은 where 절 기술하는 조건 형식과 동일

    • 해당 컬럼에 대해서 데이터가 insert 될 때 조건과 틀리게 insert 되면 ORA-02290 체크조건 오류가 발생된다.

  • 사용자 관리
  • 프로그래밍과 연동
  • 문제해결
profile
html 개발자

0개의 댓글