mysql如何确保视图的一致性

  介绍

这篇文章主要为大家展示了“mysql如何确保视图的一致性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何确保视图的一致性”这篇文章吧。

具体如下:

我们有的时候,会创建一个视图来显示表的部分数据。我们知道,简单视图是的,因此可以更新通过视图不可见的数据,但是此更新会使的视图不一致。为了确保视图的一致性,在创建或修改视图时使用与检查选项可更新子句。我们来看下检查选项可更新子句的语法结构:

CREATE 或是REPLACE  VIEW  view_name    作为   ,select_statement   ,WITH  CHECK 选择;

我们要注意,将分号(,)放与检查选项在子句的末尾,而不是在选择语句的末尾来定义视图。完事我们来尝试根据员工表创建一个名为vps的视图,以显示其职位为VP的员工,例如营销副总裁和副总裁销售:

CREATE 或是REPLACE  VIEW  vps    SELECT 才能;   ,,,employeeNumber,   ,,,姓,   ,,,firstname,   ,,,职务高低,   ,,,扩展,   ,,,的邮件,   ,,,officeCode,   ,,reportsTo   ,从   ,,,员工   ,在哪里   ,,,jobTitle  LIKE  & # 39; % % & # 39;副总裁;

接下来,我们使用以下语句从vps视图中查询数:

mysql>, SELECT  *,得到vps;   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   | |,employeeNumber  lastname  |, firstname  |, jobtitle ,, |, extension  |, email ,,,,,,, |, officeCode  | reportsTo  |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   |,,,,,,1056,|,Hill ,, |, Mary ,, |, VP  Sales ,, |, x4611 ,, |, mary.hill@yiibai.com  |, 1,,,,, |,,, 1002 |   |,,,,,,1076,|,Firrelli  |, Jeff ,, |, VP  Marketing  |, x9273 ,, |, jfirrelli@yiibai.com  |, 1,,,,, |,,, 1002 |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   2,rows 拷贝设置

因为vps是一个简单的视图,因此它是可更新的,所以,我们通过vps视图将一行员工数据信息插入:

INSERT  INTO  vps (employeeNumber、名、姓、职务高低、扩展,电子邮件,officeCode, reportsTo)   值(1703 & # 39;莉莉# 39;,& # 39;布什# 39;,& # 39;IT 经理# 39;,& # 39;x9111& # 39;, & # 39; lilybush@yiiibai.com& # 39;, 1, 1002年),

我们要注意,新创建的员工通过vps视图不可见,因为她的职位是它经理,而不是副总裁。使用以下选择语句来验证它:

SELECT  *,得到employees  WHERE  employeeNumber=1703;

执行上面语句,得到以下结果:

+ - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   | |,employeeNumber  lastName  |, firstName  |, extension  |, email ,,,,,,,, |, officeCode  |, reportsTo  |, jobTitle ,,,,, |   + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   |,,,,,,1703,|,Bush ,, |, Lily ,, |, x9111 ,, |, lilybush@yiiibai.com  |, 1,,,,, |,,, 1002, |, IT  Manager ,,,, |   |,,,,,,1702,|,Gerard , |, Martin , |, x2312 ,, |, mgerard@gmail.com ,, |, 4,,,,, |,,, 1102, |, Sales  Rep ,,,, |   |,,,,,,1625,|,Kato ,, |, Yoshimi , |, x102 ,, |, ykato@gmail.com ,,, |, 5,,,,, |,,, 1621, |, Sales  Rep ,,,, |   |,,,,,,1621,|,Nishi ,, |, Mami ,, |, x101 ,, |, mnishi@gmail.com ,, |, 5,,,,, |,,, 1056, |, Sales  Rep ,,,,, |

但这可能不是我们想要的,因为通过vps视图暴露VP员工,而不是其他员工,所以,为了确保视图的一致性,用户只能显示或更新通过视图可见的数据,则在创建或修改视图时使用检查选项:

mysql如何确保视图的一致性