一直把視圖理解為一個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打開就不會,說明這並不是什么大問題。