視圖:
虛擬表,根據(jù)SQL語句獲取動(dòng)態(tài)的數(shù)據(jù)集,并為其命名,可當(dāng)一般表使用。
創(chuàng)建:
create view student_veiw as select * from teacher where tname='李平老師';
改:
alter view teacher_view as select from teacher where tname='egon';
觸發(fā)器:
定制用戶需要進(jìn)行的操作,沒有查詢
創(chuàng)建觸發(fā)器:
delimiter //
create
trigger tri_after_insert_cmd_log
after insert
on cmd_log for each row
begin
if new.is_success='no' then
insert into err_log(cname,stime) values(new.cmd_name,new.sub_time);
end if;
end //
delimiter ;
測(cè)試執(zhí)行觸發(fā)器
insert into err_log(cname,stime) values('sb',1213),('sb2',1213),('s垃圾',1213);
事務(wù):
將多條sql語句打包成原子性操作,操作完成后commit或者rollback,以保護(hù)數(shù)據(jù)。
create table user1(
id int primary key auto_increment,
name char(32),
balance int
);
insert into user1(name,balance) values
('劉備',200),
('關(guān)羽',200),
('張飛',200);
start transaction;
update user1 set balance=100 where name ='劉備';
update user1 set balance=100 where name ='關(guān)羽';
update user1 set balance=100 where name ='張飛';
#此時(shí)對(duì)數(shù)據(jù)的操作是程序級(jí)別的,要在硬盤級(jí)別更改數(shù)據(jù),需要以下操作:
commit; 確認(rèn)以上的更改
rollback:撤銷以上操作
存儲(chǔ)過程:
包含一堆sql,調(diào)用存儲(chǔ)過程就可以執(zhí)行一堆sql語句,相當(dāng)于python中封裝好的函數(shù)。
存儲(chǔ)參數(shù):in,out,inout
創(chuàng)建存儲(chǔ)過程:(無參)
delimiter //
create procedure p1()
begin
select * from user1;
insert into user1(name,balance) values('趙云',100);
insert into user1(name,balance) values('黃忠',190);
update user1 set name = '馬超' where balance=190;
end //
delimiter ;
調(diào)用存儲(chǔ)過程p1():
mysql中: call p1();
python中:
cursor.callproc('p1')
cursor.commit; #確認(rèn)
創(chuàng)建存儲(chǔ)過程:(有參)
delimiter //
create procedure p2(
in i int
)
begin
select * from user1 where id > i ;
end //
delimiter;
調(diào)用存儲(chǔ)過程p2():
mysql中:call p2(3);
python中:
cursor.callproc('p2',args='3')
out參數(shù):
delimiter //
create procedure p3(
in n1 int,
out res int
)
BEGIN
select * from user1 where id > n1;
set res = 1; #為res賦值1,當(dāng)res為1時(shí),即begin段執(zhí)行,
END //
delimiter ;
調(diào)用:
set @res=0; #設(shè)置全局變量@res
call p3(3,@res);
select @res; #查看全局變量的值
自定義函數(shù):
delimiter //
create function f1(
m int,
n int)
returns int
begin
declare num int;
set num = m + n;
return(num);
end //
delimiter ;
執(zhí)行:
select f(1,2) #查看結(jié)果
刪除:
刪除視圖:drop view teacher_view;
刪除觸發(fā)器:drop trigger tri_name;
刪除流程:drop procedure p1;
刪除自定義函數(shù):drop function f1;