python学习之老男孩python全栈第九期_数据库day005知识点总结 —— MySQL数据库day5
三. MySQL视图(不常用)
给某个查询语句设置个别名(视图名),日后方便使用
- 创建:
create view 视图名 as SQL;
PS:视图是虚拟的
- 修改:
alter view 视图名 as SQL; - 删除
drop view 视图名; create view v1 as select * from student where sid>10;
select * from v1;
student表增加数据,v1视图也会随着增加,不能在v1里面增加数据 四. 触发器(不推荐使用) # 插入前
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 五. 函数
内置函数:
执行函数:select CURRENT_DATE(); 部分内置函数:
1. CHAR_LENGTH(str)
返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
2. CONCAT(str1,str2,...)
字符串拼接
如有任何一个参数为NULL ,则返回值为 NULL。
... blog
id title ctime
1 alex1 2017-08-09 11:12
2 alex2 2017-08-03 11:12
3 alex3 2018-11-07 11:12
4 alex4 2018-11-07 11:12 怎么把月份一样的分组?
select ctime,count(1) from blog group DATE_FORMAT(ctime,'%Y-%m') 自定义函数(有返回值):
delimiter \\
create function f1(
i1 int,
i2 int)
returns int
BEGIN
declare num int default 0; 默认为0
set num = i1 + i2;
return(num);
END \\
delimiter ; select f1(1,100); 六. 存储过程(重要,有可能用的不多)
保存在MySQL上的一个别名 => 一坨SQL语句
使用别名就能查到结果 别名() 用于替代程序员写SQL语句 方式一:(不是很多)
MySQL:存储过程
程序:调用存储过程
方式二:
MySQL:...
程序:SQL语句
方式三:
MySQL:...
程序:类和对象(SQL语句) 创建存储过程:
1. 简单存储过程
delimiter //
create PROCEDURE p1()
BEGIN
SELECT * from student;
insert into teacher(tname) VALUES('ppp');
END //
delimiter ; call p1(); 执行 python中: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,3); 执行 python 中:cursor.callproc('p2',(12,2)) 3. 参数 out
delimiter //
create PROCEDURE p3(
in n1 int,
out n2 int
)
BEGIN
set n2 = 123456;
SELECT * from student where sid>n1;
END //
delimiter ; set @v1 = 0 ;
call p3(12,@v1)
select @v1; # set @_p3_0 = 12
set @_p3_1 = 2
call p3(@_p3_0,@_p3_1)
select @_p3_0,@_p3_1; python中:cursor.execute('select @_p3_0,@_p3_1') cursor.execute('select @_p3_0,@_p3_1') # 格式就是这样
ret2 = cursor.fetchall()
print(ret2) # ((12, 123456),) 特性:
1. 可传参:in out inout
2. pymysql
cursor.callproc('p3',(12,2))
ret1 = cursor.fetchall()
print(ret1) cursor.execute('select @_p3_0,@_p3_1')
ret2 = cursor.fetchall()
print(ret2)
为什么有结果集又有out伪造的返回值? delimiter //
create PROCEDURE p3(
in n1 int,
out n2 int # 用于标识存储过程的执行结果
)
BEGIN
insert into teacher(tname) ...;
insert into teacher(tname) ...;
insert into teacher(tname) ...;
insert into teacher(tname) ...;
insert into teacher(tname) ...;
insert into teacher(tname) ...;
END //
delimiter ; 执行完,不知道执行是否成功。
out:用于标识存储过程的执行结果 4. 事务
伪代码:
delimiter //
create PROCEDURE p4(
out status int
)
BEGIN
1. 声明如果出现异常,则执行(
set status = 1;
rollback;
) 开始事务
-- alex账户减去100
-- egon账户加上90
-- wusir账户加上10
commit;
结束
set status = 2; END //
delimiter ; ---------------------------------------------------------------------------------------
delimiter \\
create PROCEDURE p1(
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 ;
python学习之老男孩python全栈第九期_数据库day005知识点总结 —— MySQL数据库day5的更多相关文章
- python学习之老男孩python全栈第九期_第一次周末考试题(over)第三次添加完毕
day 6python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1. 简述变量命名规范(3分) 答:(1) 变量为数字,字母以及下划线的任意组合 ...
- python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4
复习: 1. MySQL:文件管理的软件 2. 三部分: - 服务端 - SQL语句 - 客户端 3. 客户端: - MySQL - navicat 4. 授权操作: - 用户操作 - 授权操作 5. ...
- python学习之老男孩python全栈第九期_数据库day002知识点总结 —— MySQL数据库day2(全部)
一. 复习1. MySQL: - 服务端 - 客户端2. 通信交流 - 授权 - SQL语句 - 数据库 创建数据库: create database db1 default charset utf8 ...
- python学习之老男孩python全栈第九期_第二周学习总结
迭代器 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的 1. 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir(数据) ) 可迭代的 ...
- python学习之老男孩python全栈第九期_数据库day002 -- 作业 (数据库为day001创建的数据库)
1.自行创建测试数据 对score表进行优化: 添加数据: 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 为了方便做题,额外增加几条数据 查询: 3.查询平均成绩大于60分的同学的学号和 ...
- python学习之老男孩python全栈第九期_数据库day001知识点总结 —— MySQL操作数据库以及数据表、基本数据类型、基本增删改查、外键定义以及创建
一. 学习SQL语句规则以及外键 1. 操作文件夹 create database db2; 创建文件夹 create database db2 default charset utf8; 创建文件夹 ...
- python学习之老男孩python全栈第九期_数据库day004 -- 作业
https://www.cnblogs.com/YD2018/p/9451809.html 11. 查询学过“001”并且也学过编号“002”课程的同学的学号.姓名 select student.si ...
- python学习之老男孩python全栈第九期_数据库day003知识点总结 —— MySQL数据库day3
复习: 1. 增 insert into xx(name) values('root'),('xxx'); insert into xx(name) select id from tb1; 2. 自增 ...
- python学习之老男孩python全栈第九期_数据库day003 -- 作业
数据库: class: course: student: teacher: score: /* Navicat Premium Data Transfer Source Server : local ...
随机推荐
- Centos7调整swap分区
如何让服务器响应更快?如何避免应用出现内存不足的错误?最简单的方法就是增加交换空间.Swap是存储盘上的一块自留地,操作系统可以在这里暂存一些内存里放不下的东西. 这从某种程度上相当于增加了服务器的可 ...
- 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)
解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件 ...
- vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件
vue教程3-03 vue组件,定义全局.局部组件,配合模板,动态组件 一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3&g ...
- [Umbraco] 创建第一个页面
如何创建一个页面,很简单. 进入settings,首先右键点击“Document Types”, 在出现的菜单点击"Create",在弹出的窗口中 Master Document ...
- 课程一(Neural Networks and Deep Learning),第四周(Deep Neural Networks)—— 1.Practice Questions: Key concepts on Deep Neural Networks
[解释] [解释] 比如算法中的learing rateα(学习率).iterations(梯度下降法循环的数量).L(隐藏层数目).n[l] (隐藏层单元数目).choice of activati ...
- (转)30 个实例详解 TOP 命令
原文:http://blog.jobbole.com/112873/?utm_source=blog Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服 ...
- KahaDB简介
ActiveMQ 5.3以后,出现了KahaDB.她是一个基于文件支持事务的消息存储器,是一个可靠,高性能,可扩展的消息存储器. 她的设计初衷就是使用简单并尽可能的快.KahaDB的索引使用一 ...
- 整理几个 RPC 框架
gRPChttp://www.grpc.io/https://github.com/grpcMotan支撑微博千亿调用的轻量级RPC框架:Motanhttp://h2ex.com/820WangleW ...
- 站在巨人肩上的.NET Core 2.1
.NET Core 1.0自发布两年以来,得到了开发者群体相当高地认可. 下图来自Stack overflow survey 2018的统计: .NET Core已经成为前五的主流框架工具,现今借鉴了 ...
- 通俗易懂详解Java代理及代码实战
一.概述 代理模式是Java常用的设计模式之一,实现代理模式要求代理类和委托类(被代理的类)具有相同的方法(提供相同的服务),代理类对象自身并不实现真正的核心逻辑,而是通过调用委托类对象的相关方法来处 ...