触发器,视图,事务,存储过程,函数,流程控制,
视图
通过查询获得一张虚拟表,然后保存下来
1.创建视图后,视图只有表结构文件,没有表数据文件
2.视图通常用于查询,尽量不要修改视图中的数据
创建视图
删除视图
触发器
在满足某张表数据的增,删,改的情况下,自动触发的功能称之为触发器
创建触发器
查看触发器
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 ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)