ThinkPHP 数据库表结构处理类(简单实用)

简介:
<?php
/*
*mysql表结构处理类
*创建数据表,增加,编辑,删除表中字段
*
*/
classMysqlManage{
/*
*创建 数据库,并且主键是aid
*table要查询的表名
*/
functioncreateTable($table){
$sql="CREATETABLEIFNOTEXISTS`$table`(`aid`INTNOTNULLprimarykey)ENGINE=InnoDB;";
M()->execute($sql);
$this->checkTable($table);
}
/*
*检测表是否存在,也可以获取表中所有字段的信息
*table要查询的表名
*return表里所有字段的信息
*/
functioncheckTable($table){
$sql="desc`$table`";
$info=M()->execute($sql);
return$info;
}
/*
*检测字段是否存在,也可以获取字段信息(只能是一个字段)
*table表名
*field字段名
*/
functioncheckField($table,$field){
$sql='desc`$table`$field';
$info=M()->execute($sql);
return$info;
}
/*
*添加字段
*table表名
*info字段信息数组array
*return字段信息array
*/
functionaddField($table,$info){
$sql="altertable`$table`add";
$sql.=$this->filterFieldInfo();
M()->execute($sql);
$this->checkField($table,$info['name']);
}
/*
*修改字段
*不能修改字段名称,只能修改
*/
functioneditField($table,$info){
$sql="altertable`$table`modify";
$sql.=$this->filterFieldInfo($info);
M()->execute($sql);
$this->checkField($table,$info['name']);
}
/*
*字段信息数组处理,供添加更新字段时候使用
*info[name]字段名称
*info[type]字段类型
*info[length]字段长度
*info[isNull]是否为空
*info['default']字段默认值
*info['comment']字段备注
*/
privatefunctionfilterFieldInfo($info){
if(!is_array($info))
return
$newInfo=array();
$newInfo['name']=$info['name'];
$newInfo['type']=$info['type'];
switch($info['type']){
case'varchar':
case'char':
$newInfo['length']=empty($info['length'])?100:$info['length'];
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOTNULL';
$newInfo['default']=empty($info['default'])?'':'DEFAULT'.$info['default'];
$newInfo['comment']=empty($info['comment'])?'':'COMMENT'.$info['comment'];
case'int':
$newInfo['length']=empty($info['length'])?7:$info['length'];
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOTNULL';
$newInfo['default']=empty($info['default'])?'':'DEFAULT'.$info['default'];
$newInfo['comment']=empty($info['comment'])?'':'COMMENT'.$info['comment'];
case'text':
$newInfo['length']='';
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOTNULL';
$newInfo['default']='';
$newInfo['comment']=empty($info['comment'])?'':'COMMENT'.$info['comment'];
}
$sql=$newInfo['name'].''.$newInfo['type'];
$sql.=(!empty($newInfo['length']))?($newInfo['length'])."":'';
$sql.=$newInfo['isNull'].'';
$sql.=$newInfo['default'];
$sql.=$newInfo['comment'];
return$sql;
}
/*
*删除字段
*如果返回了字段信息则说明删除失败,返回false,则为删除成功
*/
functiondropField($table,$field){
$sql="altertable`$table`dropcolumn$field";
M()->execute($sql);
$this->checkField($table,$filed);
}
/*
*获取指定表中指定字段的信息(多字段)
*/
functiongetFieldInfo($table,$field){
$info=array();
if(is_string($field)){
$this->checkField($table,$field);
}else{
foreach($fieldas$v){
$info[$v]=$this->checkField($table,$v);
}
}
return$info;
}
}

    好久没有写博客了,最近忙的要死,搞微信平台,偶尔遇到需要模型管理,前台表单直接修改表结构的,就自己简单写了一下,也不是很难,给大家一个思路


最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
3月前
|
SQL NoSQL 关系型数据库
实时数仓Hologres发展问题之实时数仓的类数据库化与HTAP数据库的差异如何解决
实时数仓Hologres发展问题之实时数仓的类数据库化与HTAP数据库的差异如何解决
51 2
|
4月前
|
存储 SQL 数据库
如何避免数据库表结构冗余?
【7月更文挑战第28天】如何避免数据库表结构冗余?
50 5
|
5月前
|
消息中间件 Java 数据库连接
【消息队列开发】 对核心类实现数据库管理
【消息队列开发】 对核心类实现数据库管理
|
3月前
|
SQL Java 关系型数据库
应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库
该博客文章介绍了在JSP中使用JDBC连接SQL Server数据库的方法,包括加载数据库驱动、建立数据库连接的过程,并提供了一个使用DriverManager类创建数据库连接的Java示例代码。
|
4月前
|
Web App开发 缓存 数据管理
数据管理DMS使用问题之执行SHOW CREATE TABLE命令查看表结构时,数据库管理员和普通授权账号看到的为什么不一样
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
4月前
|
SQL Java 持续交付
实时计算 Flink版产品使用问题之源数据库一直在新增表或修改表结构,需要进行相应的修改和重启,该如何简化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL 关系型数据库 MySQL
mysqldiff - Golang 针对 MySQL 数据库表结构的差异 SQL 工具
Golang 针对 MySQL 数据库表结构的差异 SQL 工具。https://github.com/camry/mysqldiff
92 7
|
5月前
|
关系型数据库 Java MySQL
Java关于Mysql数据库的事物处理类
Java关于Mysql数据库的事物处理类
22 0
|
6月前
|
算法 关系型数据库 数据库
|
6月前
|
关系型数据库 数据库
关系型数据库表结构设计的主键的简单性
【5月更文挑战第16天】关系型数据库表结构设计的主键的简单性
56 2
下一篇
无影云桌面