스키마 데이터베이스


mysql은 다수의 스키마를 생성하여 관리를 할 수 있습니다. Connection 객체를 통하여 mysql 데이터베이스와 연결을 하게 되면, schema() 메소드를 통하여 스키마 객체와 관계를 설정할 수 있습니다.

// 설정값, 생성자 인자값으로 전달합니다.
$db = new \Jiny\Mysql\Connection($dbinfo);
$schemaObj = $db->schema();

schema() 메소드는 schema 클래스의 객체를 반환합니다.

소스코드 학습하기

list() : 스키마 목록


사용자 계정의 스키마 목록을 확인합니다.

예제코드: ./sample/schema/schema-01.php

<?php
require "../../loading.php"; // 오토로딩

// 데이터베이스 설정값
$dbinfo = \jiny\dbinfo();

// 설정값, 생성자 인자값으로 전달합니다.
$db = new \Jiny\Mysql\Connection($dbinfo);

// 테이블 구조
$rows = $db->schema()->list();
print_r($rows);

|출력결과|

$ php schema-01.php 
Array
(
    [0] => db2020
    [1] => information_schema
)


create() : 스키마 생성


create() 메소드는 새로운 스키마를 생성합니다. 인자값으로 생성할 스키마명을 전달하면 됩니다.

$name = "jinyshop";
// 스키마 생성
$db->schema()->create($name);

|예제코드| ./sample/schema/schema-02.php

<?php
require "../../loading.php"; // 오토로딩

// 데이터베이스 설정값
$dbinfo = \jiny\dbinfo();

// 설정값, 생성자 인자값으로 전달합니다.
$db = new \Jiny\Mysql\Connection($dbinfo);

// 스키마 생성
$name = "jinyshop";
// 스키마 생성
$db->schema()->create($name);

// 스키마 목록
$rows = $db->schema()->list();
print_r($rows);

하지만 위의 코드를 실행하면 다음과 같은 오류가 발생합니다.

$ php schema-02.php
PHP Fatal error:  Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'db2020'@'%' to database 'jinyshop' in E:\01.jiny\mysqlAdmin\vendor\jiny\mysql\src\Connection.php:131
Stack trace:
#0 E:\01.jiny\mysqlAdmin\vendor\jiny\mysql\src\Connection.php(131): PDO->query('create database...')
#1 E:\01.jiny\mysqlAdmin\vendor\jiny\mysql\src\Schema.php(28): Jiny\Mysql\Connection->query('create database...')
#2 E:\01.jiny\mysqlAdmin\vendor\jiny\mysql\sample\schema\schema-02.php(13): Jiny\Mysql\Schema->create('jinyshop')
#3 {main}
  thrown in E:\01.jiny\mysqlAdmin\vendor\jiny\mysql\src\Connection.php on line 131

새로운 스키마를 생성하기 위해서는 스키마 생성을 위한 접근 권한이 있어야 합니다. DB사용자 계정에 접근권한을 추가한 후에 코드를 다시 실행합니다.