# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# 数据库维护类

该类包含了一些帮助你管理数据库的函数。

### 目录

- 初始化
- 创建数据库
- 删除数据库
- 添加字段
- 添加主键
- 创建表
- 删除表
- 重命名表
- 修改表

## 初始化

注意: 欲初始化数据库维护类，请确保你的数据库驱动已经运行，因为该类依赖于数据库驱动。

使用如下方法载入数据库维护类:

`$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 '数据库已经被创建!';
}`

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

允许你删除由第一个参数指定的数据库。根据成功或失败，返回 TRUE/FALSE:

`if ($this->dbforge->drop_database('my_db'))
{
echo '数据库已经被删除!';
}`

# 创建和删除表

创建表时有这么几件事需要你来完成。添加字段，添加主键和修改列。CodeIgniter提供如下方法完成这些操作。

## 添加字段

字段由关联数组创建。在数组中必须包含与字段数据类型相关的“类型”键。例如，INT,VARCHAR,TEXT等等。许多数据类型（如 VARCHAR）还需要“约束”键。

`$fields = array(
'users' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
);
// 当字段被添加后，将被翻译为 "users VARCHAR(100)" .`

此外，还可以使用下列键/值:

- unsigned/true: 在字段定义中生成“UNSIGNED”。
- default/value: 在字段定义中生成一个缺省值。
- null/true: 在字段定义中生成“NULL” 。没有这个，字段缺省为“NOT NULL”。
- auto_increment/true: 为字段生成自动增量标记。注意，字段类型必须支持自动增量标记，如整型。

`$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()

添加字段函数将接受上面这个数组。

### 传递字符串作为字段定义

如果你确切地知道自己要如何创建一个字段，你可以将字符串作为字段定义传递给 add_field():

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

说明: 多次调用 add_field() 是累加性的。

### 创建一个 id 字段

创建id字段有一种特殊的例外情况。一个id类型的字段将会被自动地赋值为 INT(9) 类型的自动递增主键。

`$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);
// 生成 PRIMARY KEY `blog_id` (`blog_id`)
$this->dbforge->add_key('blog_id', TRUE);
$this->dbforge->add_key('site_id', TRUE);
// 生成 PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)
$this->dbforge->add_key('blog_name');
// 生成 KEY `blog_name` (`blog_name`)
$this->dbforge->add_key(array('blog_name', 'blog_label'));
// 生成 KEY `blog_name_blog_label` (`blog_name`, `blog_label`)`

译者注：此处存在BUG!经验证，以上代码创建的是两个单独的非主键，而不是一个多列的非主键。有关此BUG的解决方案，详见CI中国论坛！

## 创建表

声明了字段和键之后，你就可以使用下面的方法来创建一个表:

`$this->dbforge->create_table('table_name');
// 生成 CREATE TABLE table_name`

可选的第二个参数如果被设置为TRUE，那么，表的定义中就会添加 "IF NOT EXISTS" 子句

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

## 删除表

执行一条 DROP TABLE 语句

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

## 重命名表

执行一次表重命名

`$this->dbforge->rename_table('old_table_name', 'new_table_name');
// 生成 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`

## $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);
// 生成 ALTER TABLE table_name CHANGE old_name new_name TEXT`

翻译贡献者: crazyfriday, Hex, ianyang, yeto, yinzhili, 笼中
最后修改: 2013-02-14 14:07:53