sql問題 删除视图中的数据,表中的数据会删除吗?

已举报 回答 关注

sql問題 删除视图中的数据,表中的数据会删除吗?

  • 回答数

    9

  • 浏览数

    7,943

9个回答 默认排序
  • 默认排序
  • 按时间排序

已采纳
会的,如果是将这种影响更新到数据库就会删除数据库中的数据
当然,有的视图是不能执行删除操作的。
取消 评论
如果你那个视图,是 单表的, 没写 触发器的。

那么 如果 删除视图中的数据 成功了,那么 表中的数据 就被删除了。

如果那个视图, 写了个 INSTEAD OF 触发器. 但是里面没有任何删除的动作。
那么 可能你 DELETE FROM 视图, 最后表的数据,一点也没变化, 也是可以的。

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 行受影响)

对于多表关联的视图, 删除的时候,需要人为的去判断
例如当 主表 和 子表,都只有一条记录的情况下。
无法判断 本次删除, 是要删除掉一个子表的记录,留下主表的。
还是 主表 子表的数据,一同删除。
取消 评论
delete database
取消 评论
delete view 视图名称 where 条件
取消 评论
把视图当个表使用:
DELETE FROM 视图名称
取消 评论
用条件关键字where筛选
取消 评论
视图中的数据是不能删除的,因为视图其实并不真实存在,只是一个Sql语句,要删除视图的数据就要找到视图对应的表,将表的数据删除
取消 评论
TRUNCATE TABLE user (user是表名) mysql的
取消 评论
加载全部9个答案 加载中...
ZOL问答 > 相机 > 尼康相机 > 其他分类 > sql問題 删除视图中的数据,表中的数据会删除吗?

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

提示

确定要取消此次报名,退出该活动?