mysql:视图、触发器、事务、存储过程、自定义函数

视图:

虚拟表,根据SQL语句获取动态的数据集,并为其命名,可当一般表使用。

创建:

create view student_veiw as select * from teacher where tname='李平老师';

改:

alter view teacher_view as select from teacher where tname='egon';

触发器:

定制用户需要进行的操作,没有查询

创建触发器:

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 ;

测试执行触发器

insert into err_log(cname,stime) values('sb',1213),('sb2',1213),('s垃圾',1213);


事务:

将多条sql语句打包成原子性操作,操作完成后commit或者rollback,以保护数据。

create table user1(

id int primary key auto_increment,

name char(32),

balance int

);

insert into user1(name,balance) values

('刘备',200),

('关羽',200),

('张飞',200);

start transaction;

update user1 set balance=100 where name ='刘备';

update user1 set balance=100 where name ='关羽';

update user1 set balance=100 where name ='张飞';

#此时对数据的操作是程序级别的,要在硬盘级别更改数据,需要以下操作:

commit; 确认以上的更改

rollback:撤销以上操作

存储过程:

包含一堆sql,调用存储过程就可以执行一堆sql语句,相当于python中封装好的函数。

存储参数:in,out,inout

创建存储过程:(无参)

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 ;

调用存储过程p1():

mysql中: call p1();

python中:

cursor.callproc('p1')

cursor.commit; #确认

创建存储过程:(有参)

delimiter //

create procedure p2(

in i int

)

begin

select * from user1 where id > i ;

end //

delimiter;

调用存储过程p2():

mysql中:call p2(3);

python中:

cursor.callproc('p2',args='3')

out参数:

delimiter //

create procedure p3(

in n1 int,

out res int

)

BEGIN

select * from user1 where id > n1;

set res = 1; #为res赋值1,当res为1时,即begin段执行,

END //

delimiter ;

调用:

set @res=0; #设置全局变量@res

call p3(3,@res);

select @res; #查看全局变量的值

自定义函数:

delimiter //

create function f1(

m int,

n int)

returns int

begin

declare num int;

set num = m + n;

return(num);

end //

delimiter ;

执行:

select f(1,2) #查看结果


删除:

删除视图:drop view teacher_view;

删除触发器:drop trigger tri_name;

删除流程:drop procedure p1;

删除自定义函数:drop function f1;

你可能感兴趣的:(mysql:视图、触发器、事务、存储过程、自定义函数)