create view IS_student
as
select sno,sname,sage
from student
where sdept='IS'
with check option;
加上了with check option;后,不能执行插入操作:
insert into is_student
values('95100','李娜',12)
什么原因?不加上with check option则可以!
15 个解决方案
#1
with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
--->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行
--->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行
#2
是不是其他的数据库可以那?在数据库原理书中说,当执行:
insert into is_student
values('95100','李娜',12)时候,相当与执行:
insert into student(sno,sname,sage,sdept)
values('95100','李娜',12,'IS')
insert into is_student
values('95100','李娜',12)时候,相当与执行:
insert into student(sno,sname,sage,sdept)
values('95100','李娜',12,'IS')
#3
不行!
除非你设置表student的sdept字段的default值为'is',这样你保留view:with check option
然后插入insert into is_student
values('95100','李娜',12)就默认sdetp等于is,就没有问题啦
除非你设置表student的sdept字段的default值为'is',这样你保留view:with check option
然后插入insert into is_student
values('95100','李娜',12)就默认sdetp等于is,就没有问题啦
#4
好端端的何必Insert到视图拉!!
视图就让它作查询就是了嘛!!
视图就让它作查询就是了嘛!!
#5
问:with check option是什么??
答:百度,搜索"with check option"
答:百度,搜索"with check option"
#6
意思就是说在执行Insert的时候,默认情况下sdept是'IS',才满足with check option是吗?
DBMS不会自动加上Sdept='IS'吗?因为在视图IS_student是选择所有是‘IS’的学生的啊!
DBMS不会自动加上Sdept='IS'吗?因为在视图IS_student是选择所有是‘IS’的学生的啊!
#7
那么你插入这个视图就必须是插入后可以在视图秀出来的,但是你插入后又不能指定!
就是你认为那样!
DBMS不会自动加上Sdept='IS'吗?---〉不会!
就是你认为那样!
DBMS不会自动加上Sdept='IS'吗?---〉不会!
#8
十分感谢!
最终还是有一点不清楚,就是with check option,到底是在检查什么??
最终还是有一点不清楚,就是with check option,到底是在检查什么??
#9
with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
--->就是如此作用:-)
--->就是如此作用:-)
#10
奇怪的是,当执行
delete
from is_student
where sno='95029';的时候却可以
为什么删除又和with check option没有关系了那?
delete
from is_student
where sno='95029';的时候却可以
为什么删除又和with check option没有关系了那?
#11
可是我都是在执行SQL语句,而不是可视化的修改,又怎么知道会看到修改后有结果那?
总是觉得有些怪怪的,不知道问题的实质是什么!
总是觉得有些怪怪的,不知道问题的实质是什么!
#12
谢谢一勺抹茶,真实很感谢!
#13
默认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。例如,可创建一个查询,从而定义一个视图以在表中检索所有员工薪水低于 $30,000 的行。如果该员工的薪水涨到了 $32,000,则查询视图时该特定员工将不再出现,因其薪水不符合视图所设的标准。但是,WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。
#14
WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件??
什么叫均根据视图进行?
如果要是删除记录的话,肯定要从视图中消失,不是不允许删除吧!
什么叫均根据视图进行?
如果要是删除记录的话,肯定要从视图中消失,不是不允许删除吧!
#15
很明显,你设置在CHECK约束
#1
with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
--->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行
--->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行
#2
是不是其他的数据库可以那?在数据库原理书中说,当执行:
insert into is_student
values('95100','李娜',12)时候,相当与执行:
insert into student(sno,sname,sage,sdept)
values('95100','李娜',12,'IS')
insert into is_student
values('95100','李娜',12)时候,相当与执行:
insert into student(sno,sname,sage,sdept)
values('95100','李娜',12,'IS')
#3
不行!
除非你设置表student的sdept字段的default值为'is',这样你保留view:with check option
然后插入insert into is_student
values('95100','李娜',12)就默认sdetp等于is,就没有问题啦
除非你设置表student的sdept字段的default值为'is',这样你保留view:with check option
然后插入insert into is_student
values('95100','李娜',12)就默认sdetp等于is,就没有问题啦
#4
好端端的何必Insert到视图拉!!
视图就让它作查询就是了嘛!!
视图就让它作查询就是了嘛!!
#5
问:with check option是什么??
答:百度,搜索"with check option"
答:百度,搜索"with check option"
#6
意思就是说在执行Insert的时候,默认情况下sdept是'IS',才满足with check option是吗?
DBMS不会自动加上Sdept='IS'吗?因为在视图IS_student是选择所有是‘IS’的学生的啊!
DBMS不会自动加上Sdept='IS'吗?因为在视图IS_student是选择所有是‘IS’的学生的啊!
#7
那么你插入这个视图就必须是插入后可以在视图秀出来的,但是你插入后又不能指定!
就是你认为那样!
DBMS不会自动加上Sdept='IS'吗?---〉不会!
就是你认为那样!
DBMS不会自动加上Sdept='IS'吗?---〉不会!
#8
十分感谢!
最终还是有一点不清楚,就是with check option,到底是在检查什么??
最终还是有一点不清楚,就是with check option,到底是在检查什么??
#9
with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
--->就是如此作用:-)
--->就是如此作用:-)
#10
奇怪的是,当执行
delete
from is_student
where sno='95029';的时候却可以
为什么删除又和with check option没有关系了那?
delete
from is_student
where sno='95029';的时候却可以
为什么删除又和with check option没有关系了那?
#11
可是我都是在执行SQL语句,而不是可视化的修改,又怎么知道会看到修改后有结果那?
总是觉得有些怪怪的,不知道问题的实质是什么!
总是觉得有些怪怪的,不知道问题的实质是什么!
#12
谢谢一勺抹茶,真实很感谢!
#13
默认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。例如,可创建一个查询,从而定义一个视图以在表中检索所有员工薪水低于 $30,000 的行。如果该员工的薪水涨到了 $32,000,则查询视图时该特定员工将不再出现,因其薪水不符合视图所设的标准。但是,WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。
#14
WITH CHECK OPTION 子句强制所有数据修改语句均根据视图执行,以符合定义视图的 SELECT 语句中所设的条件??
什么叫均根据视图进行?
如果要是删除记录的话,肯定要从视图中消失,不是不允许删除吧!
什么叫均根据视图进行?
如果要是删除记录的话,肯定要从视图中消失,不是不允许删除吧!
#15
很明显,你设置在CHECK约束