数据库多表
多表做到每个表的字段名称不一样
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);
多表联查
查询用户赵六购买的所有商品和订单.
分析:
(1) 查询涉及到几个表
用户―>订单 ——>订单详情―>商品
找到表后,先完成四个表的连接,
关联: 用户 订单,订单表中 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
a. 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
b. 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
c. 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