一直把视图理解为一个select语句而已,视图一般就是用于查询,不会通过视图来更新表或视图本身的数据,所以视图根本不需要什么主键。今天自己建了一个视图view_test:
drop view if exists view_test create view view_test as select a.c1,a.c2, b.c1,b.c2, c.c1,c.c2, d.c1,d.c2 from table_A a join teble_B b on a.c3=b.c3 join table_C c on b.c4=c.c4 join table_D d on c.c5=d.c5 where d.c6 in ( select c6 from table_E where c5=(select c5 from table_D where c7='123321') ) order by a.c1
在Navicat of MySQL中打开这个视图的时候,弹出如下的提示(网上的图,图中第一行的v_sys_user就是自己创建的视图名称),说这个视图没有主键,但是能正常查询出视图的结果。
后来在 http://blog.csdn.net/wufengui1315/article/details/11620393
这里查到,说用了join或者where子查询里如果用了From子句中的表的话就会报这个提示,于是我把where子句去掉,改成:
drop view if exists view_test create view view_test as select a.c1,a.c2, b.c1,b.c2, c.c1,c.c2, d.c1,d.c2 from table_A a join teble_B b on a.c3=b.c3 join table_C c on b.c4=c.c4 join table_D d on c.c5=d.c5 order by a.c1
结果还是报相同的提示框,后来不小心忽略了 "order by a.c1" 这一行执行上述语句,打开的时候,就没这个提示了,再把where子句加回来,但把order by语句去掉,打开也不会报错,说明问题出在order by子句,而不是什么where 或者join.只要去掉order by语句就好了。
另外,报错的视图语句(包含order by语句),在Navicat for MySQL中打开会报提示,但用MySQL Workbench打开就不会,说明这并不是什么大问题。