이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Raspberry Pi와 Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560), WiFi 모듈을 사용 합니다.

mysql-phpMyAdmin-DB

MySQL - phpMyAdmin - Database
MySQL(MariaDB) - phpMyAdmin - Database 관리


  • 설명을 위한 Database 예(choSampleDB1)
    • 아래의 Database 예는 온라인 주문을 받을 수 있는 가장 간단한 예 이다.

    • choSampleDB1 DB Table 구성
      • choSampleDB1 다이어그램(Diagram)
      • choSampleDB1 DB는 아래 그림과 같이 4개의 테이블(productsTable, customersTable, ordersTable, orderdetailsTable)로 구성된다.

          choSampleDB1 다이어그램(Diagram)

        • productsTable은 제품코드(productCode), 제품이름(productName), 제품설명(productDescription), 재고량(quantityInStock), 구입단가(buyPrice), 판매단가(salePrice)로 구성되고 productCode를 Primary key로 사용한다.
        • customersTable은 고객번호(customerNo), 고객이름(name), 전화번호(phone), 주소(address)로 구성되고 customerNo를 Primary key로 사용하고 phone을 UNIQUE KEY로 설정하여 고객 인식번호로 사용한다.
        • ordersTable은 주문번호(orderNo), 주문날짜(orderDate), 발송일(shippedDate), 처리상태(status), 주석(comments), 고객번호(customerNo)로 구성되고 orderNo를 Primary key로 사용하고 customerNo을 Foreign key로 사용하여 존재하지 않는 고객은 등록 될 수 없도록 한다.
        • orderdetailsTable은 주문번호(orderNo), 제품번호(productCode), 주문량(quantityOrdered), 전체금액(totalPrice)로 구성되고 orderNo와 productCode를 Foreign key로 사용하여 존재하지 않는 주문과 제품은 등록 될 수 없도록 한다.
    • choSampleDB1 Table 만들기
      • phpMyAdmin 연결하기를 참고하여 phpMyAdmin을 MariaDB에 연결한다.

        phpMyAdmin을 이용하여 Database 만들기를 참고하여 choSampleDB1 Database와 Table을 만든다.

      • productsTable 만들기
      • "새 테이블 만들기" 창에서 "이름: "에 테이블 이름(productsTable)을 입력하고 "컬럼수: "에 6을 입력하고 "실행" 버튼을 클릭한다.

        productsTable 만들기 창 예

        • productCode: 이름 란에 productCode를 입력하고 종류는 VARCHAR로 선택한다. 길이/값을 16으로 선택한 다음 인텍스에서 PRIMARY를 선택하면 아래와 같이 "인텍스 추가" 창이 열린다. 이 창에서 "크기" 란을 선택하고(크기 값은 입력하면 안됨. 그러나 "크기" 란을 선택하지 않으면 "실행" 버튼을 실행 할 수 없음) "실행" 버튼을 클릭한다.
        • "인텍스(PRIMARY) 추가" 창 예

          위 결과 productCode는 PRIMARY Key(Table 내에 PRIMARY Key는 하나만 설정 하여야 하고, 중복되지 않는(유일한) 값만 갖을 수 있다.)로 설정되었다.

        • productName: 이름 란에 productName를 입력하고 종류는 VARCHAR로 선택하고 길이/값을 40으로 설정한다.
        • productDescription: 이름 란에 productDescription를 입력하고 종류는 TEXT로 선택한다.
        • quantityInStock: 이름 란에 quantityInStock를 입력하고 종류는 SMALLINT(Small integer)로 선택한다.
        • buyPrice: 이름 란에 buyPrice를 입력하고 종류는 DECIMAL(Decimal number: 10진수로 소수점을 갖는 숫자. 원화는 소수점 이하를 사용하지 않지만 달러는 소수점 이하 자릿수를 사용 함)로 선택하고 길이/값을 10으로 설정한다.
        • salePrice: 이름 란에 salePrice를 입력하고 종류는 DECIMAL로 선택하고 길이/값을 10으로 설정한다.
      • customersTable 만들기
        • "새 테이블 만들기" 창에서 "이름: "에 테이블 이름(customersTable)을 입력하고 "컬럼수: "에 4을 입력하고 "실행" 버튼을 클릭한다.

        • customerNo: 이름 란에 customerNo 입력하고 종류는 INT(Integer)로 선택, 인텍스에서 PRIMARY를 선택하면 아래와 같이 "인텍스 추가" 창이 열린다. 이 창에서 "크기" 란을 선택하고(크기 값은 입력하면 안됨. 그러나 "크기" 란을 선택하지 않으면 "실행" 버튼을 실행 할 수 없음) "실행" 버튼을 클릭한다. 추가로 A_I(AUTO_INCREMENT)박스를 선택 한다.
        • 위 결과 customerNo는 AUTO_INCREMENT(productCode의 값이 새로운 레코드를 입력하면 자동으로 1씩 증가)하는 PRIMARY Key로 설정되었다.

        • name: 이름 란에 name를 입력하고 종류는 VARCHAR로 선택하고 길이/값을 16으로 설정한다.
        • phone: 이름 란에 phone를 입력하고 종류는 VARCHAR로 선택하고 길이/값을 16으로 설정한다. 인텍스에서 UNIQUE를 선택하면 아래와 같이 "인텍스 추가" 창이 열린다. 이 창에서 "크기" 란을 선택하고(크기 값은 입력하면 안됨. 그러나 "크기" 란을 선택하지 않으면 "실행" 버튼을 실행 할 수 없음) "실행" 버튼을 클릭한다.
        • "인텍스(UNIQUE) 추가" 창 예

          UNIQUE Key는 Table 내에 여러 개(PRIMARY Key는 하나만 가능) 설정 할 수 있지만, 중복되지 않는(유일한) 값만 갖을 수 있다.

        • address: 이름 란에 address를 입력하고 종류는 VARCHAR로 선택하고 길이/값을 50으로 설정한다.
      • ordersTable 만들기
        • "새 테이블 만들기" 창에서 "이름: "에 테이블 이름(ordersTable)을 입력하고 "컬럼수: "에 6을 입력하고 "실행" 버튼을 클릭한다.

        • orderNo: 이름 란에 orderNo 입력하고 종류는 INT(Integer)로 선택, 인텍스에서 PRIMARY KEY(위 productCode를 PRIMARY KEY로 설정하는 예 참고 요)로 설정한다. 추가로 A_I(AUTO_INCREMENT)박스를 선택 한다.
        • orderDate: 이름 란에 orderDate를 입력하고 종류는 DATE로 선택한다.
        • shippedDate: 이름 란에 shippedDate를 입력하고 종류는 DATE로 선택한다.
        • status: 이름 란에 status를 입력하고 종류는 VARCHAR로 선택하고 길이/값을 20으로 설정하고 "NULL" Box를 체크(DEFAULT NULL로 설정)한다.
        • comments: 이름 란에 comments를 입력하고 종류는 TEXT로 선택한다.
        • customerNo: 이름 란에 customerNo 입력하고 종류는 INT로 선택한다.
        • "저장 버튼을 클릭하여 Table을 저장한다.
        • customerNo를 FOREIGN KEY로 설정하기
          • customerNo는 customersTable의 PRIMARY Key로 고객의 고유한 식별번호 이다. ordersTable의 고객번호에 customersTable에 없는 고객번호가 입력되는 것을 방지하기 위하여 ordersTable의 customerNo를 FOREIGN KEY(customersTable에 없는 고객번호는 ordersTable의 customerNo에 저장 할 수 없도록 설정)로 설정한다.

          • ordersTable 선택 -> 구조를 선택하고 customerNo를 선택(Box 체크)한 다음 "릴레이션 뷰"를 클릭하면 외래키 제약 창이 열린다.
          • "Constraint name"에 적당한 이름(예: orders_FK_1)을 입력하고 "ON DELETE" 시 동작(예: CASCADE)을 선택, "ON UPDATE" 시 동작(예: CASCADE)을 선택한다.
          • "컬럼명"에서 customerNo를 선택, "테이블"에서 customersTable를 선택하고 테이블 "컬럼명"에서 customerNo를 선택한 다음 저장을 클릭한다.
          • "외래키(FOREIGN KEY) 제약" 창 예

      • orderdetailsTable
        • "새 테이블 만들기" 창에서 "이름: "에 테이블 이름(orderdetailsTable)을 입력하고 "컬럼수: "에 4을 입력하고 "실행" 버튼을 클릭한다.

        • orderNo: 이름 란에 orderNo 입력하고 종류는 INT(Integer)로 선택한다.
        • productCode: 이름 란에 productCode를 입력하고 종류는 VARCHAR로 선택하고 길이/값을 16으로 설정한다.
        • quantityOrdered: 이름 란에 quantityOrdered 입력하고 종류는 INT(Integer)로 선택한다.
        • totalPrice: 이름 란에 totalPrice를 입력하고 종류는 DECIMAL로 선택하고 길이/값을 10으로 설정한다.
        • "저장 버튼을 클릭하여 Table을 저장한다.
        • 위 "customerNo를 FOREIGN KEY로 설정하기"를 참고하여 orderNo를 FOREIGN KEY로 설정한다.
        • 위 "customerNo를 FOREIGN KEY로 설정하기"를 참고하여 productCode를 FOREIGN KEY로 설정한다.
      • 위와 같이 Table을 만들고 "데이터베이스 내보내기"에 의하여 생성된 SQL File 예
        • choSampleDB1.sql Text file: choSampleDB1_sql.txt

          choSampleDB1.sql zip file: choSampleDB1_sql.zip

          choSampleDB1_sql.zip File을 다운로드 한 다음, phpMyAdmin 데이터베이스 "가져오기" 기능을 이용하여 데이터베이스를 생성 할 수 있다.

          "테이터베이스 내보내기"에 의하여 생성된 SQL File을 읽고 완전히 이해하면 이 SQL File을 편집하여 이제 까지 phpMyAdmin Tool를 사용하여 실행한 Table 만들기와 컬럼(Column) 속성 설정 등, 대부분의 작업을 직접 할 수도 있다.

    • choSampleDB1 Table에 데이터 입력하기
      • 완전한 데이터베이스 예를 만들기 위하여는 위에서 생성한 데이터베이스에 실제 데이터 예를 입력하여야 한다.

        데이터베이스 예를 위하여 실제 데이터를 입력하는 순서는 Table의 종속성을 고려하여야 한다.

        choSampleDB1에서 productsTable과 customersTable은 다른 Table의 데이터의 존재 여부와 관계 없이 입력 할 수 있기 때문에 먼저 작성 한다. ordersTable은 customersTable의 customerNo를 사용(종속됨)하기 때문에 다음에 작성 한다. orderdetailsTable은 ordersTable의 orderNo와 productsTable의 productCode를 필요로 하기 때문에 가장 늦게 데이터를 입력한다.

      • productsTable에 데이터 입력하기
        • choSampleDB1 데이터베이스를 선택하면 Table 리스트가 출력된다.
        • Table 리스트에서 productsTable의 "삽입"을 클릭하면 아래와 같은 데이터 입력 창이 열린다. 이 창에 위에있는 choSampleDB1_sql.txt의 내용을 참고하여 필요한 데이터를 입력하고 "실행" 버튼을 클릭한다.
        • productsTable에 데이터를 입력하는 창 예

      • customersTable에 데이터 입력하기
        • Table 리스트에서 customersTable의 "삽입"을 클릭하면 아래와 같은 데이터 입력 창이 열린다. 이 창에 위에있는 choSampleDB1_sql.txt의 내용을 참고하여 필요한 데이터를 입력하고 "실행" 버튼을 클릭한다.
        • customersTable에 데이터를 입력하는 창 예

          customerNo는 AUTO_INCREMENT 되는 PRIMARY Key로 설정되어 있다. 이 경우 새로운 레코드가 삽입되면 자동으로 1씩 증가있기 때문에 입력하지 않는다.

      • ordersTable에 데이터 입력하기
        • Table 리스트에서 ordersTable의 "삽입"을 클릭하면 아래와 같은 데이터 입력 창이 열린다. 이 창에 위에있는 choSampleDB1_sql.txt의 내용을 참고하여 필요한 데이터를 입력하고 "실행" 버튼을 클릭한다.
        • ordersTable에 데이터를 입력하는 창 예

          orderNo는 AUTO_INCREMENT 되는 PRIMARY Key로 설정되어 있다. 이 경우 새로운 레코드가 삽입되면 자동으로 1씩 증가있기 때문에 입력하지 않는다.

      • orderdetailsTable에 데이터 입력하기
        • Table 리스트에서 orderdetailsTable의 "삽입"을 클릭하면 아래와 같은 데이터 입력 창이 열린다. 이 창에 위에있는 choSampleDB1_sql.txt의 내용을 참고하여 필요한 데이터를 입력하고 "실행" 버튼을 클릭한다.
        • orderdetailsTable에 데이터를 입력하는 창 예

          orderdetailsTable의 orderNo와 productCode는 FOREIGN Key로 설정되어 있다. 이 경우 orderNo는 ordersTable에 입력된 값 중에서 선택하고, productCode는 productsTable에 입력된 값 중에서 선택하여야 한다.

          totalPrice는 주문량(quantityOrdered)과 판매 가격(salePrice)의 곱셈으로 결정되기 때문에 임시로 계산 결과를 입력(나중에 프로그램으로 처리하는 방법을 제시함)한다.

      이제 데이터베이스 예를 만들었기 때문에 이 데이터베이스를 이용하여 다른 기능을 실습 할 수 있다.


  • Database 백업과 복구하기
    • phpMyAdmin 연결하기를 참고하여 phpMyAdmin을 MariaDB에 연결한다.

    • Database 백업(내보내기)하기
      • "서버 -> 데이터베이스 -> 내보내기"를 선택하면 "현재 서버에서 데이터베이스를 내보내기" 창이 열린다.
      • "내보내기 방법: "에서 "커스텀 - 모든 옵션을 표시함"을 선택한다.
      • "데이터베이스: "에서 내보내기 할 데이터베이스를 선택한다. 이 예에서는 choSampleDB1을 선택한다.
      • "객체 생성 옵션"에서 "DROP DATABASE IF EXISTS 구문 추가"와 "DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER 구문 추가"를 추가로 선택한다. 기타 옵션은 변경하지 않는다.
      • "실행" 버튼을 클릭하면 저장 할 폴더를 설정하고 파일이름을 입력하는 창이 열린다. 이 창에서 폴더 설정과 파일이름을 입력하고 "저장" 버튼을 클릭한다.
      • 저장된 SQL 파일은 데이터베이스를 다시 복원하는 데이터베이스 "가져오기"에 사용할 수 있다.

    • Database 복구(가져오기)하기
      • "서버 -> 데이터베이스 -> 가져오기"를 선택하면 "현재 서버로 가져오기" 창이 열린다.
      • "가져올 파일: -> 업로드 파일:"에서 가져올 데이터베이스를 선택한다. 이 예에서는 위에서 저장한 choSampleDB1을 선택한다.
      • "실행" 버튼을 클릭하면 "데이터베이스 가져오기" 가 실행된다.