您的位置:首页 > 数据库 > MySQL

sql事务的隔离级别以及一些MYSQL的命令

2016-05-29 09:51 796 查看
在sql标准中定义了4种隔离级别

1.未提交读(read uncommitted):在未提交读级别,事务的修改,即使没有提交,对其他事务也是可见的,事务可读未提交的数据,这也被称为脏读,(Dirty Read);当一个事务做UPDATE或者INSERT的时候,即使这个事务没有提交,其他事务也可以读取到已经修改完了的数据。由于事务有可能会回滚,这个数据并不是最后的数据,所以是脏的,所以称为脏读。

2.提交读(Read committed):大多数数据库系统的默认隔离级别是提交读(Mysql不是)提交读满足前面提到的隔离性的简单定义:一个事务开始时,只能“看见”已经提交的事务所做的修改。一个事务从开始到提交前,所做的修改是其他事务不可见的!(不可重复读)。这个事务隔离级别比脏读要高。当一个事务做UPDATE或者INSERT的时候,需要这个事务已经提交提交,其他事务才可以读取到已经修改完了的数据。同时如果2个事务,事务A有2个或者多个查询,第一个查询完了之后,如果事务B已经提交,则事务A的第二个查询看到的是事务B提交之后的数据。所以事务A的2个查询有可能看到的不是同一个数据。

3.可重复读( Repeatable read):可重复读解决了脏读的问题。该级别保证了在同一个事务中多次读取同样记录的结果是一致的。但是理论上,可重复读隔离级别还是无法解决另外一个幻读(Phantom read)问题。所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务中又在该范围插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom row)。可重复读是MySQL的默认事务隔离级别。

在同一个事务中,多次查询同样的记录,其结果是一样的。测试一下:

A事务:

set autocommit=0;

a.select * from lc_user where id=2;

b.select * from lc_user where id=2;

B事务:

a.update lc_user set phone=42222222222222 where id=2;

执行A事务的a sql 结果为2

执行B事务并提交

执行A事务的b sql 结果为2

可串行化(Serializable):可串行化是最高的隔离级别。它通过强制事务串行执行,避免了前面所说的幻读问题。简单来说,可串行化会在读取的每一行数据上都加上锁,所以可能导致大量的超时和锁争用问题。实际应用中也很少用到这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑用该级别。

next-key locking:间歇锁定

show engines\G:查看mysql支持的存储引擎。

create table mytest engine=myisam;

查看引擎 show engines \G;

查看变量 show variables like ‘%binlog_format%’;

查看状态 show status like ‘%conn%’; mysql免登录执行命令 mysql -uroot -e “show slave status\G;”

mysql指定配置文件登录 ./bin/mysql –defaults-file=/root/mysql/my.cnf -uroot

锁表 FLUSH TABLES WITH READ LOCK;

解锁 UNLOCK TABLES;

mysql调试语法 在报错以后,执行SHOW WARNINGS;

可以看到详细信息 开放ROOT远程访问,一般不要这么做 GRANT ALL PRIVILEGES ON . TO ‘root’@’%’WITH GRANT OPTION; 乱码 命令行登陆MySQL,

查看编码 mysql> show variables like ‘%character%’

创建数据库 create database my_test; 授权 grant all privileges on my_test.* to my_test@’%’ identified by ‘my_test_123’;

修改root密码 update mysql.user set password=password(‘open’) where user=’root’; flush privileges;

备份数据(其中可以人工指定socket参数 –socket=/application/search/mysql/mysql/tmp/mysql.sock) ./mysqldump -uroot my_test -v > /data0/search/my_test.sql ./mysqldump -uroot -popen opendata -v > /data0/search/my_test.sql 备份存储过程和函数 ./mysqldump -uroot -popen -n -t -d -R opendata1 > /data0/search/opendata1_produce.sql 备份全部数据库快照 mysqldump -uroot -p -h127.0.0.1 -P3306 –all-databases –triggers –routines –events >all.sql 导入 1)先登录,首先要登录mysql,可以看到导入过程,但是终端网络断开,则导入终止 source /data0/search/my_test.sql 2)无需登录,后台执行导入命令,但是看不到过程 ./mysql -uroot my_test < /data0/search/my_test.sql & 统计表行数 use INFORMATION_SCHEMA;

select TABLE_ROWS,TABLE_NAME, TABLE_SCHEMA from tables where TABLE_SCHEMA=’my_test’;

select sum(TABLE_ROWS) from tables where TABLE_SCHEMA=’my_test’;

查看服务器线程 show processlist;

查看创建表的结构 show create table 表名;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息