三. 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. 【Spark基础】:RDD

    我的代码实践:https://github.com/wwcom614/Spark 1.RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式 ...

  2. Redis---List(链表)

    1. 基本结构 Redis 早期版本存储 list 列表数据结构使用的是压缩列表 ziplist 和普通的双向链表 linkedlist,也就是元素少时用 ziplist,元素多时用 linkedli ...

  3. EF6使用Mysql,踏过的那些坑

    在vs2013中使用mysql连接entityFramework经常会遇到这个问题:您的项目引用了最新实体框架:但是,找不到数据连接所需的与版本兼容的实体框架数据提供程序.请退出此向导,安装兼容提供程 ...

  4. java分模块项目在idea中使用maven打包失败(ps:maven常用到的命令)

    一.分模块项目打包失败 情况:项目是分模块创建的,一些公共的方法是单独的一个模块common,其他模块依赖于此模块,poom依赖已经添加了,项目可以正常运行,但使用maven打包时出现了问题:找不到依 ...

  5. 解放双手 | Jenkins + gitlab + maven 自动打包部署项目

    前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...

  6. elasticsearch5.6.3插件部署

    需要注意的是,5.x和2.x插件方面改动很大.参考:https://www.elastic.co/blog/running-site-plugins-with-elasticsearch-5-0.因为 ...

  7. javascript 计算文件MD5 浏览器 javascript读取文件内容

    原则上说,浏览器是一个不安全的环境.早期浏览器的内容是静态的,用户上网冲浪,一般就是拉取网页查看.后来,随着互联网的发展,浏览器提供了非常丰富的用户交互功能.从早期的表单交互,到现在的websocke ...

  8. POJ 2552

    #include<iostream> #include<stdio.h> using namespace std; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ...

  9. oracle 用户权限相关

    --查看数据库下的所有用户: select username from dba_users; --查看当前连接数据库的用户角色 SELECT * FROM USER_ROLE_PRIVS; -- 创建 ...

  10. Attr的visitNewClass()方法解读

    在visitNewClass()方法中有如下注释: We are seeing an anonymous class instance creation.In this case, the class ...