Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > PHP > 用PEAR::MDB2 Manager模块控制表
【标  题】:用PEAR::MDB2 Manager模块控制表
【关键字】:PEAR,MDB2,Manager
【来  源】:http://www.cublog.cn/u/23/showart.php?id=139404

用PEAR::MDB2 Manager模块控制表

Your Ad Here PEAR::MDB2除了提供PEAR::DB已有的sql处理功能之外,还提供了一个非常强大的扩展功能:添加/删除/修改数据库对象
可以控制的数据库对象有:

    * 库
    * 表
    * 索引(普通索引、主键、唯一索引)

调用Manager模块

$mdb->loadModule('Manager');
或者直接用魔法调用方式
$mdb->mgCreateTable();
$mdb->mgAlterTable();
模块调用机制参看《PEAR::MDB2模块调用机制

创建数据库

$mdb->createDatabase($dbname);
建立数据库很简单,只要指定数据库名字就好,可惜的是,创建新数据库时不能指定更多的参数,比如postgresql建立数据库时还可以指定encoding、owner等等。

定义字段

MDB2把字段的数据类型抽象为:

    * text   字符类型
    * clob   大对象(文本)
    * blob   大对象(二进制)
    * integer    整数
    * boolean    布尔类型
    * date       日期类型(YY-MM-DD)
    * time       时间类型(HH:MM:SS)
    * timestamp  日期加时间(YYYY-MM-DD HH:MM:SS)
    * float      浮点数类型
    * decimal    任意精度数值类型

字段的参数有:

    * length    长度
    * type      数据类型
    * default   默认值
    * unsigned  无符号
    * notnull   不允许空值
    * fixed     字符类型是否用空格填充不足的长度

例如我想要,创建一个user_info表,包含三个字段:id(编号 整数)、user_name(用户名)、password(MD5密码),字段的描述就是
$fields = array(
    'id' => array(
        'type'      => 'integer',
        'notnull'   => 1
    ),
    'username' => array(
        'type'      => 'text',
        'length'    => 20,
        'notnull'   => 1
    ),
    'password' => array(
        'type'      => 'text',
        'length'    => 32,
        'notnull'   => 1
    )
);
如果给text类型指定length,字段会使用varchar或者char,如果fixed为真则为char,fixed为假则为varchar,fixed默认为false
如果没有给text指定length,使用text类型
某些DBMS可以把默认值设置为函数,比如now(),但是在这里无法设置默认值为函数,如果指定函数默认值,默认值实际上设置成函数运行后的值

创建表

创建名字叫user_info的用户信息表
$mdb->createTable('user_info', $fields);

修改表

表的修改使用alterTable()方法,可以对表进行的操作有

    * name    重命名表名
    * add     添加字段
    * remove  删除字段
    * change  修改字段
    * rename  字段重命名

添加字段
给user_info表添加三个字段,realname(真实姓名)、reg_date(注册时间)、login_time(最后一次登录时间)
$change = array(
    'add' => array(
        'realname'  => array(
            'type'      => 'text',
            'length'    => 20
        ),
        'reg_date'  => array(
            'type'      => 'timestamp',
            'notnull'   => 1
        ),
        'login_time' => array(
            'type'      => 'timestamp'
        )
    )
);
$mdb->alterTable('user_info', $change);

修改字段
把reg_date字段从timestamp类型改变为date类型,realname不允许为空
$change = array(
    'change' => array(
        'reg_date' => array(
            'type'  => 'timestamp',
            'definition' => array(
                'type'  => 'date'
            )
        ),
        'realname' => array(
            'notnull' => 1
        )
    )
);
$mdb->alterTable('user_info', $change);

删除字段
删除login_time字段
$change = array(
    'remove' => array(
        'login_time' => array()
    )
);
$mdb->alterTable('user_info', $change);

字段重命名
重命名realname为real_name
$change = array(
    'rename' => array(
        'realname' => array(
            'name' => 'real_name'
        )
    )
);
$mdb->alterTable('user_info', $change);

重命名表
把user_info表重命名为userinfo
$change = array(
    'name' => 'userinfo'
);
$mdb->alterTable('user_info', $change);

创建索引

在id字段上创建主键
$con_define = array(        // 主键定义
    'fields' => array('id' => array()),
    'primary' => 1
);
$con_name = 'pk_user_info_id';  // 主键名
$mdb->createConstraint('user_info', $con_name, $con_define);

在username字段上创建唯一索引
$con_define = array(        // 唯一索引定义
    'fields' => array('username' => array()),
    'unique' => 1
);
$con_name = 'uk_user_info_username';    // 唯一索引名
$mdb->createConstraint('user_info', $con_name, $con_define);

删除刚才建立的约束
$mdb->dropConstraint('user_info', 'pk_user_info_id');
$mdb->dropConstraint('user_info', 'uk_user_info_username');

在username、password上建立双字段索引
$idx_define = array(
    'fields' => array(
        'username' => array(),
        'password' => array()
    )
);
$idx_name = 'idx_user_info_auth';
$mdb->createIndex('user_info', $idx_name, $idx_define);

删除idx_user_info_auth索引
$mdb->dropIndex('user_info', 'idx_user_info_auth');

Manager模块对一些通常的操作进行了封装,可以满足大部分常见的需求,但是如果你需要是更加精细的控制,Manager就无法做到了,比如:
// PostgreSQL
CREATE INDEX code_idx ON films(code) TABLESPACE indexspace

最后建议有疑惑的时候看还是看看相关的代码,代码就是最好的文档
字体编码转换类:【上一篇】
smarty缓存控制:【下一篇】
【相关文章】
  • PEAR::DB_QueryTool简介及其不爽之处
  • Support Tools Manager(STM)
  • Logical Volume Manager rules
  • 用Xmanager等终端软件无法连接AIX的解决方案
  • 查看Volume Manager管理下磁盘的可用空间
  • Veritas volume manager之(管理子磁盘)
  • Remote file manager showcases embedded Linux http(
  • PEAR::Cache_Lite(用于实现页面缓存)
  • [招聘]Java Team Leader/Technical Manager
  • xmanager的一些小问题
  • 【随机文章】
  • ASP自定义函数,仿VBA中域函数DLookup
  • 短距通信蓝牙技术发展现状
  • CFML----一门在国外很多大公司得到应用的语言
  • 在ASP与ASP.NET之间共享对话状态(1)
  • 服务器选型参考TPC-C值
  • 使用IBM Rational的测试理念成功打造测试团队
  • Mono安装指南
  • 常见设计模式的解析和实现(C++)之二十一-完结篇
  • Where can one get a list of all hidden Oracle para
  • 源代码学习
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.