PHP框架Laravel中使用UUID实现数据分表操作示例


Posted in PHP onMay 30, 2018

本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作。分享给大家供大家参考,具体如下:

UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。

说的简单点,它就是通过一个规则(如:业务标识号+年月日+当日自增数字格式化)生成的一个具有唯一性的辨识资讯。用于关联我们的一些额数据和资讯。

实例

之前在做一个项目的时候用到这个东西,现在我就用Laravel框架写一个简单的demo

前端form表单

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="/addMysql" method="post">
      {!!csrf_field()!!}
      <table>
        <tr>
          <th style="colspan:2">注册</th>
        </tr>
        <tr>
          <td>账号</td>
          <td>
            <input type="text" name="uname" value="" />
          </td>
        </tr>
        <tr>
          <td>密码</td>
          <td>
            <input type="password" name="pwd" value="" />
          </td>
        </tr>
        <tr>
          <td>性别</td>
          <td>
            <input type="radio" name="sex" value="1" />:男
            <input type="radio" name="sex" value="0" />:女
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="age" value="" />
          </td>
        </tr>
        <tr>
          <td style="colspan:2">
            <input type="submit" value="提交" />
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

建立数据库和数据表(只建立 1 个索引表 和 8 个进行存储详细信息的子表)

原理:通过UUID的唯一特性,将一个数据的详细信息数据存在其他表中的,这个表示通过UUID随机分配出来的,索引表中只存储UUID和关键字段

表前缀统一前缀-------mall_
表 :    mall_index_user       索引表    -------uuid,uname
表0:    mall_user_0           uuid,uname,sex,age
表1:    mall_user_1
表2:    mall_user_2
表3:    mall_user_3
表4:    mall_user_4
表5:    mall_user_5
表6:    mall_user_6
表7:    mall_user_7

通过路由和控制器进行form表单提交数据向数据库插入数据

路由:

//form表单页面路由
Route::get('Mysql',function(){
  return view('home/Mysql');
});
//数据插入提交路由
Route::post('/addMysql','findMoreController@addMysql');

控制器:

//向数据库插入数据
public function addMysql(Request $request){
  $uuid =md5(uniqid(mt_rand (), true));
  $uid =hexdec(substr($uuid,0,1)) % 8;
  $sex = $request->input('sex');
  $age = $request->input('age');
  //dd($uuid);
  $uname = $request->input('uname');
  $result = DB::table('index_user')->insert(['uuid'=>$uuid,'uname'=>$uname]);
  $result1 = DB::table('user_'.$uid)->insert(['uuid'=>$uuid,'uname'=>$uname,'sex'=>$sex,'age'=>$age]);
  if($result1){
    return '1';
  }else{
    return '0';
  }
}

解:上面的$uid就是通过UUID得到的要向哪一张详细信息表中插入的表的代表号

例如:$uid=3     那么就向user_3中插入详细信息

插入成功后进行查询,先通过uname查询出UUID,通过UUID知道详细信息存储在哪张子表中.然后再进行查询

路由:

//查询页面
Route::get('findMysql',function(){
  return view('home/findMysql');
});
//查询路由
Route::post('/findMysql','findMoreController@findMysql');

控制器:

//查询
public function findMysql(Request $request){
    //dd($request);
    $uname=$request->input('uname');
    $uuid =DB::table('index_user')->where('uname','=',$uname)->value('uuid');
    $uid =hexdec(substr($uuid,0,1)) % 8;
    $userInfos=DB::table('user_'.$uid)->get();
    if($userInfos){
      return view('home/selectMysql',['userInfos'=>$userInfos]);
    }else{
      return view('home/findMysql');
    }
}

前端展示

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="" method="post">
      <table>
        <tr>
          <th style="colspan:2">遍历</th>
        </tr>
        @foreach($userInfos as $userInfo)
        <tr>
          <td>性别</td>
          <td>
            <input type="text" name="" value="{{$userInfo->sex}}" />
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="" value="{{$userInfo->age}}" />
          </td>
        </tr>
        @endforeach
      </table>
    </form>
  </body>
</html>

至此,一个简单的利用UUID分表处理数据的例子就完成了。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php db类库进行数据库操作
Mar 19 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
推荐25款php中非常有用的类库
Sep 29 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
PHP 8新特性简介
Aug 18 PHP
php支付宝系列之电脑网站支付
May 30 #PHP
Laravel框架使用Redis的方法详解
May 30 #PHP
php实现微信支付之退款功能
May 30 #PHP
分享5个非常有用的Laravel Blade指令
May 30 #PHP
php实现微信支付之企业付款
May 30 #PHP
ThinkPHP5框架缓存查询操作分析
May 30 #PHP
PHP实现通过CURL上传文件功能示例
May 30 #PHP
You might like
调频问题解答
2021/03/01 无线电
聊天室php&amp;mysql(二)
2006/10/09 PHP
个人站长制做网页常用的php代码
2007/03/03 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
Python实现的Kmeans++算法实例
2014/04/26 Python
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python随机生成彩票号码的方法
2015/03/05 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python编程实现归并排序
2017/04/14 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
python将字母转化为数字实例方法
2019/10/04 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
创建文明学校实施方案
2014/03/11 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang