MySQL分库分表基础表介绍(1st)

HH MySQL416,28713字数 1581阅读5分16秒阅读模式

表基本模型结构

这里我们模拟一个商城的基本的表结。此结构由(用户、门店、导购、门店商品、订单、订单对应的商品)。其中,导购也是一个用户,门店是只属于一个店主的,同时店主本身也是一个导购也是一个普通用户。

结构图:文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

mysql文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

 文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

构造数据脚本

MySQL分库分表(1)-脚本文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

对业务场景进行模拟

  • 场景1:购买者下订单。

1、从session中获得客户ID。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

2、可以通过时间戳等拼凑一个订单ID(在创建表的时候为了方便我用自增的,在以下我们一直就吧订单ID看成不是自增的,是用程序生成的)。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

3、从商品的店铺能获得到导购ID(获取规则我们这边认为是随机)。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

4、可以从商品中计算出订单价格。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

最终就能拼凑出下单的INSERT SQL语句(这边我就不真正写插入语句了)文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

SET autocommit=0;
START TRANSACTION;
-- 创建订单语句
INSERT INTO orders VALUES(订单ID, 导购ID, 购买用户ID, 订单价格, 订单状态);
-- 创建商品订单语句
INSERT INTO order_goods VALUES(NULL, 订单ID, 商品ID, 商品价格, 商品数量);
-- 可以给添加多个商品到订单中
......
COMMIT;
set autocommit=1;

以上就是一个客户下单时要操作的,订单ID(订单号)是程序生成的,订单ID(订单号)是程序生成的,重要的事要说三遍。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

  • 情况2:购买者浏览订单

当用户查看订单列表的时候可以通过分页一次性获得自己的订单列表。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

-- 每一页10行(这边顺便展示一下单数据量大时优化后的sql语句)
-- 查找用户ID为100的订单
SELECT l_o.orders_id,
  o.user_guide_id,
  o.user_id,
  o.price,
  og.price
FROM (
  SELECT orders_id
  FROM orders
  WHERE user_id = 100
  LIMIT 0, 10
) AS l_o
  LEFT JOIN orders AS o ON l_o.orders_id = o.orders_id
  LEFT JOIN order_goods AS og ON l_o.orders_id = og.orders_id;
  • 情况3:导购查看订单
-- 每个导购也可以查看他销售了多少的订单
-- 查找导购ID为1的销售情况
SELECT o.orders_id,
  o.user_guide_id,
  o.user_id,
  o.price,
  og.price
FROM orders AS o
  LEFT JOIN order_goods AS og ON o.orders_id = og.orders_id
WHERE o.orders_id IN(
  SELECT orders_id
  FROM (
    SELECT orders_id
    FROM orders
    WHERE user_guide_id=1
    LIMIT 0, 10
  ) AS tmp
);
  • 情况4:导购修改订单
-- 这边我们修改订单金额就好,修改ID为1000的订单
UPDATE orders SET price = '10000' WHERE orders_id=1000;
  • 情况5:店主为店铺添加商品

1、我们可以根据操作的用户获得店铺名文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

-- 添加商品伪SQL
INSERT INTO goods VALUES(NULL, 商品名, 商品价格, 店铺名);

如有疑问请联系:文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

QQ:275258836  或 加入ttlsa群交流沟通(QQ群②:6690706 QQ群③:168085569 QQ群④:415230207(新) 微信公众号:ttlsacom)文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

感觉本文内容不错,读后有收获?文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

逛逛衣服店,鼓励作者写出更好文章。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
HH
  • 本文由 发表于 17/02/2016 11:31:56
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/mysql-distributed-database-and-table-base-table-introduction/
评论  4  访客  4
    • Augus
      Augus 9

      以上就是一个客户下单时要操作的,订单ID(订单号)是程序生成的,订单ID(订单号)是程序生成的,重要的事要说三遍

      —–LZ傻吗-LZ傻吗-LZ傻吗 重要的事要说三遍

        • HH
          HH

          @ Augus 谢谢夸奖

          • v
            v 9

            @ Augus 你是傻逼

              • 匿名
                匿名 9

                @ v :roll: 傻逼才骂人

          评论已关闭!