创建视图
更改或删除
CREATE OR REPLACE VIEW sale_by_client AS#若存在这个视图就代替若没有就创建 SELECT c.client_id, c.name, SUM(invoice_total) AS total_sales FROM clients c JOIN invoices i USING(client_id) GROUP BY client_id, name
可更新视图
/*已经知道我们可以在选择语句中使用视图 我们也可以在insert,update,delete中使用, 但仅限于特定的情况 如果视图中没有DISTINCT关键字, 没有聚合函数(min,max,sum等) 没有group by,having 没有union 如果视图没有以上这些,我们就说这个视图是可更新的视图 可以在insert,update,delete中使用*/ CREATE OR REPLACE VIEW invoices_with_balance AS #若存在这个视图就代替若没有就创建 SELECT *, invoice_total - payment_total AS balance FROM invoices WHERE (invoice_total - payment_total) > 0#不能使用balance,因为这个时候balance还没有出现
上面这个视图没有DISTINCT等,所以是可更新视图
除了删除更新还可以插入一行
DELETE FROM invoices_with_balance#删除 WHERE invoice_id = 1
UPDATE invoices_with_balance#更新 SET due_date = DATE_ADD(due_date, INTERVAL 2 DAY) WHERE invoice_id = 2
如果我们更新 invoices_with_balance中的某条数据使得balance等于零,那么你会发现,这一行会在invoices_with_balance视图中消失,因为我们当时规定balance>0,当通过视图更新数据,一些行可能会消失。有时候不希望update或者delete语句将行从视图中删除,可以返回创建视图的代码中,在最后加上with check option,如果修改会行会从视图消失,则会报错。
视图优点
1.简化查询
2.减少数据库设计改动的影响
3.增强数据安全性