怎么使用视图在数据库中添加数据

怎么使用视图在数据库中添加数据,第1张

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

当建立视图时使用的表中的数据发生了改变后,视图中的数据也会发生相应的改变,视图本身是不能执行添加,删除,修改的!

如果要插入新数据的话,建议使用触发器,在视图相对应的各表中插入数据。视图中自然更新。

对于 单表的视图, 插入/修改 数据是没有问题的。 (只要你不做特别的设置)

对于多表的视图, *** 作的时候,会存在一定的问题。

下面是一个例子:

1>CREATE VIEW v_main_sub AS

2>SELECT

3> test_main.id AS main_id,

4> test_main.value AS main_value,

5> test_sub.id AS sub_id,

6> test_sub.value AS sub_value

7>FROM

8> test_main, test_sub

9>WHERE

10> test_main.id = test_sub.main_id

11>go

1>SELECT * FROM v_main_sub

2>go

main_id main_value sub_id sub_value

----------- ---------- ----------- ----------

1 ONE 1 ONEONE

2 TWO 2 TWOTWO

(2 行受影响)

1>UPDATE v_main_sub

2>SET main_value='ONX'

3>WHERE main_id = 1

4>go

(1 行受影响)

1>UPDATE v_main_sub

2>SET sub_value='ONXONX'

3>WHERE main_id = 1

4>go

(1 行受影响)

1>DELETE FROM v_main_sub WHERE main_id = 1

2>go

消息 4405,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,第 1 行

视图或函数 'v_main_sub' 不可更新,因为修改会影响多个基表。

-- 这个触发器, 只测试输出, 不删除数据。

1>CREATE TRIGGER v_main_sub_trigger

2>ON v_main_sub

3>INSTEAD OF DELETE

4>AS

5>DECLARE

6> @main_id INT,

7> @sub_id INT

8>BEGIN

9> SELECT @main_id=main_id, @sub_id=sub_id FROM deleted

10>

11>

12> PRINT(@main_id)

13> PRINT(@sub_id)

14>END

15>go

1>DELETE FROM v_main_sub WHERE main_id = 1

2>go

1

1

(1 行受影响)

1>DELETE FROM v_main_sub WHERE sub_id = 1

2>go

1

1

(1 行受影响)

对于多表关联的视图, 删除的时候,需要人为的去判断

例如当 主表 和 子表,都只有一条记录的情况下。

无法判断 本次删除, 是要删除掉一个子表的记录,留下主表的。

还是 主表 子表的数据,一同删除。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10040058.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存