Mysql数据库四大特性、事物的四个隔离、基本MySQL语句、独立表空间

Mysql数据库四大特性、事物的四个隔离、基本MySQL语句、独立表空间

本人学习mysql的时候感觉笔记有点散所以自己做了一个整合,而且有些概念介绍的太官方了,所以自己根据理解总结了一下。(有不对的请指点!)

mysql:

sql:关系型数据库:(复杂的关系形数据库)。

nosql:非关系型数据库:(储存的格式很简单)

key,value(memcached),user1:1,user2:2(存在内存里)

事务:一组原子性的SQL查询,或者是一个或多个sql语句组成的独立工作单元;操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

 

事务的特性:

(1)原子性(Atomicity):强调事务是一个整体,要么都执行,要不都不执行。

(2)一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态,强调数据的一致性。

(3) 隔离性(Isolation):指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被企图进行修改的事务看到。

(4)持久性(Durability):意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。

不考虑事务隔离性会引发的四个问题:

(1)脏读:一个事务读到另一个事务未提交的数据(就是数据不统一)。

说明:有两个用户a和b在使用同一个数据库A,a用户修改数据库数据但还未提交,这时候用户b还是能读取a用户没修改前的数据这就是脏读。

(2)不可重复读:一个事务读到另一个事务已提交的数据,强调Update(更新)。

说明:有一个学生信息表,里面有一条数据[小明 男 25岁];事务1现在读取这个条数据,将“小明”修改为“张三”,但是还没有提交到数据库中;这个时候事务2来进行对这条数据的操作,事务2需要两次读取这条数据,事务2第一次读取数据是在事务1还没有提交的时候,读出的数据依然是[小明 男 25岁],但是事务2在第二次读取的时候,小明已经提交了,这个时候同样的读取操作结果确实[张三 男 25岁],事务2两次读取的结果不一致,这就是不可重复读问题。

(3)虚度/幻读:一个事务读到另一个事务已提交的数据,强调Insert。

(4)丢失更新: 两个事务同时修改数据,后提交事务覆盖了先提交事务的结果。

说明:从字面上理解就行了,就是前一个修改的数据丢失了。

事物的隔离级别:四个

ISOLATION_DEFAULT:使用数据库默认的隔离级别。 
ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发生脏读、不可重复读和幻读。

ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致(不可以重复度),不发生脏读,可导致幻读。

ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。

ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读(等级最低)。 

##个人感觉了解两款主流的引擎是很有必要的,对数据库操作和理解就很有帮助。

主流引擎区别:

INNODB:支持事务处理与外键和行级锁,不支持全文索引,可以做回滚以及系统崩溃修复能力。(生产环境肯定使用这款,因为安全性比较高。)InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。主键范围更大,最大是MyISAM的2倍

MYISAM:读取的性能高,但是不支持事物,出错了,就不能回滚回来了。不支持行锁定,只支持锁定整个表。即MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以MyISAM不适合于有大量查询和修改并存的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表,所以某项读操作比较耗时会使其他写进程饿死。

日志管理:

二进制日志:mysqldump备份还原。

错误日志:查看mysql服务的错误日志。

慢查询日志:查看慢查询的日志。

通用查询日志:线上不提倡开启,io会过高。

注意:不能添加太多索引因为这样会使得写入的时候会变慢,所以一般使用的是联合索引。

Mysql语言例子:

插入单个数据:

Mysql>  INSERT INTO cml(I d,`name`) VALUE(1,‘cml‘);

插入多个数据:

Mysql>  INSERT INTO cml(id,`name`)VALUE(2,‘zhangfei‘),(3,‘zhaoyun‘);

查看数据:

Mysql>  SELECT * FROM cml;

+----+----------+

| id | name     |

+----+----------+

|  1 | cml |

|  2 | zhangfei |

|  3 | zhaoyun |

+----+----------+

建议程序员写查询的时候:

Mysql>  SELECT id,name FROM cml;

+----+----------+

| id | name     |

+----+----------+

|  1 | cml |

|  2 | zhangfei |

|  3 | zhaoyun |

+----+----------+

加条件的查看:

Mysql>  SELECT id,name FROM cml WHERE id=3;

+----+---------+

| id | name    |

+----+---------+

|  3 | zhaoyun |

+----+---------+

Mysql>  SELECT * FROM cml LIMIT 1;

+----+---------+

| id | name    |

+----+---------+

|  1 | cml |

Mysql>  SELECT * FROM cml ORDER BY id DESC LIMIT 1;

+----+---------+

| id | name    |

+----+---------+

|  3 | zhaoyun |

+----+---------+

4、更新字段的值:

Mysql>  UPDATE cml set name=‘guanyu‘ where id=1;

Query OK, 1 rowaffected (0.00 sec)

Rows matched:1  Changed: 1  Warnings: 0

5、删除id=1的值

Mysql>  DELETE FROM cml WHERE id=2;

Query OK, 1 rowaffected (0.00 sec)

6、DELETE 删除的时候计数器没有被清空:

Mysql>  DELETE FROM cml;

Query OK, 2 rowsaffected (0.00 sec)

Mysql>  select * FROM cml;

Empty set (0.00sec)

Mysql>  INSERT INTO cml(`name`) VALUE(‘machao‘);

Query OK, 1 rowaffected (0.00 sec)

Mysql>  select * FROM cml;

+----+--------+

| id | name   |

+----+--------+

|  4 | machao |

+----+--------+

7、把表结构ID修改id自动增长,然后插入数据:

Mysql>  CREATE TABLE `cml` ( `id` int(11) NOT NULLAUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) );

Mysql>  INSERT INTO cml(`name`) VALUE(‘zhangfei‘);

Query OK, 1 rowaffected (0.00 sec)

8、清空计数器:

Mysql>  TRUNCATE cml;

Query OK, 0 rowsaffected (0.00 sec)

Mysql>  INSERT INTO cml(`name`) VALUE(‘machao‘);

Query OK, 1 rowaffected (0.00 sec)

Mysql>  select * FROM cml;

+----+--------+

| id | name   |

+----+--------+

|  1 | machao |

+----+--------+

1 row in set(0.00 sec)

9、插入测试数据:

Mysql>  CREATE TABLE `cml` ( `id` int(11)AUTO_INCREMENT, `name` varchar(20) , age int, PRIMARY KEY (`id`) );

Query OK, 0 rowsaffected (0.00 sec)

Mysql>  INSERT INTO cmlVALUE(1,‘zhangfei‘,20),(2,‘zhaoyun‘,25),(3,‘machao‘,30);

Query OK, 3 rowsaffected (0.00 sec)

Records: 3  Duplicates: 0 Warnings: 0

Mysql>  select * from cml;

+----+----------+------+

| id | name     | age |

+----+----------+------+

|  1 | zhangfei |   20 |

|  2 | zhaoyun |   25 |

|  3 | machao  |   30 |

Mysql>  SELECT name FROM cml WHERE age>25;

+--------+

| name   |

+--------+

| machao |

+--------+

Mysql>  SELECT name FROM cml WHERE age>25 ANDage<=30;

+--------+

| name   |

+--------+

| machao |

按照年龄排序:

Mysql>  SELECT * FROM cml ORDER BY age;

+----+----------+------+

| id | name     | age |

+----+----------+------+

|  4 | wanggai |   18 |

|  1 | zhangfei |   20 |

|  2 | zhaoyun |   25 |

|  3 | machao  |   30 |

+----+----------+------+

独立表空间:

优点:

每个表都有自已独立的表空间。

每个表的数据和索引都会存在自已的表空间中。

可以实现单表在不同的数据库中移动。

空间可以回收(除drop table操作处,表空不能自已回收)

       1、Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以          通过:alter table TableName engine=innodb;回缩不用的空间。

       2、对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。

       3、对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且            还有机会处理。

缺点:

 

单表增加过大,如超过100个G。

 

结论

 

共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一下:innodb_open_files 。InnoDB Hot Backup(冷备)的表空间cp不会面对很多无用的copy了。而且利用innodb hot backup及表空间的管理命令可以实现单现移动。

 

innodb_file_per_table设置.

 

开启方法:

在my.cnf中[mysqld]下设置

innodb_file_per_table=1

查看是否开启:

mysql> show variables like‘%per_table%‘;
+-----------------------+-------+
| Variable_name        | Value |
+-----------------------+-------+
| innodb_file_per_table | ON   |
+-----------------------+-------+
1 row in set (0.02 sec)

 

关闭独享表空间:

innodb_file_per_table=0

关闭独立的表空间

mysql> show variables like‘%per_table%‘;
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
1 row in set (0.01 sec)

时间: 2024-08-09 15:17:39

Mysql数据库四大特性、事物的四个隔离、基本MySQL语句、独立表空间的相关文章

学习数据库四大特性及事务隔离级别

学习数据库四大特性及事务隔离级别 一丶事务ACID四大特性 A(原子性Atomicity) : 事务是数据库的逻辑工作单位,事务里所有的操作要么全做,要么不做. C(一致性Consistency): 事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态. I(隔离性Isolation): 事务的执行不能被其他事务干扰. D(永久性Durability): 事务一旦提交,它对数据库中数据的改变就应该永久的. 二丶事务的隔离性 MySql存在4种隔离级别. 1.读未提交 Read Unco

MySQL数据库新特性之存储过程入门教程

在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 .同时,存储过程可以接收和输出参数.返回执行存储过程的状态值,也可以嵌套调用. 存储过程的优点 作为存储过程,有以

重新学习MySQL数据库2:『浅入浅出』MySQL 和 InnoDB

重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的.不了解数据库的有所帮助. 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者

在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm

在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm包,http://dev.mysql.com/downloads/mysql/5.6.html#downloads,大家可以根据自己的操作系统去下载对应的数据库文件,目前最新的版本是5.6.10了. 在这里我是通过yum来进行mysql数据库的安装的,通过这种方式进行安装,可以将跟mysql相关的一些服务.jar包都给我们安装好,所以省去了很多不必要的麻烦!!! http://www.baobao18.com/De

JSP使用UTF-8链接MYSQL数据库(UTF8)乱码以及连接失败问题以及更改mysql默认编码

JSP使用UTF-8链接MYSQL数据库(UTF8)乱码以及连接失败问题: 前言,服了这些大公司,做的数据库都不人性化...我忙了很久才搞定的说 csdn好像传不了图片了...本来想来几张的,大家将就... 1.在windows下mysql的数据库是utf8编码的时候,连接失败(注意mysql中不是UTF-8,而是utf8) 情况,显示?在网页上(网页设置的UTF-8编码) 用户ID号码 用户名称 用户密码 用户地址 47 g? 1243 null 48 ? 1243 null 49 ?123

学习python3 MySQL数据库语法遇到的问题:&quot;Can&#39;t connect to MySQL server on &#39;localhost&#39;

运行学习教程里面的mysql数据库按照里面要的步骤安装pyMySQL,学习里面的内容,会出现一些疑问,我也遇到了,发现这是一个认识上错误,实例如下: 根据基础教程运行下面代码,会报错: #!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","test","test","DB" ) # 使用 cursor() 方法创建一个游标对象

MySQL如何判别InnoDB表是独立表空间还是共享表空间

InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其进行设置,可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引

看懂MySQL怎样判断InnoDB表是独立表空间还是共享表空间

本文参考原文-http://bjbsair.com/2020-03-22/tech-info/5348/概述 InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其进行设置,可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数

mysql共享表空间和独立表空间

innodb表的数据结构 innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等. 对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间. 什么是共享表空间和独占表空间 共享表空间以及独占表空间都是针对数据的存储方式而言的. 共享表空间:  某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下. 默认的文件名为:ibdata1  初始化为10M. 独占表空间:  每一个表都将会生成以独立的文件方式