CodeIgniter User Guide Version 2.1.0


데이터베이스 관리 클래스 Database Forge Class

데이터베이스 관리클래스는 아래와 같이 데이터베이스를 관리하는데 도움이 되는 함수들을 포함하고있습니다

목차

관리 클래스 초기화 Initializing the Forge Class

중요: 관리클래스를 초기화 하기위해서는 데이터베이스 드라이버가 실행된 상태라야 합니다. 관리클래스는 데이터베이스 드라이버에 의존합니다.

관리클래스를 아래와같이 로드합니다:

$this->load->dbforge()

초기화 되고 나면 함수들을 사용할때$this->dbforge 객체를 이용합니다:

$this->dbforge->some_function()

$this->dbforge->create_database('db_name')

첫번째 파라미터에 정의한대로 데이터베이스를 생성합니다. 그리고 그 결과에 따라서 TRUE/FALSE 를 리턴합니다:

if ($this->dbforge->create_database('my_db'))
{
    echo 'Database created!';
}

$this->dbforge->drop_database('db_name')

첫번째 파라미터에 주어진 데이터베이스를 삭제합니다.그리고 그 결과에 따라서 TRUE/FALSE 를 리턴합니다:

if ($this->dbforge->drop_database('my_db'))
{
    echo 'Database deleted!';
}

테이블의 생성과 삭제 Creating and Dropping Tables

테이블을 생성할때 하고자 하는 일들이 몇가지 있을것입니다.필드추가,키추가,칼럼변경 등이 그것이죠. CodeIgniter는 이러한 작업에대한 메커니즘을 제공합니다.

필드 추가 Adding fields

필드는 연관배열을 통해 정의됩니다.배열에는 반드시 필드의 데이터타입에 대한 'type' 키가 존재해야합니다. 예를들어 , INT, VARCHAR, TEXT, 등 많은 데이터타입(for example VARCHAR) 과 제약('constraint') 키도 필요합니다.

$fields = array(
                        'users' => array(
                                                 'type' => 'VARCHAR',
                                                 'constraint' => '100',
                                          ),
                );

// "users VARCHAR(100)" 로 변환 됩니다

부가적으로, 다음의 키/값 쌍이 사용됩니다.:

$fields = array(
                        'blog_id' => array(
                                                 'type' => 'INT',
                                                 'constraint' => 5,
                                                 'unsigned' => TRUE,
                                                 'auto_increment' => TRUE
                                          ),
                        'blog_title' => array(
                                                 'type' => 'VARCHAR',
                                                 'constraint' => '100',
                                          ),
                        'blog_author' => array(
                                                 'type' =>'VARCHAR',
                                                 'constraint' => '100',
                                                 'default' => 'King of Town',
                                          ),
                        'blog_description' => array(
                                                 'type' => 'TEXT',
                                                 'null' => TRUE,
                                          ),
                );

필드정의가 완료된 후 $this->dbforge->add_field($fields); 를 호출하고 최종적으로 create_table() 을 호출하여 적용시킵니다.

$this->dbforge->add_field()

이함수가 위의 배열을 수용합니다.

Passing strings as fields

필드가 어떤형태로 생성되어야 하는지 정확히 알고 있다면 , add_field() 를 사용할때 문자열로 넘겨주어도 됩니다.

$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");

정보: add_field() 함수를 여러번 호출하면 그 결과는 누적됩니다.

아이디 필드 만들기 Creating an id field

아이디 필드를 만들때 특별한 예외가 있습니다. 아이디(id)타입의 필드는 자동으로 INT(9) 로 설정되며 자동증가되는 기본키(Primary Key)로 설정됩니다.

$this->dbforge->add_field('id');
// gives id INT(9) NOT NULL AUTO_INCREMENT

키 추가 Adding Keys

일반적으로 , 여러분은 테이블이 키를 가지고 있도록 만들것입니다. $this->dbforge->add_key('field')함수를 호출하시면 됩니다. 옵션으로 설정하는 두번째 파라미터를 TRUE로 하시면 기본키(primary key)가 될것입니다. 주의하실것은 add_key() 함수는 create_table() 함수 전에 실행되어야 한다는것입니다.

기본키가 아닌 여러칼럼들은 반드시 배열로 설정해야 합니다.아래는 MySql 에 대한 예제입니다.

$this->dbforge->add_key('blog_id', TRUE);
// gives PRIMARY KEY `blog_id` (`blog_id`)

$this->dbforge->add_key('blog_id', TRUE);
$this->dbforge->add_key('site_id', TRUE);
// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)

$this->dbforge->add_key('blog_name');
// gives KEY `blog_name` (`blog_name`)

$this->dbforge->add_key(array('blog_name', 'blog_label'));
// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)

테이블 생성 Creating a table

필드와 키들이 정의된후에 아래와 같이 새로운 테이블을 생성합니다.

$this->dbforge->create_table('table_name');
// gives CREATE TABLE table_name

옵션으로 제공되는 두번째 파라미터를 TRUE로 설정하면 "IF NOT EXISTS"절을 추가하게됩니다.

$this->dbforge->create_table('table_name', TRUE);
// gives CREATE TABLE IF NOT EXISTS table_name

테이블 삭제 Dropping a table

테이블삭제( DROP TABLE )쿼리를 실행합니다

$this->dbforge->drop_table('table_name');
// gives DROP TABLE IF EXISTS table_name

테이블 이름 변경Renaming a table

테이블 이름변경(TABLE rename) 쿼리를 실행합니다

$this->dbforge->rename_table('old_table_name', 'new_table_name');
// gives ALTER TABLE old_table_name RENAME TO new_table_name

테이블 수정 Modifying Tables

$this->dbforge->add_column()

add_column() 함수는 이미 존재하는 테이블을 수정하기 위해 사용합니다.이 함수는 위에서 설명한것과 같은 배열을 사용할수 있으며 , 필드의 개수의 제한없이 사용할 수 있습니다.

$fields = array(
                        'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $fields);

// gives ALTER TABLE table_name ADD preferences TEXT

$this->dbforge->drop_column()

테이블에서 칼럼을 제거하기위해 사용합니다.

$this->dbforge->drop_column('table_name', 'column_to_drop');

$this->dbforge->modify_column()

이 함수의 사용법은 add_column() 함수와 동일합니다만, 새로운 칼럼을 추가하는것이아니라 기존의 칼럼을 수정하는데 사용합니다. 칼럼 명을 수정하기 위해서는 배열에 "name" 키가 있어야합니다.

$fields = array(
                        'old_name' => array(
                                                         'name' => 'new_name',
                                                         'type' => 'TEXT',
                                                ),
);
$this->dbforge->modify_column('table_name', $fields);

// gives ALTER TABLE table_name CHANGE old_name new_name TEXT