视图
1、什么是视图
视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可
2.如何用视图
create view teacher2course as
select * from teacher inner join course on teacher.tid = course.teacher_id;
"""
创建好了之后 验证它的存在navicat验证 cmd终端验证
最后文件验证 得出下面的结论 视图只有表结构数据还是来源于之前的表
delete from teacher2course where id=1;
"""
强调
1、在硬盘中,视图只有表结构文件,没有表数据文件
2、视图通常是用于查询,尽量不要修改视图中的数据
删除视图
drop view 视图名;
触发器
在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器
为何要用触发器
触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行 就会触发触发器的执行,即自动运行另外一段sql代码
创建触发器语法
语法结构 之前 之后 插入 修改 删除
create trigger 触发器的名字 before/after insert/update/delete on 表名 for each row
begin
sql语句
end
"""
需要注意 在书写sql代码的时候结束符是; 而整个触发器的结束也需要分号;
这就会出现语法冲突 需要我们临时修改结束符号
delimiter $$
delimiter ;
该语法只在当前窗口有效
# 删除触发器
drop trigger tri_after_insert_cmd;
事务
什么是事务
开启一个事务可以包含一些sql语句,这些sql语句要么同时成功 要么一个都别想成功,称之为事务的原子性
事务的作用
保证了对数据操作的数据安全性
案例:用交行的卡操作建行ATM机给工商的账户转钱
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
如何使用
# 先介绍事务的三个关键字 再去用表实际展示效果
start transaction; # 开启事务
commit; # 提交事务
rollback; # 回滚事务
存储过程
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql,类似于python中的自定义函数
基本使用
DBA:数据库管理员---------->专门管理数据的人员------->数据备份------>
delimiter $$
create procedure p2()
begin
select * from cmd;
end $$
delimiter ;
# 调用
call p1()
# 针对res需要先提前定义
set @res=10; 定义
select @res; 查看
call p5(1,4,@res) 调用
select @res 查看
# 内部原理:@_p1_0=2,@_p1_1=4,@_p1_2=10;
@_p1_0 取第一个数
@_p1_1 取第二个数
@_p1_2 取第三个数
函数
date_format(sub_time,'%Y-%m') sub_time 字段名 date_dormat 函数 获取现在时间,
'%Y-%m' 格式:年-月
流程控制
# if条件语句
delimiter // #修改结束符号
create PROCEDURE proc_if ()
begin
declare i int default 0;
if i = 1 then
SELECT 1;
elseif i = 2 then
SELECT 2;
else
SELECT 7;
end if;
END //
delimiter ;
# while循环
delimiter // #修改结束符号
CREATE PROCEDURE proc_while ()
BEGIN
DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
SELECT
num ;
SET num = num + 1 ;
END WHILE ;
END //
delimiter ;