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

来源:互联网 发布:朝鲜知乎 编辑:程序博客网 时间:2024/06/05 20:08

在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 表名;

0 0
原创粉丝点击