MySQL事务,函数,性能,索引

ops/2025/3/6 23:37:48/

MySQL事务,函数


事务

执行事务:相当于一个业务操作

例如:转账操作,一个用户转出资金,另外一个用户收到增加自己的资金,这两个步骤都需要成功执行才行)

# MySQL数据库中默认:一行SQL语句会自动提交(表中持久更新)# 事务:一组逻辑操作单元。可以在事务中书写多行SQL语句,要么全部执行成功,要么全部执行失败。

两种事务的操作方式:

手动提交:先开启,再提交

自动提交:每执行完一条一条SQL语句就会自动开启提交一次事务

TODO:事务原理

1、(客户端会连接MySQL服务,服务端对于这个用户进行安全校验,通过之后会创建一个临时的日志文件)

2、如果是自动提交的事务,则直接将SQL语句结果直接同步到数据表中去

3、如果是手动提交的事务,则将SQL语句的结果先写入临时日志文件中去

3.1、最后commit,则将SQL语句结果同步到数据库

3.2、rollback,则直接将临时的日志文清除

手动提交事务SQL语句

开启事务:start transaction;

提交事务:commit;

回滚事务:rollback;

事务的四大特征:

# 事务的四大特征(ACID):
-- 原子性A:事务中SQL语句的操作不可以再分为一个最小的单元,要么都成功,要么都失败。
-- 一致性C:事务开始前和事务结束后,数据库的完整性没有被破坏。相当于两个人转账的过程,可能每个人的账户余额有所变化,但是两人的总的金额是没有变化的
-- 隔离性I:多个事务开启的时候,每一个事务的执行不能被其他事务干扰,多个事务之间不能互相干扰。
-- 持久性D:事务结束,对数据库的更改就是持久的,即对数据库的更改可以 survive重启。

数据库函数的引用

1、日期函数:

-- 日期函数:now()用于返回当前的系统时间
select now();
select sysdate();
-- 获取当前的日期
select curdate();
-- 获取当前的时间
select curtime();-- 获取年月日
select year(now());
select month(now());
select day(now());-- 获取一年中的第几周
select weekofyear(now());# 获取几月几日---》通过concat函数进行拼接
select concat(month(now()),'月',day(now()),'日') as '当前日期';

2、判断函数(常用):

case when 条件 then 结果 else 结果 end

#Case when:(一定要用别名代替结果)
#语法1:
case 列名
when 条件1 then 结果1
when 条件2 then 结果2
when 条件3 then 结果3
else 结果n
end as '别名'
#语法2:
case
when 条件1 then 结果1
when 条件2 then 结果2
when 条件3 then 结果3
else 结果n
end as '别名'#实例:(sex为Int类型)
select name,
case sexwhen 1 then '男'when 2 then '女'
else '未知'
end as '性别',
age from stu;#第二种写法:
select name,
case
when sex = 1 then '男'
when sex = 2 then '女'
else '未知'
end as '性别',
age from stu;

3、字符串函数
# 字符串函数(针对与varchar类型的数据进行操作)
# 获取字符串的长度:length(列名)
select length('abc');select length(name) from user;# 拼接字符串:concat(列名1,列名2)
select concat(name,'-',age) from user;
select concat(month(curdate()),' ',day(curdate()));# 获取当前日期# 转换大小写
select lower('I lovE');
select upper('I lovE');# 截取字符串:substring(字符串,起始位置,截取长度)
select substring('hello world',1,3);# 去除字符串前后的空格:trim(列名)
select trim('   hello   ');
# 由于存储字符串类型的数据的时候不够长度会默认补充空格,所以去除字符串前后的空格可以用到这个函数

4、数学函数

# 数学函数(针对数字类型的数据提供功能)
# 获取随机数(0,1)之间
select rand();# 四舍五入(用法:round(数值,保留小数点后几位))
select round(12.3456,2);
select round('12.3456',3);# 去除小数的尾数
select truncate('3.1415926',2);


http://www.ppmy.cn/ops/163724.html

相关文章

AI大模型对物联网行业赋能可行关键点

AI大模型(如GPT、BERT等)在物联网(IoT)行业的赋能潜力巨大,能够通过数据分析、智能决策和自动化控制等方式,显著提升物联网系统的效率和智能化水平。以下是AI大模型如何赋能物联网行业的具体方式及解决方案…

基于Matlab/Simulink的两级式光伏并网低电压穿越控制(LVRT)仿真模型

接下来的博客更新主要针对,在新能源并网控制基础上兼具电网电能质量治理控制的控制方向(包括,光伏低电压穿越控制,双馈风力机低电压穿越控制,光伏并网谐波抑制,风力发电无功补偿控制、多功能并网逆变器控制…

筑牢网络安全防线:守护您的数据安全

在数字化时代,数据安全已成为企业和个人不容忽视的重要议题。近日印尼国家数据中心遭黑客袭击的事件,不仅扰乱了机场的移民检查,还影响了众多机构的服务运行。黑客利用恶意软件对数据中心进行攻击,索要巨额赎金,给印尼…

国产编辑器EverEdit - 工具栏自定义及认识工具栏上的按钮

1 设置-高级-工具条 1.1 设置说明 1.1.1 工具条自定义 选择主菜单工具 -> 设置 -> 常规,在弹出的选项窗口中选择工具条分类,如下图所示: 左侧窗口是当前支持所有功能按钮列表(上图中居中栏),右侧的窗口是当前显示在工具栏…

蓝桥杯2024年真题java B组 【H.拼十字】

蓝桥杯2024年真题java B组 【H.拼十字】 原题链接:拼十字 思路: 使用树状数组或线段树解决。 先将输入的信息存入到一个n行3列的数组中,将信息排序,按照长度小到大,长相同时,宽度小到大 排序。 建立三个…

【14上机2题】杨辉三角打印

杨辉三角打印 //打印杨辉三角 #include<bits/stdc.h> using namespace std;int main() {int n;cin>>n;int a[n][n];for(int i0;i<n;i){ //行 //每行的首尾元素均为1a[i][0]1;a[i][i]1; //注意尾元素为a[i][i] for(int j1;j<i;j){ a[i][j]a[i-1][j]a[i-1]…

数据结构与算法:选择排序

介绍 选择排序是一种简单直观的排序算法&#xff0c;其基本思想是&#xff1a;从待排序的数据元素中&#xff0c;每次选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其与序列的起始位置交换&#xff0c;然后继续对剩余的元素进行排序&#xff0c;知道整个序列排…

掌握 Joblib:机器学习模型存储与加载的秘密武器

前言 你有没有遇到过这种让人崩溃的场景:辛辛苦苦训练好的模型,一关闭 Python 进程就像消失在空气中,一点痕迹都不留下?或者你花了好几个小时处理数据,结果下一次运行时又得从头来过?这简直就像精心烤制的蛋糕,端到桌子上,转眼被风吹走! 别担心,今天你将遇到一个神…