今日目标
为了简化 *** 作, 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)