Mysql视图触发器函数事务

1. 视图
100个SQL:
88: v1

select .. from v1
select asd from v1
某个查询语句设置别名,日后方便使用

- 创建
create view 视图名称 as SQL

PS: 虚拟
- 修改
alter view 视图名称 as SQL

- 删除
drop view 视图名称;

2. 触发器

当对某张表做:增删改操作时,可以使用触发器自定义关联行为

insert into tb (....)

-- delimiter //
-- create trigger t1 BEFORE INSERT on student for EACH ROW
-- BEGIN
-- INSERT into teacher(tname) values(NEW.sname);
-- INSERT into teacher(tname) values(NEW.sname);
-- INSERT into teacher(tname) values(NEW.sname);
-- INSERT into teacher(tname) values(NEW.sname);
-- END //
-- delimiter ;
--

-- insert into student(gender,class_id,sname) values(‘女‘,1,‘陈涛‘),(‘女‘,1,‘张根‘);

-- NEW,代指新数据
-- OLD,代指老数据

3. 函数
def f1(a1,a2):
return a1 + a2

f1()
bin()

内置函数:
执行函数 select CURDATE();

blog
id title ctime
1 asdf 2019-11
2 asdf 2019-11
3 asdf 2019-10
4 asdf 2019-10

select ctime,count(1) from blog group ctime

select DATE_FORMAT(ctime, "%Y-%m"),count(1) from blog group DATE_FORMAT(ctime, "%Y-%m")
2019-11 2
2019-10 2

自定义函数(有返回值):

delimiter \\
create function f1(
i1 int,
i2 int)
returns int
BEGIN
declare num int default 0;
set num = i1 + i2;
return(num);
END \\
delimiter ;

SELECT f1(1,100);

4. 存储过程
保存在MySQL上的一个别名 => 一坨SQL语句

别名()

用于替代程序员写SQL语句

方式一:
MySQL: 存储过程
程序:调用存储过程
方式二:
MySQL:。。
程序:SQL语句
方式三:
MySQL:。。
程序:类和对象(SQL语句)

1. 简单
create procedure p1()
BEGIN
select * from student;
INSERT into teacher(tname) values("ct");
END

call p1()
cursor.callproc(‘p1‘)
2. 传参数(in,out,inout)
delimiter //
create procedure p2(
in n1 int,
in n2 int
)
BEGIN

select * from student where sid > n1;
END //
delimiter ;

call p2(12,2)
cursor.callproc(‘p2‘,(12,2))

3. 参数 out
delimiter //
create procedure p3(
in n1 int,
inout n2 int
)
BEGIN
set n2 = 123123;
select * from student where sid > n1;
END //
delimiter ;

set @v1 = 10;
call p2(12,@v1)
select @v1;

set @_p3_0 = 12
ser @_p3_1 = 2
call p3(@_p3_0,@_p3_1)
select @_p3_0,@_p3_1

cursor.callproc(‘p3‘,(12,2))
r1 = cursor.fetchall()
print(r1)

cursor.execute(‘select @_p3_0,@_p3_1‘)
r2 = cursor.fetchall()
print(r2)

=======> 特殊
a. 可传参: in out inout
b. pymysql

cursor.callproc(‘p3‘,(12,2))
r1 = cursor.fetchall()
print(r1)

cursor.execute(‘select @_p3_0,@_p3_1‘)
r2 = cursor.fetchall()
print(r2)

为什么有结果集又有out伪造的返回值?

delimiter //
create procedure p3(
in n1 int,
out n2 int 用于标识存储过程的执行结果 1,2
)
BEGIN
insert into vv(..)
insert into vv(..)
insert into vv(..)
insert into vv(..)
insert into vv(..)
insert into vv(..)
END //
delimiter ;

4. 事务

delimiter //
create procedure p4(
out status int
)
BEGIN
1. 声明如果出现异常则执行{
set status = 1;
rollback;
}

开始事务
-- 由秦兵账户减去100
-- 方少伟账户加90
-- 张根账户加10
commit;
结束

set status = 2;

END //
delimiter ;

===============================
delimiter \\
create PROCEDURE p5(
OUT p_return_code tinyint
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END;

START TRANSACTION;
DELETE from tb1;
insert into tb2(name)values(‘seven‘);
COMMIT;

-- SUCCESS
set p_return_code = 2;

END\\
delimiter ;

5. 游标

delimiter //
create procedure p6()
begin
declare row_id int; -- 自定义变量1
declare row_num int; -- 自定义变量2
declare done INT DEFAULT FALSE;
declare temp int;

declare my_cursor CURSOR FOR select id,num from A;
declare CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

open my_cursor;
xxoo: LOOP
fetch my_cursor into row_id,row_num;
if done then
leave xxoo;
END IF;
set temp = row_id + row_num;
insert into B(number) values(temp);
end loop xxoo;
close my_cursor;

end //
delimter ;

6. 动态执行SQL(防SQL注入)

delimiter //
create procedure p7(
in tpl varchar(255),
in arg int
)
begin
1. 预检测某个东西 SQL语句合法性
2. SQL =格式化 tpl + arg
3. 执行SQL语句

set @xo = arg;
PREPARE xxx FROM ‘select * from student where sid > ?‘;
EXECUTE xxx USING @xo;
DEALLOCATE prepare prod;
end //
delimter ;

call p7("select * from tb where id > ?",9)

===>

delimiter \\
CREATE PROCEDURE p8 (
in nid int
)
BEGIN
set @nid = nid;
PREPARE prod FROM ‘select * from student where sid > ?‘;
EXECUTE prod USING @nid;
DEALLOCATE prepare prod;
END\\
delimiter ;

原文地址:https://www.cnblogs.com/duhong0520/p/11297839.html

时间: 2024-10-07 05:50:05

Mysql视图触发器函数事务的相关文章

mysql 查询表,视图,触发器,函数,存储过程

1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TABLE_TYPE ='BASE TABLE' mysql查询建表语句: show create table `表名` 2.mysql查询所有视图: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名'

数据库 --- 40 视图 触发器 存储过程 事务 函数

一.视图  (view) 视图是一种虚拟表,可以把查询出来的临时表保存下来 1.创建视图 2.删除视图 3.修改视图,(原始表的记录也跟着修改) 4.查看视图 二.  触发器(trigger)可进行  增删改  操作 1.创建触发器 2.删除触发器 实例: 三.存储过程  1. 优点: 缺点: 2.程序与数据库结合使用的三种方式 3.创建简单存储过程(无参) 4.创建存储过程(有参) ① in  传入参数 ② out  返回值 #查看存储过程的一些信息:show create procedure

Mysql之视图 触发器 事务 存储过程 函数

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> se

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

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,

MySQL之视图、触发器、事务、存储过程、函数 流程控制

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部都做了,也就是说它想要完成一件事,以后想开发的人,例如想写python程序的人,你就专门的写你自己的python程序,以后凡是关于数据的增删改查,全部都在MySQL里面完成,也就是说它想实现一个数据处理与应用程序的一个完全的解耦和状态,比如说,如果我是个应用程序员,我想要查询数据,我不需要自己写sql语句,只需要调用mysql封装好的一些功能,直

43 MySQL视图、触发器、事务、存储过程、函数

视图 1.什么是视图 通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如需频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 注意: 1)在硬盘中,视图只有表结构文件,没有表数据文件 2)视图通常是用于查询,尽量不要修改视图中的数据 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; -- 删除视图 drop

视图、触发器、事务、存储过程、函数

阅读目录 视图  view 触发器  trigger 事务  transaction 存储过程   procedure 函数 流程控制 一: 视图  view 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数

MySQL——视图、触发器、存储过程、函数、事物、数据库锁、数据库备份

一.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 视图有五个特点: 1.视图的列可以来自不同的表,是表的抽象和逻辑意义上简历的新关系. 2.视图是由基本表(实表)产生的表(虚表). 3.视图的建立和删除不影响基本表. 4.对视图内容的更新(添加.删除和修改)直接影响基本表. 5.当视图来自多个基本表时,不允许添加和删除数据. 1.创建视图 create view 视图名称 as sql 查询语句 2.使用视图 select * from 视图名

视图,触发器,事务,存储过程,函数,流程控制,

一,视图1,什么是视图? 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的话直接使用即可2,为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询3,怎么用? 在查询前面加 create view 视图名称 as sql语句 create view teacher_view as select tid from teacher where tname='李平老师': 强调:在硬盘中,视图只有表结构文件,没有数据文件 视图开发尽量不用 因为是在mysql里面 ,视图通常用于插叙,尽量不要