三. 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的更多相关文章

  1. python学习之老男孩python全栈第九期_第一次周末考试题(over)第三次添加完毕

    day 6python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1. 简述变量命名规范(3分) 答:(1) 变量为数字,字母以及下划线的任意组合 ...

  2. python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4

    复习: 1. MySQL:文件管理的软件 2. 三部分: - 服务端 - SQL语句 - 客户端 3. 客户端: - MySQL - navicat 4. 授权操作: - 用户操作 - 授权操作 5. ...

  3. python学习之老男孩python全栈第九期_数据库day002知识点总结 —— MySQL数据库day2(全部)

    一. 复习1. MySQL: - 服务端 - 客户端2. 通信交流 - 授权 - SQL语句 - 数据库 创建数据库: create database db1 default charset utf8 ...

  4. python学习之老男孩python全栈第九期_第二周学习总结

    迭代器 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的 1. 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir(数据) ) 可迭代的 ...

  5. python学习之老男孩python全栈第九期_数据库day002 -- 作业 (数据库为day001创建的数据库)

    1.自行创建测试数据 对score表进行优化: 添加数据: 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 为了方便做题,额外增加几条数据 查询: 3.查询平均成绩大于60分的同学的学号和 ...

  6. python学习之老男孩python全栈第九期_数据库day001知识点总结 —— MySQL操作数据库以及数据表、基本数据类型、基本增删改查、外键定义以及创建

    一. 学习SQL语句规则以及外键 1. 操作文件夹 create database db2; 创建文件夹 create database db2 default charset utf8; 创建文件夹 ...

  7. python学习之老男孩python全栈第九期_数据库day004 -- 作业

    https://www.cnblogs.com/YD2018/p/9451809.html 11. 查询学过“001”并且也学过编号“002”课程的同学的学号.姓名 select student.si ...

  8. python学习之老男孩python全栈第九期_数据库day003知识点总结 —— MySQL数据库day3

    复习: 1. 增 insert into xx(name) values('root'),('xxx'); insert into xx(name) select id from tb1; 2. 自增 ...

  9. python学习之老男孩python全栈第九期_数据库day003 -- 作业

    数据库: class:  course: student: teacher: score: /* Navicat Premium Data Transfer Source Server : local ...

随机推荐

  1. Java知识锦囊

    最近突然想回顾一下之前的文章,回顾复习一下,正好把觉得还不错的文章收录到这里,方便查阅 Java 2018-04-02 Java计数器之CountDownLatch.CyclicBarrier.Sem ...

  2. 代码审计| HDWiki 漏洞(一)

    i春秋核心白帽:yanzm 0×00 背景 最近拿到一个源码素材于是对这个源码进行分析发现了不少漏洞本篇先将一些漏洞进行分析下一篇再进行GetShell方法的分析期待和师傅们的交流. 0×01 漏洞分 ...

  3. zookeeper的命令使用

    这篇是接着上篇zookeeper集群做的,所以有不熟悉的可以返回看下zookeeper集群的相关内容. 这里是相关的命名行使用方法: 基本命令用法 连接server zkCli.sh -server ...

  4. 开发创建XMPP“发布订阅”扩展(xmpp pubsub extend)

    发布订阅(PubSub)是一个功能强大的XMPP协议扩展.用户订阅一个项目(在xmpp中叫做node),得到通知时,也即当事项节点更新时.xmpp服务器通知用户(通过message格式). 节点类型: ...

  5. vue教程1-08 交互 get、post、jsonp

    vue教程1-08 交互 get.post.jsonp 一.如果vue想做交互,引入: vue-resouce 二.get方式 1.get获取一个普通文本数据: <!DOCTYPE html&g ...

  6. 解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题

    一.背景 最近在整合了Spring+Shiro+Redis实现tomcat集群session共享的问题之后,发布以后运行以后发现老是会出现:org.apache.shiro.session.Unkno ...

  7. react项目中使用antd

    1.antd官网: https://ant.design/docs/react/introduce-cn 2.React中使用Antd 1.安装antd npm install antd --save ...

  8. 【杂谈】对CopyOnWriteArrayList的认识

    前言 之前看<Java并发编程>这本书的时候,有看到这个,只记得"读多写少"."写入时复制".书中没有过多讲述,只是一笔带过(不过现在回头看,发现讲 ...

  9. [Golang] GOROOT、GOPATH和Project目录说明

    go env环境查看 用go env 可查看当前go环境变量. $ go env GOARCH="amd64" GOBIN="" GOEXE="&qu ...

  10. Java中数据类型转换大全(个人总结)

    一.字符串转换为其他类型 1.将字符串转化为int型 (1)方法一 int i = Integer.parseInt(String str); (2)方法二 int i = Integer.value ...