可以将不满足视图条件的行(也就是无法通过视图进行查看的行)插入到视图中。还可以更新视图的行,以使其不再满足视图的条件。
CREATE VIEW response (user_id, received, resolved, duration) AS SELECT user_id,call_dtime,res_dtime,res_dtime - call_dtime FROM cust_calls WHERE user_id = USER
UPDATE response SET user_id = 'lenora' WHERE received BETWEEN TODAY AND TODAY - 7
CREATE VIEW response (user_id, received, resolved,duration) AS SELECT user_id, call_dtime, res_dtime, res_dtime - call_dtime FROM cust_calls WHERE user_id = USER WITH CHECK OPTION
用户 tony 所作的上述 UPDATE 操作被当作错误而遭到拒绝。
CREATE VIEW order_insert AS SELECT * FROM orders O WHERE order_date = TODAY -- no back-dated entries AND EXISTS -- ensure valid foreign key (SELECT * FROM customer C WHERE O.customer_num = C.customer_num) AND ship_weight < 1000 -- reasonableness checks AND ship_charge < 1000 WITH CHECK OPTION
由于需要执行 EXISTS 和其他测试(当数据库服务器检索现有行时,这些测试应该能成功),此视图显示 orders 中数据的效率不高。然而,如果对 orders 执行的插入操作只通过此视图进行(并且还没有使用完整性约束来约束数据),那么用户无法插入延期订单、无效的客户号或过高的装运重量和运费。