DROP VIEW v; DROP TABLE t1,t2; CREATE TABLE t1 (a INT); CREATE TABLE t2 (b INT); INSERT INTO t1 VALUES (1),(2); INSERT INTO t2 VALUES (1),(2); CREATE VIEW v AS SELECT t2.b FROM t2 WHERE t2.b < 3 WITH CHECK OPTION; SELECT * FROM v; UPDATE v SET b=3; -- This statement fails as expected UPDATE v SET b=3 WHERE b=1; -- This statement fails as expected UPDATE v SET b=3 WHERE b=2; -- This statement fails as expected -- So far som good. Now we alter the view to have join clause that does not actually -- change the logic of the view. ALTER VIEW v AS SELECT t2.b FROM t1 JOIN t2 ON t1.a=t2.b WHERE t2.b < 3 WITH CHECK OPTION; SELECT * FROM v; -- The following statement does NOT fail on the CHECK OPTION even -- though it violates the WHERE clause in the VIEW! UPDATE v SET b=3 WHERE b=1; SELECT * FROM v; UPDATE t2 SET b=1 WHERE b=3; -- Clean up the mess... -- The following statement does NOT fail on the CHECK OPTION even -- though it violates the WHERE clause in the VIEW! UPDATE v SET b=3 WHERE b=2; SELECT * FROM v; UPDATE t2 SET b=2 WHERE b=3; -- Clean up the mess again... -- The following statement does NOT fail on the CHECK OPTION even -- though it violates the WHERE clause in the VIEW! UPDATE v SET b=3; SELECT * FROM v;