CodeIgniter 用户指南 版本 2.2.6

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

数据库维护类

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

目录

初始化

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

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

$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)" .

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

$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