504day46_MySQL函数&事务

504day46_MySQL函数&事务,第1张

今日目标

为了简化 *** 作 mysql提供 了大量的函数给程序员使用(比如你想输入当前时间,可以调用now()函数)

函数可以出现的位置:插入语句的values()中,更新语句中,删除语句中,查询语句及其子句中。

菜鸟教程: https://www.runoob.com/mysql/mysql-functions.html

常用

导入数据

练习

常用

练习

常用

练习

语法

练习

语法

练习

如果一个包含多个步骤的业务 *** 作,被事务管理,那么这些 *** 作要么同时成功,要么同时失败。

应用场景:用户转账

准备数据

模拟转账

转账成功

转账失败

模拟转账

注意:

​ 当事务开启后,一部分sql执行成功,添加一个保存点,后续 *** 作报错了,回滚到保存点,保证之前的 *** 作可以成功提交

​ 多个事务之间隔离的,相互独立的。但是如果多个事务 *** 作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

性能角度:1>2>3>4

安全角度:4>3>2>1

综合考虑:2 or 3

准备模拟二个事务窗口:A窗口、B窗口

MySQL有两种死锁处理方式。

1、等待,直到超时(innodb_lock_wait_timeout=50s)。

2、.发起死锁检测,主动回滚一条事务,让其他事务继续执行。

默认情况下, MySQL启用自动提交模式(变量autocommit为ON)

如果是全局级别,则需要加global,如果是会话级别,则需要加session,如果都没加,默认是session。

全局变量作用域:服务器每次启动将为所有的全局变量赋初始值,修改全局变量针对于所有的会话(连接)有效,但不能跨重启(重启服务器全局变量恢复为默认值)。

会话变量作用域:仅仅针对于当前会话(连接)有效

查询会话事务提交模式:

show session variables like 'autocommit'

查询全局事务提交模式:

show global variables like 'autocommit'

Value的值为ON,表示autocommit开启。OFF表示autocommit关闭。

set global autocommit=0

set SESSION autocommit=0

禁止自动提交

SET AUTOCOMMIT=0

开启自动提交:

SET AUTOCOMMIT=1

查询 正在执行的事务:

SELECT * FROM information_schema.INNODB_TRX

查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS

查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS

结束正在执行的事务:

使用mysql命令杀掉线程:kill 线程id (trx_mysql_thread_id)

手动提交模式:

BEGIN

SQL;

COMMIT


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7381203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存