123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
- <title>数据库维护类 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档</title>
- <link rel="shortcut icon" href="http://codeigniter.org.cn/user_guide/../images/design/favicon.ico" type="image/x-icon" />
- <link rel="stylesheet" type="text/css" media="all" href="../userguide.css" />
- <link rel="search" href="http://codeigniter.org.cn/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索"/>
- <link rel="canonical" href="http://codeigniter.org.cn/user_guide/database/forge.html" />
- <script type="text/javascript" src="../nav/mootools.js-ver=20130324.js"></script>
- <script type="text/javascript" src="../nav/mootools-more.js-ver=20130324.js"></script>
- <script type="text/javascript" src="../nav/nav.js-ver=20130324.js"></script>
- <script type="text/javascript" src="../nav/user_guide_menu.js-ver=20130324.js"></script>
- <meta name="robots" content="all" />
- <meta name="author" content="ExpressionEngine Dev Team" />
- <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
- </head>
- <body>
- <!-- START NAVIGATION -->
- <div id="nav">
- <div id="nav_inner">
- <script type="text/javascript">create_menu('../');</script>
- </div>
- </div>
- <script type="text/javascript">_setNavigation();</script>
- <div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" /></a></div>
- <div id="masthead" class="clearfix">
- <div class="topbar-hd"><h1>CodeIgniter 用户指南 版本 2.2.0</h1></div>
- <div class="topbar-tip">编辑文档、查看近期更改请 <a href="#">登录</a> 或 <a href="#">注册</a> <a href="#">找回密码</a></div> <div id="breadcrumb_right"><a href="../toc.html">目录页</a></div>
- </div>
- <!-- END NAVIGATION -->
- <!-- START BREADCRUMB -->
- <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
- <tr>
- <td id="breadcrumb">
- <a href="#" target="_blank">CodeIgniter 中国首页</a> ›
- <a href="../index.html">用户指南首页</a> › <a href="index.html">数据库类</a> › 数据库维护类 </td>
- <td id="searchbox">
- <form method="get" action="http://www.google.com.hk/search" target="google_window">
- <input type="hidden" name="client" value="pub-0176846097796333"></input>
- <input type="hidden" name="forid" value="1"></input>
- <input type="hidden" name="ie" value="UTF-8"></input>
- <input type="hidden" name="oe" value="UTF-8"></input>
- <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
- 搜索用户指南
- <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
-
- <input type="submit" class="submit" name="sa" value="Go" />
- </form>
- </td>
- </tr>
- </table>
- <!-- END BREADCRUMB -->
- <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
- <a href="#" target="_blank">查看原文</a>
- </div>
- <!--<br clear="all" />--><!-- START CONTENT -->
- <div id="content">
- <h1>数据库维护类</h1>
- <p>该类包含了一些帮助你管理数据库的函数。</p>
- <h3>目录</h3>
- <ul>
- <li><a href="#init">初始化</a></li>
- <li><a href="#create">创建数据库</a></li>
- <li><a href="#drop">删除数据库</a></li>
- <li><a href="#add_field">添加字段</a></li>
- <li><a href="#add_key">添加主键</a></li>
- <li><a href="#create_table">创建表</a></li>
- <li><a href="#drop_table">删除表</a></li>
- <li><a href="#rename_table">重命名表</a></li>
- <li><a href="#modifying_tables">修改表</a></li>
- </ul>
- <h2><a name="init"></a>初始化</h2>
- <p class="important"><strong>注意:</strong> 欲初始化数据库维护类,请确保你的数据库驱动已经运行,因为该类依赖于数据库驱动。</p>
- <p>使用如下方法载入数据库维护类:</p>
- <code>$this->load->dbforge()</code>
- <p>一旦初始化,就可以使用<dfn>$this->dbforge</dfn> 对象访问类中函数:</p>
- <code>$this->dbforge->some_function()</code>
- <h2><a name="create"></a>$this->dbforge->create_database('db_name')</h2>
- <p>允许你创建由第一个参数指定的数据库。根据成功或失败,返回 TRUE/FALSE:</p>
- <code>if ($this->dbforge->create_database('my_db'))<br />
- {<br />
- echo '数据库已经被创建!';<br />
- }</code>
- <h2><a name="drop"></a>$this->dbforge->drop_database('db_name')</h2>
- <p>允许你删除由第一个参数指定的数据库。根据成功或失败,返回 TRUE/FALSE:</p>
- <code>if ($this->dbforge->drop_database('my_db'))<br />
- {<br />
- echo '数据库已经被删除!';<br />
- }</code>
- <h1>创建和删除表</h1>
- <p>创建表时有这么几件事需要你来完成。添加字段,添加主键和修改列。CodeIgniter提供如下方法完成这些操作。</p>
- <h2><a name="add_field" id="add_field"></a>添加字段</h2>
- <p>字段由关联数组创建。在数组中必须包含与字段数据类型相关的“类型”键。例如,INT,VARCHAR,TEXT等等。许多数据类型(如 VARCHAR)还需要“约束”键。</p>
- <p><code>$fields = array(<br />
- 'users' => array(<br />
- 'type' => 'VARCHAR',<br />
- 'constraint' => '100',<br />
- ),<br />
- );<br />
- <br />
- // 当字段被添加后,将被翻译为 "users VARCHAR(100)" .</code></p>
- <p>此外,还可以使用下列键/值:</p>
- <ul>
- <li>unsigned/true: 在字段定义中生成“UNSIGNED”。</li>
- <li>default/value: 在字段定义中生成一个缺省值。</li>
- <li>null/true: 在字段定义中生成“NULL” 。没有这个,字段缺省为“NOT NULL”。</li>
- <li>auto_increment/true: 为字段生成自动增量标记。注意,字段类型必须支持自动增量标记,如整型。</li>
- </ul>
- <p><code>$fields = array(<br />
- 'blog_id' => array(<br />
- 'type' => 'INT',<br />
- 'constraint' => 5, <br />
- 'unsigned' => TRUE,<br />
- 'auto_increment' => TRUE<br />
- ),<br />
- 'blog_title' => array(<br />
- 'type' => 'VARCHAR',<br />
- 'constraint' => '100',<br />
- ),<br />
- 'blog_author' => array(<br />
- 'type' =>'VARCHAR',<br />
- 'constraint' => '100',<br />
- 'default' => 'King of Town',<br />
- ),<br />
- 'blog_description' => array(<br />
- 'type' => 'TEXT',<br />
- 'null' => TRUE,<br />
- ),<br />
- );<br />
- </code></p>
- <p>字段定义后,使用<dfn>$this->dbforge->add_field($fields);</dfn> 添加字段。接下来调用 <dfn>create_table()</dfn> 函数创建表。</p>
- <h3>$this->dbforge->add_field()</h3>
- <p>添加字段函数将接受上面这个数组。</p>
- <h3>传递字符串作为字段定义</h3>
- <p>如果你确切地知道自己要如何创建一个字段,你可以将字符串作为字段定义传递给 add_field():</p>
- <p><code>$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");</code></p>
- <p class="important">说明: 多次调用 <dfn>add_field()</dfn> 是累加性的。</p>
- <h3>创建一个 id 字段</h3>
- <p>创建id字段有一种特殊的例外情况。一个id类型的字段将会被自动地赋值为 INT(9) 类型的自动递增主键。</p>
- <p><code>$this->dbforge->add_field('id');<br />
- // 生成 id INT(9) NOT NULL AUTO_INCREMENT</code></p>
- <h2><a name="add_key" id="add_key"></a>添加键</h2>
- <p>一般来说,你会需要表中有键。这是通过 <dfn>$this->dbforge->add_key('field')</dfn> 来实现的。可选的第二个参数如果被设置为TRUE,那么就会生成一个主键。请注意 <dfn>add_key()</dfn> 后面必须调用 <dfn>create_table()</dfn>。</p>
- <p>多列的非主键必须通过数组来传递。下面的示例输出是用于 MySQL 的。</p>
- <p><code>$this->dbforge->add_key('blog_id', TRUE);<br />
- // 生成 PRIMARY KEY `blog_id` (`blog_id`)<br />
- <br />
- $this->dbforge->add_key('blog_id', TRUE);<br />
- $this->dbforge->add_key('site_id', TRUE);<br />
- // 生成 PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)<br />
- <br />
- $this->dbforge->add_key('blog_name');<br />
- // 生成 KEY `blog_name` (`blog_name`)<br />
- <br />
- $this->dbforge->add_key(array('blog_name', 'blog_label'));<br />
- // 生成 KEY `blog_name_blog_label` (`blog_name`, `blog_label`)</code></p>
- <p class="important">译者注:此处存在BUG!经验证,以上代码创建的是两个单独的非主键,而不是一个多列的非主键。有关此BUG的解决方案,详见<a href="#" title='有关BUG的一个可行的解决方案'>CI中国论坛!</a></p>
- <h2><a name="create_table" id="create_table"></a>创建表</h2>
- <p>声明了字段和键之后,你就可以使用下面的方法来创建一个表:</p>
- <p><code>$this->dbforge->create_table('table_name');<br />
- // 生成 CREATE TABLE table_name</code></p>
- <p>可选的第二个参数如果被设置为TRUE,那么,表的定义中就会添加 "IF NOT EXISTS" 子句</p>
- <p><code>$this->dbforge->create_table('table_name', TRUE);<br />
- // 生成 CREATE TABLE IF NOT EXISTS table_name</code></p>
- <h2><a name="drop_table" id="drop_table"></a>删除表</h2>
- <p>执行一条 DROP TABLE 语句</p>
- <p><code>$this->dbforge->drop_table('table_name');<br />
- // 生成 DROP TABLE IF EXISTS table_name</code></p>
- <h2><a name="rename_table" id="rename_table"></a>重命名表</h2>
- <p>执行一次表重命名</p>
- <p><code>$this->dbforge->rename_table('old_table_name', 'new_table_name');<br />
- // 生成 ALTER TABLE old_table_name RENAME TO new_table_name</code></p>
- <h1><a name="modifying_tables" id="modifying_tables"></a>修改表</h1>
- <h2>$this->dbforge->add_column()</h2>
- <p>这里的 add_column() 函数用来修改已经存在的表,并添加一个或多个字段。 它接受与上面相同的数组参数,并可用于无限数量的附加字段。</p>
- <p><code>$fields = array(<br />
- 'preferences' => array('type' => 'TEXT')<br />
- );<br />
- $this->dbforge->add_column('table_name', $fields);<br />
- <br />
- // 生成 ALTER TABLE table_name ADD preferences TEXT</code></p>
- <h2>$this->dbforge->drop_column()</h2>
- <p>用于从表中移除一个列。 </p>
- <p><code>$this->dbforge->drop_column('table_name', 'column_to_drop');</code></p>
- <h2>$this->dbforge->modify_column()</h2>
- <p>本函数的用法与 add_column() 几乎完全相同,唯一的区别在于,本函数的用途是修改一个已存在的列,而不是添加一个新的。要重命名的话,你可以在字段定义数组中添加一个 "name" 键。</p>
- <p><code>$fields = array(<br />
- 'old_name' => array(<br />
- 'name' => 'new_name',<br />
- 'type' => 'TEXT',<br />
- ),<br />
- );<br />
- $this->dbforge->modify_column('table_name', $fields);<br />
- <br />
- // 生成 ALTER TABLE table_name CHANGE old_name new_name TEXT </code></p>
- <p> </p><p> </p>
- <div id="Contributors">
- 翻译贡献者:
- crazyfriday, Hex, ianyang, yeto, yinzhili, 笼中</div>
- <div id="DocDate">
- 最后修改: 2013-02-14 14:07:53</div>
- </div>
- <!-- END CONTENT -->
- <div id="footer">
- <p>
- 上一个主题: <a href="caching.html">数据库缓存类</a> · <a href="#top">页首</a>
- · <a href="../index.html">用户指南首页</a> · 下一个主题: <a href="utilities.html">数据库工具类</a> </p>
- <p><a href="#">CodeIgniter</a> · 版权所有 © 2006-2013 · <a href="#">Ellislab, Inc.</a></p>
- <p>中文化: <a href="#">CodeIgniter 中国</a> · 制作: Hex · 版本: 1.30 · 鸣谢: 子非鱼</p>
- </div>
- </body>
- </html>
|