mysql.exe -h localhost -P 3306 -u root -p
use mydb;?????——???? 進入數據庫
查看:show index from 表名\G
desc:查看表結構
select * from 表名:查詢所有數據?
視圖(view):是一種有結構,但是沒結果的虛擬表
視圖優點:對外提供友好型,不同的視圖對應不同的數據
一、創建視圖
? ??????1)基本語法:create view 視圖名字 as select 語句;
? ??????2)創建單表視圖:基表只有一個
? ??????3)創建多表視圖:基表來源至少兩個
-- 視圖:單表+多表
create view my_v1 as
select * from my_student;
create view my_v2 as
select * from my_class;
create view my_v3 as
select * from my_student as a left join my_class as
c on s.c_id=c.id;-- 錯誤,id重復
-- 多表視圖
create view my_v3 as
select s.*,c.c_name,c.room from my_student as s
join my_class as c on s.c_id=c.id;
二、查看視圖
show tables [like] / desc 視圖名 / show create table 視圖名;
-- 查看視圖創建語句
show create view my_v3\G????-- \G:橫向查看
三、修改視圖
alter view 視圖名字 as 新的select語句;
-- 視圖使用
select * from my_v1;
select * from my_v2;
select * from my_v3;
-- 修改視圖
alter view my_v1 as
select id,name,age,sex,height,c_id from my_student;
四、刪除視圖
drop view 視圖名字;
-- 先創建v4
create view my_v4 as
select * from my_student;
-- 刪除視圖
drop view my_v4;
五、新增數據
1)多表視圖不能新增數據
-- 多表視圖不能插入數據
insert into my_v3 values(null,'bc20200008','張三豐','男',150,180,3,'Python1910','A204');
2)可以向單表視圖插入數據,但是視圖中包含的字段必須有基表中所有不能為空、或沒有默認值的字段
-- 將學生表的學號字段設置成不允許為空
alter table my_student modify number char(10) not null unique;
-- 單表視圖插入數據:視圖不包含所有不允許為空的字段
insert into my_v1 values(null,'張三豐',150,'男',180,3);
3)視圖是可以向基表插入數據的
-- 單視圖插入數據
insert into my_v2 values(3,'Python1910','A204');
六、刪除數據
1)多表視圖不能刪除數據
-- 多表示圖不能刪除數據
delete from my_v3 where id=1;
2)單表視圖可以刪除數據
-- 單表視圖刪除數據
delete from my_v2 where id=4;
七、更新數據
更新限制:with check option;
-- 多表視圖更新數據
update my_v3 set c_id=4 where id=6;
-- 視圖:age字段限制更新
create view my_v4 as
select * from my_student where age>30 with check
option;
-- 表示視圖的數據來源都是年齡大于30歲的,是由where age>30決定的
-- with check option決定通過視力更新的時候,不能將已經得到的數據age>30的改成<30的
-- 將視圖可以查到的數據改成年齡小于30
update my_v4 set age=29 where id=5;
-- 可以將修改數據讓視圖可以查到:可以改,但是無效果
update my_v4 set age=32 where id=3;