MySQL 5.7发行说明
的检查选项
条款可以给出一个可更新视图的防止插入行在哪里
条款的select_statement
是不正确的。它还可以防止更新的行在哪里
条款是正确的但更新会导致它是不真实的(换句话说,它可以防止可见的行被更新掉看不到行)。
在一个检查选项
条款的可更新视图,当地的
和级联
关键字视图时确定检查测试的范围定义在另一个视图。当两字,默认级联
。
在MySQL 5.7.6之前,检查选项
测试工作是这样的:
与
当地的
,视图在哪里
检查条款检查,但是没有根本的观点。与
级联
,视图在哪里
条款检查,然后检查基本观点进行递归时,补充道与级联检查选项
(为目的的检查;他们的定义保持不变),适用相同的规则。没有检查选项,视图
在哪里
条款不检查,不检查潜在的观点。
MySQL 5.7.6,检查选项
测试标准兼容(改变了先前的语义当地的
并没有检查条款):
与
当地的
,视图在哪里
条款检查,然后检查递归根本观点和适用相同的规则。与
级联
,视图在哪里
条款检查,然后检查基本观点进行递归时,补充道与级联检查选项
(为目的的检查;他们的定义保持不变),适用相同的规则。没有检查选项,视图
在哪里
条款不检查,然后检查潜在的观点进行递归时,适用相同的规则。
考虑下面的表和视图的定义:
创建表t1 (INT);创建视图v1 SELECT * FROM t1, < 2检查选项;创建视图v2作为> SELECT *从v1 0与当地检查选项;创建视图v3 SELECT *从v1与级联检查选项> 0;
在这里,v2
和v3
视图中定义另一个视图,v1
。在MySQL 5.7.6之前,因为v2
有一个当地的
检查选项,插入测试只针对v2
检查。v3
有一个级联
检查选项,所以插入测试不仅反对v3
检查,但对那些潜在的观点。下面的语句说明这些差异:
mysql >插入v2值(2);查询好了,1行影响(0.00秒)mysql >插入v3值(2);错误1369 (HY000):检查选项失败“test.v3”
MySQL 5.7.6,语义当地的
不同于先前:插入v2
检查对其当地的
检查选项,然后(不像5.7.6之前),检查是递归v1
并再次实施这些规则。的规则v1
检查故障原因。的检查v3
不能像以前一样:
mysql >插入v2值(2);错误1369 (HY000):检查选项失败的考试。v2的mysql >插入v3值(2);错误1369 (HY000):检查选项失败“test.v3”