数据库维护类
该类包含了一些帮助你管理数据库的函数。
目录
初始化
注意: 欲初始化数据库维护类,请确保你的数据库驱动已经运行,因为该类依赖于数据库驱动。
使用如下方法载入数据库维护类:
$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