视图:
虚拟表,根据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;