W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
數(shù)據(jù)庫工廠類提供了一些方法來幫助你管理你的數(shù)據(jù)庫。
Table of Contents
重要
由于數(shù)據(jù)庫工廠類依賴于數(shù)據(jù)庫驅(qū)動器,為了初始化該類,你的數(shù)據(jù)庫驅(qū)動器必須已經(jīng)運(yùn)行。
加載數(shù)據(jù)庫工廠類的代碼如下:
$this->load->dbforge()
如果你想管理的不是你正在使用的數(shù)據(jù)庫,你還可以傳另一個(gè)數(shù)據(jù)庫對象到數(shù)據(jù)庫工具類的加載方法:
$this->myforge = $this->load->dbforge($this->other_db, TRUE);
上例中,我們通過第一個(gè)參數(shù)傳遞了一個(gè)自定義的數(shù)據(jù)庫對象,第二個(gè)參數(shù)表示方法將返回 dbforge 對象, 而不是直接賦值給 $this->dbforge 。
注解
兩個(gè)參數(shù)都可以獨(dú)立使用,如果你只想傳第二個(gè)參數(shù),可以將第一個(gè)參數(shù)置空。
一旦初始化結(jié)束,你就可以使用 $this->dbforge 對象來訪問它的方法:
$this->dbforge->some_method();
$this->dbforge->create_database('db_name')
用于創(chuàng)建指定數(shù)據(jù)庫,根據(jù)成敗返回 TRUE 或 FALSE
if ($this->dbforge->create_database('my_db'))
{
echo 'Database created!';
}
$this->dbforge->drop_database('db_name')
用于刪除指定數(shù)據(jù)庫,根據(jù)成敗返回 TRUE 或 FALSE
if ($this->dbforge->drop_database('my_db'))
{
echo 'Database deleted!';
}
創(chuàng)建表涉及到這樣幾件事:添加字段、添加鍵、修改字段。CodeIgniter 提供了這幾個(gè)方法。
字段通過一個(gè)關(guān)聯(lián)數(shù)組來創(chuàng)建,數(shù)組中必須包含一個(gè) 'type' 索引,代表字段的數(shù)據(jù)類型。 例如,INT、VARCHAR、TEXT 等,有些數(shù)據(jù)類型(例如 VARCHAR)還需要加一個(gè) 'constraint' 索引。
$fields = array(
'users' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
);
// will translate to "users VARCHAR(100)" when the field is added.
另外,還可以使用下面的鍵值對:
$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,
),
);
字段定義好了之后,就可以在調(diào)用 create_table() 方法的后面使用 $this->dbforge->add_field($fields); 方法來添加字段了。
$this->dbforge->add_field()
添加字段方法的參數(shù)就是上面介紹的數(shù)組。
如果你非常清楚的知道你要添加的字段,你可以使用字段的定義字符串來傳給 add_field() 方法
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
注解
多次調(diào)用 add_field() 將會累積
創(chuàng)建 id 字段和創(chuàng)建其他字段非常不一樣,id 字段將會自動定義成類型為 INT(9) 的自增主鍵。
$this->dbforge->add_field('id');
// gives id INT(9) NOT NULL AUTO_INCREMENT
通常來說,表都會有鍵。這可以使用 $this->dbforge->add_key('field') 方法來實(shí)現(xiàn)。 第二個(gè)參數(shù)可選,可以將其設(shè)置為主鍵。注意 add_key() 方法必須緊跟在 create_table() 方法的后面。
包含多列的非主鍵必須使用數(shù)組來添加,下面是 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`)
字段和鍵都定義好了之后,你可以使用下面的方法來創(chuàng)建表:
$this->dbforge->create_table('table_name');
// gives CREATE TABLE table_name
第二個(gè)參數(shù)設(shè)置為 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);
// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
注解
除非你指定了 CHARACTER SET 或 COLLATE 屬性,create_table() 方法 默認(rèn)會使用配置文件中 char_set 和 dbcollat 的值(僅針對 MySQL)。
執(zhí)行一個(gè) DROP TABLE 語句,可以選擇添加 IF EXISTS 子句。
// Produces: DROP TABLE table_name
$this->dbforge->drop_table('table_name');
// Produces: DROP TABLE IF EXISTS table_name
$this->dbforge->drop_table('table_name',TRUE);
執(zhí)行一個(gè)重命名表語句。
$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() 方法用于對現(xiàn)有數(shù)據(jù)表進(jìn)行修改,它的參數(shù)和上面介紹的 字段數(shù)組一樣。
$fields = array(
'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $fields);
// Executes: ALTER TABLE table_name ADD preferences TEXT
如果你使用 MySQL 或 CUBIRD ,你可以使用 AFTER 和 FIRST 語句來為新添加的列指定位置。
例如:
// Will place the new column after the `another_field` column:
$fields = array(
'preferences' => array('type' => 'TEXT', 'after' => 'another_field')
);
// Will place the new column at the start of the table definition:
$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() 一樣,只是它用于對現(xiàn)有的列進(jìn)行修改,而不是添加新列。 如果要修改列的名稱,你可以在列的定義數(shù)組中添加一個(gè) "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
classCI_DB_forge
add_column($table[, $field = array()[, $_after = NULL]])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
給表添加列。用法參見 給表添加列 。
add_field($field)
參數(shù):
返回: CI_DB_forge instance (method chaining)
返回類型: CI_DB_forge
添加字段到集合,用于創(chuàng)建一個(gè)表。用法參見 添加字段 。
add_key($key[, $primary = FALSE])
參數(shù):
返回: CI_DB_forge instance (method chaining)
返回類型: CI_DB_forge
添加鍵到集合,用于創(chuàng)建一個(gè)表。用法參見:添加鍵 。
create_database($db_name)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
創(chuàng)建數(shù)據(jù)庫。用法參見:創(chuàng)建和刪除數(shù)據(jù)庫 。
create_table($table[, $if_not_exists = FALSE[, array $attributes = array()]])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
創(chuàng)建表。用法參見:創(chuàng)建表 。
drop_column($table, $column_name)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
刪除某個(gè)表的字段。用法參見:從表中刪除列 。
drop_database($db_name)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
刪除數(shù)據(jù)庫。用法參見:創(chuàng)建和刪除數(shù)據(jù)庫 。
drop_table($table_name[, $if_exists = FALSE])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
刪除表。用法參見:刪除表 。
modify_column($table, $field)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
修改表的某個(gè)列。用法參見:修改表中的某個(gè)列 。
rename_table($table_name, $new_table_name)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
重命名表。用法參見:重命名表 。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: