电商网站安全解决方案,求推荐做ppt的网站,网站开发实习报告,邯郸seo优化前言视图是数据库系统中一种非常有用的数据库对象。MySQL 5.0 之后的版本添加了对视图的支持。认识视图视图是一个虚拟表#xff0c;其内容由查询定义。同真实表一样#xff0c;视图包含一系列带有名称的列和行数据#xff0c;但视图并不是数据库真实存储的数据表。视图是从…前言视图是数据库系统中一种非常有用的数据库对象。MySQL 5.0 之后的版本添加了对视图的支持。认识视图视图是一个虚拟表其内容由查询定义。同真实表一样视图包含一系列带有名称的列和行数据但视图并不是数据库真实存储的数据表。视图是从一个、多个表或者视图中导出的表包含一系列带有名称的数据列和若干条数据行。视图并不同于数据表它们的区别在于以下几点视图不是数据库中真实的表而是一张虚拟表其结构和数据是建立在对数据中真实表的查询基础上的。存储在数据库中的查询操作 SQL 语句定义了视图的内容列数据和行数据来自于视图查询所引用的实际表引用视图时动态生成这些数据。视图没有实际的物理记录不是以数据集的形式存储在数据库中的它所对应的数据实际上是存储在视图所引用的真实表中的。视图是数据的窗口而表是内容。表是实际数据的存放单位而视图只是以不同的显示方式展示数据其数据来源还是实际表。视图是查看数据表的一种方法可以查询数据表中某些字段构成的数据只是一些 SQL 语句的集合。从安全的角度来看视图的数据安全性更高使用视图的用户不接触数据表不知道表结构。视图的建立和删除只影响视图本身不影响对应的基本表。视图与表在本质上虽然不相同但视图经过定义以后结构形式和表一样可以进行查询、修改、更新和删除等操作。1、准备工作在MySQL数据库中创建两张表balance(余额表)和customer(客户表)并插入数据。create table customer(id int(10) primary key,name char(20) not null,role char(20) not null,phone char(20) not null,sex char(10) not null,address char(50) not null)ENGINEInnoDB DEFAULT CHARSETutf8;#外键为customerIdcreate table balance(id int(10) primary key,customerId int(10) not null,balance DECIMAL(10,2),foreign key(customerId) references customer(id))ENGINEInnoDB DEFAULT CHARSETutf8;向客户表和余额表中各插入3条数据。insert into customer values(0001,xiaoming,vip1,12566666,male,江宁区888号);insert into customer values(0002,xiaohong,vip10,15209336760,male,建邺区888号);insert into customer values(0003,xiaocui,vip11,15309336760,female,新街口888号);insert into balance values(1,0001,900.55);insert into balance values(2,0002,900.55);insert into balance values(3,0003,10000);2、视图简介视图可以简单理解成虚拟表它和数据库中真实存在数据表不同视图中的数据是基于真实表查询得到的。视图和真实表一样具备相似的结构。真实表的更新查询删除等操作视图也支持。那么为什么需要视图呢a、提升真实表的安全性视图是虚拟的可以只授予用户视图的权限而不授予真实表的权限起到保护真实表的作用。b、定制化展示数据基于同样的实际表可以通过不同的视图来向不同需求的用户定制化展示数据。c、简化数据操作适用于查询语句比较复杂使用频率较高的场景可以通过视图来实现。......需要说明一点的是视图相关的操作需要用户具备相应的权限。以下操作使用root用户默认用户具备操作权限。创建视图语法create view as ;修改视图语法修改视图名称可以先删除再用相同的语句创建。#更新视图结构alter view as ;#更新视图数据相当于更新实际表,不适用基于多表创建的视图update ....注意部分视图的数据是无法更新也就是无法使用updateinsert等语句更新比如a、select语句包含多个表b、视图中包含having子句c、试图中包含distinct关键字......删除视图语法drop view 3、视图的操作基于单表创建视图mysql create view bal_view- as- select * from balance;Query OK, 0 rows affected (0.22 sec)创建完成后查看bal_view的结构和记录。可以发现通过视图查询到数据和通过真实表查询得到的结果完全一样。#查询bal_view的结构mysql desc bal_view;------------------------------------------------------| Field | Type | Null | Key | Default | Extra |------------------------------------------------------| id | int(10) | NO | | NULL | || customerId | int(10) | NO | | NULL | || balance | decimal(10,2) | YES | | NULL | |------------------------------------------------------3 rows in set (0.07 sec)#查询bal_view中的记录mysql select * from bal_view;--------------------------| id | customerId | balance |--------------------------| 1 | 1 | 900.55 || 2 | 2 | 900.55 || 3 | 3 | 10000.00 |--------------------------3 rows in set (0.01 sec)通过创建视图的语句不难得出结论当真实表中的数据发生改变时视图中的数据也会随之改变。那么当视图中的数据发生改变时真实表中的数据会变化吗来实验一下修改id1的客户balance为2000。mysql update bal_view set balance2000 where id1;Query OK, 1 row affected (0.05 sec)Rows matched: 1 Changed: 1 Warnings: 0来看一下真实表balance中的数据。mysql select * from bal_view where id1;-------------------------| id | customerId | balance |-------------------------| 1 | 1 | 2000.00 |-------------------------1 row in set (0.03 sec)结论视图表中的数据发生变化时真实表中的数据也会随之改变。基于多表创建视图创建视图cus_bal,共两个字段客户名称和余额。mysql create view cus_bal- (cname,bal)- as- select customer.name,balance.balance from customer ,balance- where customer.idbalance.customerId;Query OK, 0 rows affected (0.05 sec)#查看cus_bal中的数据mysql select * from cus_bal;--------------------| cname | bal |--------------------| xiaoming | 2000.00 || xiaohong | 900.55 || xiaocui | 10000.00 |--------------------3 rows in set (0.28 sec)修改视图将cus_bal视图中的cname改成cusname。mysql alter view cus_bal- (cusname,bal)- as- select customer.name,balance.balance from customer ,balance- where customer.idbalance.customerId;Query OK, 0 rows affected (0.06 sec)#查看修改后视图结构。mysql desc cus_bal;---------------------------------------------------| Field | Type | Null | Key | Default | Extra |---------------------------------------------------| cusname | char(20) | NO | | NULL | || bal | decimal(10,2) | YES | | NULL | |---------------------------------------------------2 rows in set (0.00 sec)修改基于多表创建的视图mysql insert into cus_bal(cusname,bal) values (ee,11);ERROR 1393 (HY000): Can not modify more than one base table through a join view rms.cus_bal删除视图删除视图cus_baldrop view cus_bal;mysql drop view cus_bal;Query OK, 0 rows affected (0.00 sec)总结以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作具有一定的参考学习价值谢谢大家对脚本之家的支持。您可能感兴趣的文章:MySQL笔记之视图的使用详解MySQL中视图的使用及多表INNER JOIN的技巧分享MySQL中索引与视图的用法与区别详解mysql触发器实现oracle物化视图示例代码基于mysql事务、视图、存储过程、触发器的应用分析mysql视图原理与用法实例小结详解Mysql中的视图Mysql事项,视图,函数,触发器命令(详解)MySQL视图原理与基本操作示例mysql视图功能与用法实例分析