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 相关文章推荐
apache和php之间协同工作的配置经验分享
Apr 08 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
Yii调试SQL的常用方法
Jul 09 PHP
php微信支付之APP支付方法
Mar 04 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
php自定义hash函数实例
May 05 PHP
php读取csc文件并输出
May 21 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 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
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
js运动事件函数详解
2016/10/21 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
python将文本中的空格替换为换行的方法
2018/03/19 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
python 异或加密字符串的实例
2018/10/14 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
记账会计岗位职责
2014/06/16 职场文书
车贷收入证明范本
2014/09/14 职场文书
保密工作整改报告
2014/11/06 职场文书
药品开票员岗位职责
2015/04/15 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
大学运动会加油稿
2015/07/22 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书