触发器,视图,事务,存储过程,函数,流程控制,

视图

通过查询获得一张虚拟表,然后保存下来
1.创建视图后,视图只有表结构文件,没有表数据文件
2.视图通常用于查询,尽量不要修改视图中的数据

创建视图

image

删除视图

image

触发器

在满足某张表数据的增,删,改的情况下,自动触发的功能称之为触发器

创建触发器
image

查看触发器
show triggers;

删除触发器
drop trigger 触发器名

事务

开启一个事务可以包含一些sql语句,这些sql语句要么同时成功,要么一个都别想成功,称为事务的原子性
事务的作用:对数据操作的数据安全性

事务具有四个属性:原子性,一致性,隔离性,持久性,称为ACID特性
原子性:整个事务中的所有操作要么全部成功,要么全部回滚
一致性:数据库总是从一个一致性状态转为另一种一致性状态
隔离性:一个事务执行不能被其他事务干扰,一个事务内部的操作及使用的数据对并发的其他事务时隔离的,并发执行的各个事务之间不能互相干扰
持久性:一个事务一旦提交,它对数据库中数据的改变就应该时永久性的,接下来的其他操作或故障不应该对其有任何影响

怎么用呢?

创建事务的关键字:
start transaction;
commit;
rollback;
开启事务之后,只要没有执行commit操作,数据其实都没有真正刷到硬盘

start transaction;  #开启事务
#准备两张表
比如我已经建好两张表,现在对表进行操作
update user set balance=900 where name='xx';
update user set balance=1100 where name='qq';

目前还没提交数据,如果发现有错误可以回滚就执行rollback;没错误就执行commit提交数据;
#rollback;
commit;这时就把数据写入磁盘了

存储过程

存储过程包含了一系列可执行的sql语句,存储过程存放于Mysql中,通过调用它的名字可以执行其内部的一堆sql,类似Python中的自定义函数

delimiter $$

create procedure p2(
    in m int,  # in表示这个参数必须只能是传入不能被返回出去
    in n int,  
    out res int  # out表示这个参数可以被返回出去
)
begin
    select tname from teacher where tid > m and tid < n;
    set res=0;  # 用来标志存储过程是否执行
end $$
delimiter ;
# 针对res需要先提前定义
set @res=10;  定义
select @res;  查看
call p1(1,5,@res)  调用
select @res  查看

# 1、直接在mysql中调用
set @res=10  # res的值是用来判断存储过程是否被执行成功的依据,所以需要先定义一个变量@res存储10
call p1(2,4,10);  # 报错
call p1(2,4,@res); 

select @res; #查看结果

函数

Mysql内置函数只能在sql语句中使用

REATE TABLE blog (
    id INT PRIMARY KEY auto_increment,
    NAME CHAR (32),
    sub_time datetime
);

INSERT INTO blog (NAME, sub_time)
VALUES
    ('第1篇','2015-03-01 11:31:21'),
    ('第2篇','2015-03-11 16:31:21'),
    ('第3篇','2016-07-01 10:21:31'),
    ('第4篇','2016-07-22 09:23:21'),
    ('第5篇','2016-07-23 10:11:11'),
    ('第6篇','2016-07-25 11:21:31'),
    ('第7篇','2017-03-01 15:33:21'),
    ('第8篇','2017-03-01 17:32:21'),
    ('第9篇','2017-03-01 18:31:21');


+----+--------------------------------------+---------------------+
| id | NAME                                 | sub_time            |  month
+----+--------------------------------------+---------------------+
|  1 |1| 2015-03-01 11:31:21 |  2015-03
|  2 |2| 2015-03-11 16:31:21 |  2015-03
|  3 |3| 2016-07-01 10:21:31 |  2016-07
|  4 |4| 2016-07-22 09:23:21 |  2016-07
|  5 |5| 2016-07-23 10:11:11 |  2016-07 
|  6 |6| 2016-07-25 11:21:31 |  2016-07
|  7 |7| 2017-03-01 15:33:21 |  2017-03
|  8 |8| 2017-03-01 17:32:21 |  2017-03
|  9 |9| 2017-03-01 18:31:21 |  2017-03
+----+--------------------------------------+---------------------+

select count(*) from blog group by month;

select date_format(sub_time,'%Y-%m'),count(id) from blog group by date_format(sub_time,'%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 ;
posted @   家购诗  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示