mysql补_mysql-补充

一 视图

视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。

使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用

8f900a89c6347c561fdf2122f13be562.png 临时表应用举例

一 创建视图

8f900a89c6347c561fdf2122f13be562.png View Code

二 使用视图

8f900a89c6347c561fdf2122f13be562.png View Code

我们不应该修改视图中的记录,而且在涉及多个表的情况下是根本无法修改视图中的记录的,如下图

bb33f3b49e598cbe5f43a4f5f5114848.png

三 修改视图

8f900a89c6347c561fdf2122f13be562.png View Code

四 删除视图

语法:DROP VIEW 视图名称

DROP VIEW teacher_view

二 触发器

使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为,注意:没有查询

一 创建触发器

8f900a89c6347c561fdf2122f13be562.png View Code

8f900a89c6347c561fdf2122f13be562.png 插入后触发触发器

特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行。

二 使用触发器

触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。

三 删除触发器

drop trigger tri_after_insert_cmd;

三 事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

8f900a89c6347c561fdf2122f13be562.png View Code

四 存储过程

一 介绍

存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql

使用存储过程的优点:

#1. 用于替代程序写的SQL语句,实现程序与sql解耦

#2. 基于网络传输,传别名的数据量小,而直接传sql数据量大

使用存储过程的缺点:

#1. 程序员扩展功能不方便

补充:程序与数据库结合使用的三种方式

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

#方式一:

MySQL:存储过程

程序:调用存储过程

#方式二:

MySQL:

程序:纯SQL语句

#方式三:

MySQL:

程序:类和对象,即ORM(本质还是纯SQL语句)

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

二 创建简单存储过程(无参)

48304ba5e6f9fe08f3fa1abda7d326ab.png

delimiter //create procedure p1()

BEGIN

select * fromblog;

INSERT into blog(name,sub_time) values("xxx",now());

END //delimiter ;

#在mysql中调用

call p1()

#在python中基于pymysql调用

cursor.callproc('p1')

print(cursor.fetchall())

48304ba5e6f9fe08f3fa1abda7d326ab.png

三 创建存储过程(有参)

对于存储过程,可以接收参数,其参数有三类:

#in 仅用于传入参数用

#out 仅用于返回值用

#inout 既可以传入又可以当作返回值

8f900a89c6347c561fdf2122f13be562.png in:传入参数

8f900a89c6347c561fdf2122f13be562.png out:返回值

8f900a89c6347c561fdf2122f13be562.png inout:既可以传入又可以返回

8f900a89c6347c561fdf2122f13be562.png 事务

四 执行存储过程

48304ba5e6f9fe08f3fa1abda7d326ab.png

--无参数

call proc_name()

--有参数,全in

call proc_name(1,2)

--有参数,有in,out,inout

set @t1=0;

set @t2=3;

call proc_name(1,2,@t1,@t2)

执行存储过程

在MySQL中执行存储过程

48304ba5e6f9fe08f3fa1abda7d326ab.png

8f900a89c6347c561fdf2122f13be562.png 在python中基于pymysql执行存储过程

五 删除存储过程

drop procedure proc_name;

五 函数

MySQL中提供了许多内置函数,例如:

8f900a89c6347c561fdf2122f13be562.png 部分内置函数

8f900a89c6347c561fdf2122f13be562.png 需要掌握函数:date_format

一 自定义函数

#!!!注意!!!

#函数中不要写sql语句(否则会报错),函数仅仅只是一个功能,是一个在sql中被应用的功能

#若要想在begin...end...中写sql,请用存储过程

48304ba5e6f9fe08f3fa1abda7d326ab.png

delimiter //create function f1(

i1 int,

i2 int)

returns int

BEGIN

declare num int;

set num = i1 +i2;

return(num);

END //delimiter ;

48304ba5e6f9fe08f3fa1abda7d326ab.png

8f900a89c6347c561fdf2122f13be562.png View Code

二 删除函数

drop function func_name;

三 执行函数

48304ba5e6f9fe08f3fa1abda7d326ab.png

#获取返回值

select UPPER('egon') into @res;

SELECT @res;

#在查询中使用

select f1(11,nid) ,name from tb2;

48304ba5e6f9fe08f3fa1abda7d326ab.png

六 流程控制

一 条件语句

8f900a89c6347c561fdf2122f13be562.png if条件语句

二 循环语句

8f900a89c6347c561fdf2122f13be562.png while循环

8f900a89c6347c561fdf2122f13be562.png repeat循环

8f900a89c6347c561fdf2122f13be562.png loop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值