msyql

MySQL :: MySQL 8.0 Reference Manual

数据库并发事务所带来的问题

数据结构可视化

常用命令


alert USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
flush privileges;
SELECT @@global.TRANSACTION_ISOLATION;
show global variables like '%trans%';
set global transaction isolation level read committed;
-- 查看表详情
show create table user;
desc user;
-- 创建表
create table user
(
    id   int                               not null,
    name varchar(255) default 'leiwenyong' not null,
    constraint user_pk
        primary key (id)
)engine innodb;
-- 查看索引
show index from user;
-- 删除索引
alter table t1.user drop index name;
drop index pass on user;
-- 添加索引
alter table user add index pass (pass) using btree;
-- 更改存储引擎
alter table user engine=myisam;
-- 优化过程
set optimizer_trace="enabled=on";
select * from information_schema.optimizer_trace\G

开启日志功能


# 命令行 无需重启
$ set GLOBAL log_output='FILE'
$ set global general_log=on;
$ set global general_log_file='C:/app/mysql_log.log';
# 修改配置文件
[mysqld]
log_output=FILE    # 日志打印到文件,默认配置,可以配置成table,日志就会记录到mysql库中的相应的表中(slow日志也会受影响)
general_log=1
general_log_file=/application/mysql/logs/query_log.log
# 修改密码
alter user 'root'@'localhost' identified by '123456';
flush privileges; 

开启慢日志记录


# 查看慢日志开启状态
$ show variables like 'slow_query%';
# 查看多少秒开始记录
$ show variables like 'long_query_time';

ACID介绍


  • atomicity 原子性 使用undolog文件实现原子性。

  • consistency 一致性 使用redolog文件实现一致性,先写redolog文件,将状redolog文件态设置为prepare,再写binlog文件(用于主从、主主、级联同步),将redolog日志设置commit,最后提交事务。掉电后通过比对redolog文件和undolog文件是否一致确定要提交记录还是恢复记录。

  • isolation 隔离性 使用悲观锁(每次获取资源加锁)、乐观锁(不加锁,自旋,版本控制)、Mutil Version concurrency control实现隔离性。

  • durability 持久性。

事务隔离级别


所有事务都不存在一类丢失更新。

  • 【RU】read uncommitted 脏读、 幻读、 不可重复读、 二类丢失更新 当前读,每次读取的都是最新记录。

  • 【RC】read committed 幻读、 不可重复读、 二类丢失更新 快照读,每次查询重新构建read_view,所以每次读出来的记录都是已经提交的记录。

  • 【RR】repeatable read 不可重复读、 二类丢失更新 快照读,创建session时创建read_view,不能读出已经提交的记录。

  • 【SE】serializable 串行执行,不存在并发问题 当前读,成一个队列执行。

常用命令


-- 设置会话隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;
-- 查看当前会话隔离级别
select @@transaction_isolation;
-- 查看是否自动提交
show session variables like 'autocommit';
show global variables like 'autocommit';
show variables like 'autocommit';
-- 设置不自动提交
set session autocommit=0;
set global autocommit=0;
set @@autocommit = 0;
-- 查看mysql table引擎
show create table demo;
show table status from `ruoyi` where name='table_name';
-- 慢查询日志
show variables like '%slow_query_log%';
-- 开启慢查询日志
set global slow_query_log=1;
-- 查看锁状态
show status like '%innodb_row_lock%';
show status like '%lock%';
show variables like '%timeout%'
-- 查看当前锁
use information_schema;
-- 建立索引
create index idx_lock_count on demo(count);
-- 创建表
CREATE TABLE `test_innodb_lock` ( 
    `a` INT(11) DEFAULT NULL,
    `b` VARCHAR(20) DEFAULT NULL,
    KEY `idx_lock_a` (`a`),
    KEY `idx_lock_b` (`b`) 
) ENGINE = INNODB DEFAULT charset = utf8mb3;
-- 查询是否锁表
show OPEN TABLES where In_use > 0;
show open tables;
-- 查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
show processlist;
show full processlist;
kill id
-- 查看正在执行的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX \G;
kill id
-- 查看正在锁的事务
SELECT * FROM performance_schema.data_LOCKS \G;
-- 查看等待锁的事务
SELECT * FROM performance_schema.data_LOCK_WAITS \G;
rlike #可以使用正则表达式匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值