Database Forge 클래스¶
Database Forge 클래스는 데이터베이스를 관리하는 데 도움이 되는 메소드를 포함하고 있습니다.
Forge 클래스 초기화¶
중요
Forge 클래스를 초기화하려면 데이터베이스 드라이버가 이미 실행 중이어야 합니다. Forge 클래스가 이에 의존하기 때문입니다.
Forge 클래스는 다음과 같이 로드합니다:
$this->load->dbforge()
관리하려는 데이터베이스가 기본 데이터베이스가 아닌 경우 DB Forge 로더에 다른 데이터베이스 오브젝트를 전달할 수도 있습니다:
$this->myforge = $this->load->dbforge($this->other_db, TRUE);
위의 예에서 커스텀 데이터베이스 오브젝트를 첫 번째 매개변수로 전달하고 dbforge
오브젝트를 $this->dbforge에 직접 할당하는 대신 반환하도록 합니다.
참고
두 매개변수 모두 개별적으로 사용할 수 있습니다. 건너뛰려면 첫 번째 매개변수에 빈 값을 전달하세요.
초기화되면 $this->dbforge 오브젝트를 사용하여 메소드에 접근합니다:
$this->dbforge->some_method();
데이터베이스 만들기 및 삭제¶
$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!';
}
테이블 만들기 및 삭제¶
테이블을 만들 때 필드 추가, 키 추가, 열 변경 등 여러 작업을 수행할 수 있습니다. CodeIgniter는 이를 위한 메커니즘을 제공합니다.
필드 추가¶
필드는 연관 배열을 통해 만들어집니다. 배열 내에 필드의 데이터 유형과 관련된 ‘type’ 키를 포함해야 합니다. 예를 들어 INT, VARCHAR, TEXT 등입니다. 많은 데이터 유형(예: VARCHAR)은 ‘constraint’ 키도 필요합니다.
$fields = array(
'users' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
);
// 필드가 추가될 때 "users VARCHAR(100)"으로 변환됩니다.
또한 다음 키/값을 사용할 수 있습니다:
unsigned/true : 필드 정의에 “UNSIGNED”를 생성합니다.
default/value : 필드 정의에 기본값을 생성합니다.
null/true : 필드 정의에 “NULL”을 생성합니다. 이 설정 없이는 필드가 기본적으로 “NOT NULL”이 됩니다.
auto_increment/true : 필드에 auto_increment 플래그를 생성합니다. 필드 유형이 integer와 같이 이를 지원하는 유형이어야 합니다.
unique/true : 필드 정의에 유니크 키를 생성합니다.
$fields = array(
'blog_id' => array(
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'blog_title' => array(
'type' => 'VARCHAR',
'constraint' => '100',
'unique' => TRUE,
),
'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()
add fields 메소드는 위의 배열을 허용합니다.
문자열을 필드로 전달¶
필드를 어떻게 만들어야 하는지 정확히 안다면 add_field()를 사용하여 문자열을 필드 정의에 전달할 수 있습니다:
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
참고
원시 문자열을 필드로 전달한 후 해당 필드에 add_key() 호출을 이어서
할 수 없습니다.
참고
add_field()에 대한 여러 호출은 누적됩니다.
id 필드 만들기¶
id 필드 만들기에는 특별한 예외가 있습니다. type이 id인 필드는 자동으로 INT(9) auto_incrementing Primary Key로 지정됩니다.
$this->dbforge->add_field('id');
// id INT(9) NOT NULL AUTO_INCREMENT을 제공합니다
키 추가¶
일반적으로 테이블에 키가 있어야 합니다. 이는 $this->dbforge->add_key(‘field’)로 수행됩니다. TRUE로 설정된 선택적 두 번째 매개변수는 기본 키로 만듭니다. 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`)
테이블 만들기¶
필드와 키가 선언된 후 다음과 같이 새 테이블을 만들 수 있습니다:
$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
MySQL의 ENGINE과 같은 선택적 테이블 속성을 전달할 수도 있습니다:
$attributes = array('ENGINE' => 'InnoDB');
$this->dbforge->create_table('table_name', FALSE, $attributes);
// 결과: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
참고
CHARACTER SET과/또는 COLLATE 속성을 지정하지 않으면
create_table()은 비어있지 않은 경우 구성된 char_set과 dbcollat
값으로 항상 추가합니다 (MySQL만 해당).
테이블 삭제¶
DROP TABLE 문을 실행하고 선택적으로 IF EXISTS 절을 추가합니다.
// 결과: DROP TABLE table_name
$this->dbforge->drop_table('table_name');
// 결과: DROP TABLE IF EXISTS table_name
$this->dbforge->drop_table('table_name',TRUE);
테이블 이름 변경¶
테이블 이름 변경을 실행합니다:
$this->dbforge->rename_table('old_table_name', 'new_table_name');
// gives ALTER TABLE old_table_name RENAME TO new_table_name
테이블 수정¶
테이블에 열 추가¶
$this->dbforge->add_column()
add_column() 메소드는 기존 테이블을 수정하는 데 사용됩니다. 위와 동일한 필드
배열을 허용하며, 추가 필드 수에 제한 없이 사용할 수 있습니다.
$fields = array(
'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $fields);
// 실행: ALTER TABLE table_name ADD preferences TEXT
MySQL 또는 CUBIRD를 사용하는 경우 AFTER 및 FIRST 절을 활용하여 새 열의 위치를 지정할 수 있습니다.
예시:
// `another_field` 열 뒤에 새 열을 배치합니다:
$fields = array(
'preferences' => array('type' => 'TEXT', 'after' => 'another_field')
);
// 테이블 정의 시작 부분에 새 열을 배치합니다:
$fields = array(
'preferences' => array('type' => 'TEXT', 'first' => TRUE)
);
테이블에서 열 삭제¶
$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
클래스 레퍼런스¶
- class CI_DB_forge¶
- add_column($table[, $field = array()])¶
- 매개변수:
$table (
string) – 열을 추가할 테이블 이름$field (
array) – 열 정의
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
테이블에 열을 추가합니다. 사용법: 테이블에 열 추가 참조.
- add_field($field)¶
- 매개변수:
$field (
array) – 추가할 필드 정의
- 반환:
CI_DB_forge 인스턴스 (메소드 체이닝)
- 반환 형식:
테이블을 만드는 데 사용될 세트에 필드를 추가합니다. 사용법: 필드 추가 참조.
- add_key($key[, $primary = FALSE])¶
- 매개변수:
$key (
array) – 키 필드 이름$primary (
bool) – 기본 키 또는 일반 키로 설정할 경우 TRUE
- 반환:
CI_DB_forge 인스턴스 (메소드 체이닝)
- 반환 형식:
테이블을 만드는 데 사용될 세트에 키를 추가합니다. 사용법: 키 추가 참조.
- create_database($db_name)¶
- 매개변수:
$db_name (
string) – 만들 데이터베이스 이름
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
새 데이터베이스를 만듭니다. 사용법: 데이터베이스 만들기 및 삭제 참조.
- create_table($table[, $if_not_exists = FALSE[, array $attributes = array()]])¶
- 매개변수:
$table (
string) – 만들 테이블 이름$if_not_exists (
string) – ‘IF NOT EXISTS’ 절을 추가하려면 TRUE$attributes (
string) – 테이블 속성의 연관 배열
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
새 테이블을 만듭니다. 사용법: 테이블 만들기 참조.
- drop_column($table, $column_name)¶
- 매개변수:
$table (
string) – 테이블 이름$column_name (
string) – 삭제할 열 이름
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
테이블에서 열을 삭제합니다. 사용법: 테이블에서 열 삭제 참조.
- drop_database($db_name)¶
- 매개변수:
$db_name (
string) – 삭제할 데이터베이스 이름
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
데이터베이스를 삭제합니다. 사용법: 데이터베이스 만들기 및 삭제 참조.
- drop_table($table_name[, $if_exists = FALSE])¶
- 매개변수:
$table (
string) – 삭제할 테이블 이름$if_exists (
string) – ‘IF EXISTS’ 절을 추가하려면 TRUE
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
테이블을 삭제합니다. 사용법: 테이블 삭제 참조.