數(shù)據(jù)庫維護(hù)類
該類包含了一些幫助你管理數(shù)據(jù)庫的函數(shù)。
目錄
- 初始化
- 創(chuàng)建數(shù)據(jù)庫
- 刪除數(shù)據(jù)庫
- 添加字段
- 添加主鍵
- 創(chuàng)建表
- 刪除表
- 重命名表
- 修改表
初始化
注意:? 欲初始化數(shù)據(jù)庫維護(hù)類,請確保你的數(shù)據(jù)庫驅(qū)動已經(jīng)運(yùn)行,因為該類依賴于數(shù)據(jù)庫驅(qū)動。
使用如下方法載入數(shù)據(jù)庫維護(hù)類:
$this->load->dbforge()
一旦初始化,就可以使用$this->dbforge 對象訪問類中函數(shù):
$this->dbforge->some_function()
$this->dbforge->create_database('db_name')
允許你創(chuàng)建由第一個參數(shù)指定的數(shù)據(jù)庫。根據(jù)成功或失敗,返回 TRUE/FALSE:
if ($this->dbforge->create_database('my_db'))
{
??? echo '數(shù)據(jù)庫已經(jīng)被創(chuàng)建!';
}
$this->dbforge->drop_database('db_name')
允許你刪除由第一個參數(shù)指定的數(shù)據(jù)庫。根據(jù)成功或失敗,返回 TRUE/FALSE:
if ($this->dbforge->drop_database('my_db'))
{
??? echo '數(shù)據(jù)庫已經(jīng)被刪除!';
}
創(chuàng)建和刪除表
創(chuàng)建表時有這么幾件事需要你來完成。添加字段,添加主鍵和修改列。CodeIgniter提供如下方法完成這些操作。
添加字段
字段由關(guān)聯(lián)數(shù)組創(chuàng)建。在數(shù)組中必須包含與字段數(shù)據(jù)類型相關(guān)的“類型”鍵。例如,INT,VARCHAR,TEXT等等。許多數(shù)據(jù)類型(如 VARCHAR)還需要“約束”鍵。
$fields = array(
????????????????????????'users' => array(
?????????????????????????????????????????????????'type' => 'VARCHAR',
?????????????????????????????????????????????????'constraint' => '100',
??????????????????????????????????????????),
????????????????);
// 當(dāng)字段被添加后,將被翻譯為 "users VARCHAR(100)" .
此外,還可以使用下列鍵/值:
- unsigned/true:?在字段定義中生成“UNSIGNED”。
- default/value:?在字段定義中生成一個缺省值。
- null/true:?在字段定義中生成“NULL” 。沒有這個,字段缺省為“NOT NULL”。
- auto_increment/tue:?為字段生成自動增量標(biāo)記。注意,字段類型必須支持自動增量標(biāo)記,如整型。
$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); 添加字段。接下來調(diào)用 create_table() 函數(shù)創(chuàng)建表。
$this->dbforge->add_field()
添加字段函數(shù)將接受上面這個數(shù)組。
傳遞字符串作為字段定義
如果你確切地知道自己要如何創(chuàng)建一個字段,你可以將字符串作為字段定義傳遞給 add_field():
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
說明: 多次調(diào)用 add_field() 是累加性的。
創(chuàng)建一個 id 字段
創(chuàng)建id字段有一種特殊的例外情況。一個id類型的字段將會被自動地賦值為 INT(9) 類型的自動遞增主鍵。
$this->dbforge->add_field('id');
// 生成 id INT(9) NOT NULL AUTO_INCREMENT
添加鍵
一般來說,你會需要表中有鍵。這是通過 $this->dbforge->add_key('field') 來實現(xiàn)的??蛇x的第二個參數(shù)如果被設(shè)置為TRUE,那么就會生成一個主鍵。請注意 add_key() 后面必須調(diào)用 create_table()。
多列的非主鍵必須通過數(shù)組來傳遞。下面的示例輸出是用于 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`)
創(chuàng)建表
聲明了字段和鍵之后,你就可以使用下面的方法來創(chuàng)建一個表:
$this->dbforge->create_table('table_name');
// 生成 CREATE TABLE table_name
可選的第二個參數(shù)如果被設(shè)置為TRUE,那么,表的定義中就會添加 "IF NOT EXISTS" 子句
$this->dbforge->create_table('table_name', TRUE);
// 生成 CREATE TABLE IF NOT EXISTS table_name
刪除表
執(zhí)行一條 DROP TABLE 語句
$this->dbforge->drop_table('table_name');
// 生成 DROP TABLE IF EXISTS table_name
重命名表
執(zhí)行一次表重命名
$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() 函數(shù)用來修改已經(jīng)存在的表,并添加一個或多個字段。 它接受與上面相同的數(shù)組參數(shù),并可用于無限數(shù)量的附加字段。
$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()
本函數(shù)的用法與 add_column() 幾乎完全相同,唯一的區(qū)別在于,本函數(shù)的用途是修改一個已存在的列,而不是添加一個新的。要重命名的話,你可以在字段定義數(shù)組中添加一個 "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
?
?