MySQL基本概念及操作命令(一)

#围绕事务
##创建数据库

CREATE DATABASE IF NOT EXISTS NEW_DATABASE_NAME 
	DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

注:COLLATE从网上搜到的结果是默认排序规则,可设置多个,本人认为不是特别有用,与CHARSET对应就好。
##创建表

create table test (
	`id` int(10) not null auto_increment, 
	`name` varchar(20), 
	primary key (`id`)
) ENGINE=InnoDB default charset utf8

注:ENGINE分为两种=InnoDB和MyIsam,效率差不多,后者不支持事务。
##事务
###隔离级别
1.READ UNCOMMITTED,顾名思义,可以读取另一个事务未提交数据。模拟场景,两个窗口分别start transaction,然后其中一个窗口操作修改其中一条数据但不提交,另一个窗口通过查询语句可以查询到这条未提交的数据。这种场景也被称之为脏读(Dirty Read)
2.READ COMMITTED,顾名思义,只能读取另一个事务已经提交的数据,未提交的数据是读不到的。模拟场景,两个窗口分别start transaction,然后其中一个窗口操作修改其中一条数据但不提交,另一个窗口通过查询语句无法查询到这条未提交的数据。这种场景导致不可重复读,因为另一个窗口事务有可能已经被提交,这样会导致两次查询结果不一致。
3.REPEATABLE READ,可重复读,MySQL的默认事务级别,它确保同一个事务的多个实例在并发读取数据时,读取到相同的数据。上述三种级别都会产生“幻读”。
4.SERIALIZABLE,可串行化,它是最高的事务级别,通过强制事务排序,解决事务的相互冲突,从而防止“幻读”的问题。原理是在每个读的数据行上添加共享锁,但这总级别会导致大量的超时或锁竞争。
此图摘自(http://xm-king.iteye.com/blog/770721)
隔离级别图
“幻读”是指用户读取某一范围数据时,另一个事务如果新增了一条数据,当用户再次读取这一范围数据时,就会出现“幻影行”
###设置事务级别

SET [SESSION | GLOBAL] TRANSACTION 
	ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

注:如果默认不注明[SESSION | GLOBAL],则默认为设置会话级,即会话结束,修改内容重置;如果想要修改全局,需显示增加GLOBAL参数,确保推出当前会话也可以保留修改结果。
###查看当前事务级别

select @@[global.]tx_isolation;

注:如果不注明[global.],则默认为会话级事务设置;全局级事务设置大于会话级,即新会话继承全局级事务。
##锁
###乐观锁
乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。
###悲观锁
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中, 将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了 加锁机制,也无法保证外部系统不会修改数据)。

进阶命令

查看字符集

show variables like 'character%';

修改字符集

比如只修改某一项,则使用命令set variable = 'value’即可,如下:

set character_set_server = 'utf8mb4';

查看最大连接数

show variables like '%max_connection%';

重新设置最大连接数

set global max_connections=1000;

查看所有活跃连接数

show full processlist;

select * from information_schema.processlist;

查看连接相关

show status like  'Threads%';

在这里插入图片描述
Threads_cached:缓存的连接数,数据库重启后此值为0正常,只有当客户端请求服务器,运行一段时间后才会将连接放置到缓存中
Threads_connected:打开的连接数
Threads_created:创建过的连接数,这个数值越大,证明服务器一直在创建线程

  • 如果此数值增长较快,证明服务器一直在重新创建线程,可以在my.cnf文件中直接向上调整size,加上thread_cache_size=64

Threads_running:正在运行的连接数

查看当前连接缓存设置的最大数量

show variables like 'thread_cache_size';

这个数值与Threads_cached相关

查看总共请求连接次数

show status like  '%connections';

这个数值代表客户端请求连接服务器的总数,与Threads_connected相关,后者代表当前连接的数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值