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

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
/*
  * mysql表结构处理类
  * 创建数据表,增加,编辑,删除表中字段
  *
  */
class  MysqlManage{
     /*
      * 创建数据库,并且主键是aid
      * table 要查询的表名
      */
     function  createTable( $table ){
         $sql = "CREATE TABLE IF NOT EXISTS `$table` (`aid` INT NOT NULL primary key)ENGINE = InnoDB;" ;
         M()->execute( $sql );
         $this ->checkTable( $table );
     }
     /*
      * 检测表是否存在,也可以获取表中所有字段的信息
      * table 要查询的表名
      * return 表里所有字段的信息
      */
     function  checkTable( $table ){
         $sql = "desc `$table`" ;
         $info =M()->execute( $sql );
         return  $info ;
     }
 
     /*
      * 检测字段是否存在,也可以获取字段信息(只能是一个字段)
      * table 表名
      * field 字段名
      */
     function  checkField( $table , $field ){
         $sql = 'desc `$table` $field' ;
         $info =M()->execute( $sql );
         return  $info ;
     }
 
     /*
      * 添加字段
      * table 表名
      * info  字段信息数组 array
      * return 字段信息 array
      */
     function  addField( $table , $info ){
         $sql = "alter table `$table` add " ;
         $sql .= $this ->filterFieldInfo();
         M()->execute( $sql );
         $this ->checkField( $table , $info [ 'name' ]);
     }
 
     /*
      * 修改字段
      * 不能修改字段名称,只能修改
      */
     function  editField( $table , $info ){
         $sql = "alter table `$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']   字段备注
      */
     private  function  filterFieldInfo( $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' : 'NOT NULL' ;
                 $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' : 'NOT NULL' ;
                 $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' : 'NOT NULL' ;
                 $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,则为删除成功
      */
     function  dropField( $table , $field ){
         $sql = "alter table `$table` drop column $field" ;
         M()->execute( $sql );
         $this ->checkField( $table , $filed );
     }
 
     /*
      * 获取指定表中指定字段的信息(多字段)
      */
     function  getFieldInfo( $table , $field ){
         $info = array ();
         if ( is_string ( $field )){
             $this ->checkField( $table , $field );
         } else {
             foreach ( $field  as  $v ){
                 $info [ $v ]= $this ->checkField( $table , $v );
             }
         }
         return  $info ;
     }
}

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










本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1543179,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
SQL NoSQL 关系型数据库
实时数仓Hologres发展问题之实时数仓的类数据库化与HTAP数据库的差异如何解决
实时数仓Hologres发展问题之实时数仓的类数据库化与HTAP数据库的差异如何解决
54 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产品使用合集的详细介绍。
|
5月前
|
SQL 关系型数据库 MySQL
mysqldiff - Golang 针对 MySQL 数据库表结构的差异 SQL 工具
Golang 针对 MySQL 数据库表结构的差异 SQL 工具。https://github.com/camry/mysqldiff
92 7
|
4月前
|
SQL Java 持续交付
实时计算 Flink版产品使用问题之源数据库一直在新增表或修改表结构,需要进行相应的修改和重启,该如何简化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
关系型数据库 Java MySQL
Java关于Mysql数据库的事物处理类
Java关于Mysql数据库的事物处理类
22 0
|
6月前
|
算法 关系型数据库 数据库
|
6月前
|
关系型数据库 数据库
关系型数据库表结构设计的主键的简单性
【5月更文挑战第16天】关系型数据库表结构设计的主键的简单性
56 2