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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,906评论 0 10
  • 转载自这里 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Sto...
    杜七阅读 2,427评论 4 27
  • 一. Java基础部分.................................................
    wy_sure阅读 3,882评论 0 11
  • 今天早上,送完儿子上学,我在路上看到路中间有一只燕子,躺在那里,我骑过去后又回来,看看它还活着吗?刚调转回头,就看...
    水玲珑英子阅读 908评论 1 0