1樓:匿名使用者
update worker_view4 set name='hi';
error............the target table worker_view4 of the update is not updatable.
(4)檢視中的select中包含子查詢。
create view worker_view5(name)
as select (select name from worker);
update worker_view5 set name = '劉佳';
該檢視中包含了子查詢,因此也是不能更新的。
(5)由不可更新的檢視匯出的檢視。
create view worker_view6
as select * from worker_view5;
update worker_view6 set name = '王仔';
因為worker_view6是不可更新的檢視,所以worker_view6也不可以更新的檢視。使用update語句更新時,會出現系統報錯。
(6)建立檢視時,algorithm為temptable型別。
create algorithm=temptable
view worker_view7
as select * from worker;
update worker_view7 set name = '王仔';
因為該檢視algorithm為temptable型別,所以worker_view7不可以更新的檢視。temptable型別就是臨時表型別。系統預設臨時表是不能更新的。
(7)檢視對應的表上存在沒有預設值的列,而且該列沒有包含在檢視裡。例如,表中包含的name欄位沒有預設值,但是檢視中不包含該欄位。那麼這個檢視是不能更新的。
因為,在更新檢視時,這個沒有預設值的記錄將沒有值插入,也沒有null值插入。資料庫系統是不會允許這樣的情況出現的,資料庫系統將會阻止這個檢視更新。
注意:檢視中雖然可以更新資料,但是有很多的限制。一般情況下,最好將檢視作為查詢資料的虛擬表,而不要通過檢視來更新資料。
因為,使用檢視更新資料時,如果沒有全面考慮在檢視中更新資料的限制,可能會造成資料更新失敗。
除了上述條件不能更新檢視以外,with[cascaded|local]check option也將決定檢視能否更新。"local"參數列示更新檢視時要滿足該檢視本身的定義的條件即可;
8.6 刪除檢視
刪除檢視是指刪除資料庫中已經存在的檢視。刪除檢視時,只能刪除檢視的定義,不會刪除資料。mysql中,使用drop view語句來刪除檢視,不會刪除資料。
mysql中,使用drop view語句來刪除檢視。但是,使用者必須擁有drop許可權。
drop view[if exists] 檢視名列表 [restrict|cascade]
例項一:
select drop_priv
from mysql.user
where user='root';
create view worker_view_del1
as select * from worker;
create view worker_view_del2
as select * from worker;
create view worker_view_del3
as select * from worker;
drop view if exists worker_view_del2, worker_view_del3;
8.7 本章例項
在test資料庫中work_info表上進行檢視操作。
1. 在test資料庫中work_info表
2. 插入記錄
3. 建立檢視info_view
4. 檢視檢視info_view的基本結構和詳細結構
5. 檢視檢視info_view的所有記錄
6. 修改檢視info_view
7. 更新檢視
8. 刪除檢視
work_info表的結構
欄位名 欄位描述 資料型別 主鍵 外來鍵 非空 唯一 自增
id 編號 int(10) 是 否 是 是 否
name 姓名 varchar(20) 否 否 是 否 否
gender 姓別 varchar(4) 否 否 是 否 否
age 年齡 int(5) 否 否 否 否 否
address 家庭住址 varchar(50) 否 否 否 否 否
tel **號碼 varchar(20) 否 否 否 否 否
work_info表中的內容
id name gender age address tel
1 張三 m 18 北市市海淀區 01-155151
2 李四 m 22 北京市昌平區 01-215151
3 王五 f 17 湖南省永州市 025-545845
4 趙六 f 25 遼寧省阜新市 0625-514545
(1) 建立work_info表
use test;
create table if not exists work_info (
id int(10) not null unique primary key,
name varchar(20) not null,
gender varchar(4) not null,
age int(5),
address varchar(50),
tel varchar(20)
) default charset=utf8;
(2)向work_info表中插入幾條記錄。
insert into work_info values
(1, '張三', 'm', 18, '北市市海淀區','01-155151'),
(2,'李四', 'm', 22, '北京市昌平區', '01-215151'),
(3,'王五','f',17,'湖南省永州市','025-545845'),
(4,'趙六','f',25,'遼寧省阜新市','0625-514545');
(3) 建立檢視info_view。從work_info表中選出age>20的記錄來建立檢視。檢視的欄位包括id、name、gender和address。
algorithm設定為merge型別。加上with local check option條件。
create algorithm=merge
view info_view(id, name, gender, address)
as select id, name, gender, address
from work_info
where age>20
with local check option;
(4)檢視檢視info_view的基本結構和詳細結構。
show create view info_view \g
(5)檢視檢視info_view的所有記錄。
select * from info_view;
(6)修改檢視info_view,使其顯示age<20的資訊,其他條件不變。
alter algorithm=merge
view info_view(id, name, gender, address)
as select id, name, gender, address
from work_info
where age<20
with local check option;
(7)更新檢視,將id為3的記錄進行更新。設定其gender為m。
update info_view set gender='m' where id=3;
(8)刪除檢視。
drop view info_view;
8.8 上機實踐
題目要求:
(1)在資料庫example下建立college表。
(2)在college表上建立檢視college_view。檢視的欄位包括student_num、student_name、student_age和department。algorithm設定為undefined型別。
加上with local check option條件。
(3)檢視檢視college_view的詳細結構。
(4)更新檢視。向檢視中插入三條記錄。
(5)修改檢視,使其顯示專業為"計算機"的資訊,其他條件不變。
(6)刪除檢視college_view。
college表的結構
欄位名 欄位描述 資料型別 主鍵 外來鍵 非空 唯一 自增
number 學號 int(10) 是 否 是 是 否
name 姓名 varchar(20) 否 否 是 否 否
major 專業 varchar(20) 否 否 是 否 否
age 年齡 int(5) 否 否 否 否 否
college_view表的內容
student_num student_name student_age department
0901 張三 20 外語
0902 李四 22 計算機
0903 王五 19 計算機
use example;
create table college(
number int(10) not null unique primary key,
name varchar(20) not null,
major varchar(20) not null,
age tinyint(3)
) default charset=utf8;
create algorithm=undefined
view college_view(student_num, student_name, student_age, department)
as select number, name, age, major
from college
with local check option;
show create view college_view \g
insert into college_view values
(0901, '張三', 20, '外語'),
(0902, '李四', 22, '計算機'),
(0903, '王五', 19, '計算機');
create or replace algorithm=undefined
view college_view(student_num, student_name, student_age, department)
as select number, name, age, major
from college
where major='計算機'
with local check option;
如何學習資料庫,如何學習資料庫知識?
基本上操作各種資料庫不近相同,其中access是小型資料庫,sqlserver與oracal是中型的,db是大型資料庫。1 學習資料庫的sql語句,每個資料庫基本上上不多,但是都有自己的不同,有的時間型別用 標識有的用 等。但是基本的sql都是一樣的select update,insert,dele...
MYSQL資料庫怎麼用?如何匯入MySQL資料庫?
建立下乙個sqlyog,這個很容易入門,有中文簡體版的,樓上固然好,但是對於初學者不是太合適。如何匯入mysql資料庫?3 如果sql檔案的內容中有建立資料庫的語句,或者想將表存放在已有的資料庫,在這裡就不用建立資料庫。6 開始匯入sql檔案,輸入 source sql檔案的路徑 注意檔案路徑要是複...
mysql資料庫和oracle資料庫的區別
1 體積不同。oracle它體積比較龐大,一般是用來開發大型應用 例如分布式 的。而mysql的體積相對來說比較小,較之oracle更容易安裝 維護以及管理,操作也簡單,最重要的是它是三個中唯一乙個開源資料庫,但目前也屬於oracle公司的產品了。2 容量不同。oracle容量無限,根據配置決定 而...