视图

创建视图

视图的作用相当于一张虚拟表,视图不保存数据

{
CREATE VIEW sales_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
} 

更改或删除视图

{
DROP VIEW sales_by_client

CREATE OR REPLACE VIEW sales_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
} 

可更新视图

如果不包含DISTINCT、聚合函数、GROUP BY/HAVING、UNION就是可更新视图,可以用它来修改数据。

{
CREATE OR REPLACE VIEW invoices_with_balance AS
SELECT
	invoice_id,
    number,
    client_id,
    invoice_total,
    payment_total,
    invoice_total - payment_total AS balance,
    invoice_date,
    due_date,
    payment_date
FROM invoices
WHERE (invoice_total - payment_total) > 0 -- 因为语句执行顺序是FROM WHERE SELECT,所以此处不能直接用balance别名

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
} 

WITH CHECK OPTION

放在尾部,防止UPDATE或者DELETE语句将行从视图删除(如果修改结果是会删除,则会报错)

{
SELECT
	invoice_id,
    number,
    client_id,
    invoice_total,
    payment_total,
    invoice_total - payment_total AS balance,
    invoice_date,
    due_date,
    payment_date
FROM invoices
WHERE (invoice_total - payment_total) > 0
WITH CHECK OPTION 
} 
posted @   ganwong99  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示