视图:某个查询语句设置别名,日后方便使用
CREATE VIEW v1 as SELECT * FROM student WHERE sid >10
-创建:
create view 视图名称 as SQL
视图是虚拟的
-修改
alter view 视图名称 as SQL
-删除
drop view 视图名称
触发器:当对某张表做:增删改操作的时候,可以使用触发器自定义关联行为
# 插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 删除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 删除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END delimiter //
create TRIGGER t1 BEFORE INSERT on student for each ROW
BEGIN
INSERT into teacher(tname) VALUES('tim');
END //
delimiter ;
-- INSERT INTO student(gender,class_id,sname) VALUES('女',2,'多长'); # NEW 代指新数据,在两张表中插入同样的数据
# OLD 代指老数据 在两张表中删除和更新同样的数据
-- delimiter //
-- create TRIGGER t1 BEFORE INSERT on student for each ROW
-- BEGIN
-- INSERT into teacher(tname) VALUES(NEW.sname);
-- END //
-- delimiter ;
内置函数:
执行函数
-- SELECT CURDATE() #日期
-- SELECT CHAR_LENGTH('st') #字符串长度
-- SELECT CONCAT('tim','ttutu','ssl') #拼接
时间格式化:
SELECT DATE_FORMAT(date,format)
SELECT DATE_FORMAT('2009-10-04', '%W %M %Y');
自定义函数:
delimiter \\
create function f1(
i1 int,
i2 int)
returns int
BEGIN
declare num int;
set num = i1 + i2;
return(num);
END \\
delimiter ;
# 存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。
# 保存在MySQL上的一个别名---》一坨SQL语句 方式一:
Mysql:存储过程
程序:调用存储过程
方式二:
mysql:
程序:sql语句
方式三:
mysql
程序:类和对象(sql语句)
delimiter //
CREATE PROCEDURE p1()
BEGIN
SELECT * FROM student;
INSERT into teacher(tname) VALUES("ct");
END //
delimiter ;
call p1()
import pymysql
conn = pymysql.connect(host='127.0.0.1',user='root',password='',database='homework666',charset='utf8')
cursor = conn.cursor()
cursor.callproc('p1',(12,2))
conn.commit()
result = cursor.fetchall()
print(result)
cursor.close()
conn.close()
 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,
out n2 int
)
BEGIN set n2 = 123123;
select * from student where sid > n1;
END //
delimiter ;
set @v1=123;
call p3(12,@v1);
SELECT @v1;
import pymysql
conn = pymysql.connect(host='127.0.0.1',user='root',password='',database='homework666',charset='utf8')
cursor = conn.cursor()
cursor.callproc('p3',(12,2))
r1 = cursor.fetchall()
print(r1)
cursor.execute('select @_p3_0,@_p3_1')
r2 = cursor.fetchall()
print(r2)
cursor.close()
conn.close()
# 事务:
'''
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 ;
'''
# 游标
# 1、声明游标
# 2、获取A表中数据
# my_cursor select id,num form A
# 3、for row_id,row_num in my_cursor:
# 检测循环是否还有数据,如果无数据
# break
# insert into B(num) values(row_id+row_num)
'''
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; 执行:
call p6()
'''
# 动态执行SQL(防SQL注入)
'''伪代码
delimiter //
create procedure p7(
in tp1 varchar(225),
in arg int
)
begin
1.预检测某个东西 sql语句的合法性
2.格式化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 ; '''

Python9-MySQL-MySQL存储过程-视图-触发器-函数-day45的更多相关文章

  1. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

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

    1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TAB ...

  3. MySQL笔记 存储过程 游标 触发器

    第二十三章 使用存储过程 MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就 ...

  4. python 全栈开发,Day64(视图,触发器,函数,存储过程,事务)

    昨日内容回顾 pymysql:属于python的一个模块 pip3 install pymysql conn = pymysql.connect(...,charset = 'uft8') 创建游标 ...

  5. MySql的存储过程和触发器

    Mysql的存储过程是类似于其它编程语言中的函数的功能,存储过程内部可以使用顺序循环和转移三种基本程序结构,而且整个存储过程可以接受和返回参数. 创建存储过程(procedure)时,因为其内部有以; ...

  6. Mysql之存储过程与存储函数

    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语 ...

  7. mysql 视图/触发器/函数

    一.视图 作用:简写代码,与临时表的作用差不多 .创建 create view 视图名 as SQL语句 .修改 alter view 视图名 as 新SQL语句 .删除 drop view 视图名 ...

  8. Database学习 - mysql 视图/触发器/函数

  9. 7.MySQL优化---存储过程和存储函数

    转自互联网. 当一个大型系统在建立时,会发现,很多的SQL操作是有重叠的,个别计算是相同的,比如:业务系统中,计算一张工单的计算方式.当遇到这些情况时,我们运用存储过程就是一个非常棒的优化啦.那么,什 ...

随机推荐

  1. Spring事务管理的xml方式

    一个业务的成功: 调用的service是执行成功的,意味着service中调用的所有的dao是执行成功的.  事务应该在Service层统一控制. 如果手动去实现,则需要对dao进行代理,在方法前后进 ...

  2. 一个简单的CI分页类

    [php] view plaincopy <span style="font-size:16px;">/** * * 关于 页码有效性的判断需要加在 控制器中判断,即当 ...

  3. 让javascript加载速度倍增的方法(解决JS加载速度慢的问题)

    通常我们的网站里面会加载一些js代码,统计啊,google广告啊,百度同盟啊,阿里妈妈广告代码啊,一堆,最后弄得页面加载速度很慢,很慢. 解决办法:换一个js包含的方式,让javascript加载速度 ...

  4. zk小结

    一 ZooKeeper功能 1.文件系统 2.通知机制 二 Zookeeper文件系统 每个子目录项都被称作为znode,和文件系统一样,我们能够自由的增加.删除znode,在一个znode下增加.删 ...

  5. This is your path and you will pursue it with excellence.

    This is your path and you will pursue it with excellence.自己选的路就要走出精彩.

  6. Notification高级技巧

    观察Notification这个类,你会发现里面还有很多我们没有使用过的属性.先来看看sound这个属性吧,它可以在通知发出的时候播放一段音频,这样就能够更好地告知用户有通知到来.sound 这个属性 ...

  7. OpenSSL context 的几个参数

    NAME SYNOPSIS DESCRIPTION NOTES BUGS RETURN VALUES EXAMPLES SEE ALSO NAME SSL_CTX_set_verify, SSL_se ...

  8. GIT教程笔记

    GIT的工作流程: 先在工作目录中添加.修改文件 一般是在工作目录建立你的工程文件夹,然后通过命令行进入文件夹后  git init 初始化 将需要进行版本管理的文件放入缓存区  git add 文件 ...

  9. UVALive 4731 Cellular Network(贪心,dp)

    分析: 状态是一些有序的集合,这些集合互不相交,并集为所有区域.显然枚举集合元素是哪些是无法承受的, 写出期望的计算式,会发现,当每个集合的大小确定了以后,概率大的优先访问是最优的. 因此先对u从大到 ...

  10. hdu-1598 find the most comfortable road---kruskal+枚举下界

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1598 题目大意: XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Ro ...