数据库多表联查

数据库多表

多表做到每个表的字段名称不一样

Mysql 关系数据库

结合到商城:

用户表  订单表  商品表  商品详情表

用户表:

字段:

用户id:唯一标志用户

用户名称:name

用户性别:sex

用户年龄:age

用户地址:position

用户密码:password

删除标志位: is_delete

版本号:version

审核标志位:addcheck

注意:事务有4种隔离机制,读未提交,读已提交,可重复读,串行化

 默认:可重复读

 商品表:(商品定位)酒

商品编号:唯一化,主键 字母+数字 varchar

商品名称  name

保质期:  quality

厂址:area

食品添加剂:additives

生产许可证编号: permit

配料表: ingredients

品牌: brand

度数:alcohol

售价:(总价)total

秒杀价:(有秒杀活动时) seckill

打折价:(店庆,打折)Discount

是否删除:is_delete

版本:version

检查:addcheck

建立的关系表,商品表和用户表,在商品表不需要有用户,用户表不需要商品表

订单表(重点字段)

订单编号: 主键 id varcha

订单合价:total double

用户编号: user_id  int(与用户表一致)

订单状态: order_status  int(0,1,2,3) 数组(买家已付款,卖家已发货,买家已收货,评价)

订单详情表(必须通过订单找到商品)

订单详情编号: 主键

订单编号:  关系主键(通过订单编号找订单)

商品编号: 关系主键(通过商品编号找商品)

小计: 只算每个详情中内容

如果甲表和乙表之间是一对一,乙表和甲表是一对多,两表的关系是一对多,一对多的关系把外键(关系主键)定在一的数据中,放在订单详情中.

用户表和订单表两表之间互相关系是一对一,一对多.把外键(主键关系)放在一的数据中,一个订单对应一个用户,订单表里有用户的外键.

表设计(元素):唯一性(记录唯一),原子性( 重复数据达到最小)

不建外键,数据表中存在冗余数据,造成数据乱了.

建立外键,使用foreign key(本表中的需要外键指示的字段) references 外面表的名称(外面表的外键字段)

在create table 中做,不然就得修改.

删除表:

Drop table 表名

建立外键,订单的本表中的user_id指向外表 user表中的id  

create table myorder(id varchar(20) primary key,total double(6,2),user_id int,order_status int, foreign key(user_id) references user(id));

建表时带关系主键不能进行删除,把用户删除操作变成表中的关联操作 ,有一个删除级联操作on delete cascade

create table myorder(id varchar(20) primary key,total double(6,2),user_id int,order_status int, foreign key(user_id) references user(id) on delete cascade);

还有一个问题,如果更新是id,建的表进行更新时也会报错.

create table myorder(id varchar(20) primary key,total double(6,2),user_id int,order_status int, foreign key(user_id) references user(id) on delete cascade on update cascade);

建立外键完整语句,就是建立删除级联,更新级联,外键关联全部包含在内.在开发,增删改就是单表.

create table myorder(id varchar(20) primary key,total double(6,2),user_id int,order_status int, version int, is_delete tinyint,foreign key(user_id) references user(id) on delete cascade on update cascade);

多表联查

查询用户赵六购买的所有商品和订单.

分析:

  • 查询涉及到几个表

用户―>订单 ——>订单详情―>商品

找到表后,先完成四个表的连接,

关联: 用户 订单,订单表中user_id指向user id

    订单 订单详情 myorder id 指向myorder_detail order_id

        订单详情 订单详情myorder_detail goods_id指向goods中的id

用where的条件把四个表连接在一起,from后面是四个表

Select  *  from user a,myorder b,myorder_detail c,goods d where

  1. id=b.user_id and b.id=c.order_id and c.goods_id =d.id

(2)输出内容(找到表,找到字段)

  要求输出商品和订单,还要注意条件中的用户名,  商品所有内容输出 d.* 订单表的所有内容 b.*

Select a.username,d.*,b.*  from user a,myorder b,myorder_detail c,goods d where

  1. id=b.user_id and b.id=c.order_id and c.goods_id =d.id

(3)给定其他条件(有没有排序,order by,有没有分组 group by),这里用户等于赵六

Select a.username,d.*,b.*  from user a,myorder b,myorder_detail c,goods d where

  1. id=b.user_id and b.id=c.order_id and c.goods_id =d.id and a.username=”赵六”

当前测试环境初始化的数据,语句保留,使用navigate导出表格创建和初始化语句.现在需要把环境从测试环境到生产环境.

一个命令一粘贴,所有数据全部初始化结束.

Mysql –uroot –padmin <beifen.sql

做脚本:

选择任一电商产品,后面使用

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值