mysql(1)

1.关系型数据库和非关系型数据库

关系型数据库:建立在关系模型上的数据库。关系模型表明了所存储的数据之间的联系(一对一、一对多、多对多),可简单的理解为二维表格模型。

优点:

1.二维表结构贴近于正常开发逻辑

2.支持通用的sql

3.支持事务,保证事务的正确执行,同时提供了事务的恢复、回滚、并发控制、死锁

4.数据保存于磁盘中,安全

缺点:

1.高并发读写能力差

2.海量数据情况下,读写效率低

3.可扩展性不足

非关系型数据库:数据以对象的形式存储于数据库中,而对象之间的关系通过每个对象自身的属性决定的。

常见的nosql数据库:

1.键值数据库:redis、riak

2.文档数据库:MongDB

优点:

1.存储数据类型广泛

2.速度快、效率高,可使用硬盘或其他存储器作为载体,但关系型数据库只能使用硬盘。

3.易处理海量数据和维护

4.数据分布式处理

缺点:

1.不支持sql

2.没有事务处理,无法保证数据完整性和安全性

3.复杂的关联表不易实现

2.mysql架构

mysql(1)_第1张图片

 连接器:身份验证、权限验证

查询缓存:执行查询语句时,会先查询缓存

分析器:未命中缓存,sql就会经过分析器,检查sql语句是否正确

优化器:按照sql认为最优的方案执行

执行器:执行语句,从存储引擎返回数据。执行语句之前先判断是否有权限,没权限就会报错

执行引擎:负责数据的读取和存储,采用插件式架构,支持InnoDB、MyISAM、Memory等多种存储引擎

3.MyISAM和InnoDB

1.InnoDB支持事务,MYISAM不支持

2.MYISAM适合查询和插入为主的应用,InnoDB适合频繁修改和安全性较高的应用

3.删除表时,InnoDB是一行一行删除,效率较慢,MYISAM是重建表

4.InnoDB支持行锁

4.行锁和表锁

表锁:锁定整张表,不依赖存储引擎,无论什么mysql的存储引擎,表策略都是一样。同时锁定整张表,很好的避免了死锁问题。但是锁粒度较大,导致并发率降低。

行锁:记录锁,锁住某一行。其只在存储引擎实现。

读锁/共享锁:允许事务读(select)数据

写锁/排他锁:允许事务删除(delete)或更新(update)数据

读锁和写锁可以加在表或者行上。

读锁是共享的,多个事务在同一时刻读取统一资源,互不干扰。

写锁是排他的,一个写锁会阻塞其他的读锁和写锁,确保给定时间中,只有一个事务执行写入,防止其他用户读取正在写入的同一资源。

加表锁:

1.隐式锁定:常见的DDL语句(create、drop、alter),InnoDB会自动给相应的表加表级锁。

2.显示锁定:执行SQL语句,对某个表明确添加表锁:

        lock table user read(write)

加行锁:

1.隐式:

        1>常见的DML语句(update、delete、insert),InnoDB自动添加行锁。

        2>普通情况下select不会添加任何锁,在serializable隔离级别下,加行级读锁

2.显示:

        1>SELECT * FROM table_name WHERE ... FOR UPDATE,行级写锁

        2>SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE,行级读锁

InnoDB的行级锁是基于索引,当索引失效会自动升级为表锁。

你可能感兴趣的:(mysql,数据库)