为什么要用视图
- 运营部需要经常关注最新的报价:不能给一大堆的id 和SQL
- 查看全公司的职员资料,但是不能暴露敏感数据,比如工资情况
- 经常查询的一部分数据,抽象了有时非常复杂的查询细节
数据表设计
SELECT trp.prodtypeid,tap.prodname,tab.`brdname`,tam.`mdlname`,taft.`typename`,taf.`faultsubject`,tar.`repair`,trp.`costlabour`,trp.`costmaterial` FROM `tbl_repair_prices` trp
LEFT JOIN `tbl_attr_product` tap ON tap.prodtypeid=trp.prodtypeid
LEFT JOIN `tbl_attr_brand` tab ON tab.brdid=trp.brdid
LEFT JOIN `tbl_attr_model` tam ON tam.mdlid=trp.mdlid
LEFT JOIN `tbl_attr_faults_type` taft ON taft.`typeid`=trp.`faulttypeid`
LEFT JOIN `tbl_attr_faults` taf ON taf.`faultid`=trp.`faultid`
LEFT JOIN `tbl_attr_repair` tar ON tar.`rid`=trp.`rid`
职工信息表
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
age TINYINT,
sex TINYINT,
salary DECIMAL(7,2),
department VARCHAR(50)
)
视图
视图(view) 其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上
- 简单性:某些数据项需要经常获取
- 安全性:不希望遍历工资字段
- 可维护性:抽象了有时非常复杂的查询细节
创建和执行视图
CREATE VIEW test.v AS SELECT * FROM t;
报价表视图
CREATE VIEW tbl_repair_prices_view AS SELECT trp.prodtypeid,tap.prodname,tab.`brdname`,tam.`mdlname`,taft.`typename`,taf.`faultsubject`,tar.`repair`,trp.`costlabour`,trp.`costmaterial` FROM `tbl_repair_prices` trp
LEFT JOIN `tbl_attr_product` tap ON tap.prodtypeid=trp.prodtypeid
LEFT JOIN `tbl_attr_brand` tab ON tab.brdid=trp.brdid
LEFT JOIN `tbl_attr_model` tam ON tam.mdlid=trp.mdlid
LEFT JOIN `tbl_attr_faults_type` taft ON taft.`typeid`=trp.`faulttypeid`
LEFT JOIN `tbl_attr_faults` taf ON taf.`faultid`=trp.`faultid`
LEFT JOIN `tbl_attr_repair` tar ON tar.`rid`=trp.`rid`
DESC `tbl_repair_prices_view`
定制视图结果
- 查询字段
- 覆盖默认排序
- 各种函数
查询条件
使用可选参数 column_list传入列名
CREATE VIEW tbl_repair_prices_view (`产品名`,`品牌名`,`机型名`,`故障类别`,`故障信息`,`维修方案`,`a`,`b`) AS SELECT tap.prodname,tab.`brdname`,tam.`mdlname`,taft.`typename`,taf.`faultsubject`,tar.`repair`,trp.`costlabour`,trp.`costmaterial` FROM `tbl_repair_prices` trp
LEFT JOIN `tbl_attr_product` tap ON tap.prodtypeid=trp.prodtypeid
LEFT JOIN `tbl_attr_brand` tab ON tab.brdid=trp.brdid
LEFT JOIN `tbl_attr_model` tam ON tam.mdlid=trp.mdlid
LEFT JOIN `tbl_attr_faults_type` taft ON taft.`typeid`=trp.`faulttypeid`
LEFT JOIN `tbl_attr_faults` taf ON taf.`faultid`=trp.`faultid`
LEFT JOIN `tbl_attr_repair` tar ON tar.`rid`=trp.`rid`
修改视图
ALTER VIEW tbl_repair_prices_view (`产品名`,`品牌名`,`机型名`,`故障类别`,`故障信息`,`repair`,`a`,`b`) AS SELECT tap.prodname,tab.`brdname`,tam.`mdlname`,taft.`typename`,taf.`faultsubject`,tar.`repair`,trp.`costlabour`,trp.`costmaterial` FROM `tbl_repair_prices` trp
LEFT JOIN `tbl_attr_product` tap ON tap.prodtypeid=trp.prodtypeid
LEFT JOIN `tbl_attr_brand` tab ON tab.brdid=trp.brdid
LEFT JOIN `tbl_attr_model` tam ON tam.mdlid=trp.mdlid
LEFT JOIN `tbl_attr_faults_type` taft ON taft.`typeid`=trp.`faulttypeid`
LEFT JOIN `tbl_attr_faults` taf ON taf.`faultid`=trp.`faultid`
LEFT JOIN `tbl_attr_repair` tar ON tar.`rid`=trp.`rid`
删除视图
drop view `tbl_repair_prices_view`