MySQL关系操作的特点是?

92 2024-12-22 12:33

一、MySQL关系操作的特点是?

优点:容易理解,它的逻辑类似常见的表格使用方便,都使用sql语句,sql语句非常的成熟,数据一致性高,冗余低,数据完整性好,便于操作技术成熟,功能强大,支持很多复杂操作

缺点:每次操作都要进行sql语句的解析,消耗较大,不能很好的满足并发需求,特别是海量数据爆发,关系型数据库读写能力会显得不足,关系型数据库往往每一步都要进行加锁的操作,也造成了数据库的负担

二、mysql两表关系查询?

我来讲一下这个问题吧:

题主说的查询应该是这样吧:select * from a where id in (select id from b );

对于这条sql语句它的执行计划其实并不是先查询出b表的所有id,然后再与a表的id进行比较。mysql会把in子查询转换成exists相关子查询,所以它实际等同于这条sql语句:select * from a where exists(select * from b where b.id=a.id );

而exists相关子查询的执行原理是: 循环取出a表的每一条记录与b表进行比较,比较的条件是a.id=b.id . 看a表的每条记录的id是否在b表存在,如果存在就行返回a表的这条记录。

exists查询有什么弊端?由exists执行原理可知,a表(外表)使用不了索引,必须全表扫描,因为是拿a表的数据到b表查。而且必须得使用a表的数据到b表中查(外表到里表中),顺序是固定死的。

如何优化?建索引。但是由上面分析可知,要建索引只能在b表的id字段建,不能在a表的id上,mysql利用不上。

这样优化够了吗?还差一些。由于exists查询它的执行计划只能拿着a表的数据到b表查(外表到里表中),虽然可以在b表的id字段建索引来提高查询效率。但是并不能反过来拿着b表的数据到a表查,exists子查询的查询顺序是固定死的。

为什么要反过来?因为首先可以肯定的是反过来的结果也是一样的。这样就又引出了一个更细致的疑问:在双方两个表的id字段上都建有索引时,到底是a表查b表的效率高,还是b表查a表的效率高?

该如何进一步优化?把查询修改成inner join连接查询:select * from a inner join b on a.id=b.id; (但是仅此还不够,接着往下看)

为什么不用left join 和 right join?这时候表之间的连接的顺序就被固定住了,

比如左连接就是必须先查左表全表扫描,然后一条一条的到另外表去查询,右连接同理。仍然不是最好的选择。

为什么使用inner join就可以?inner join中的两张表,如: a inner join b,但实际执行的顺序是跟写法的顺序没有半毛钱关系的,最终执行也可能会是b连接a,顺序不是固定死的。如果on条件字段有索引的情况下,同样可以使用上索引。

那我们又怎么能知道a和b什么样的执行顺序效率更高?答:你不知道,我也不知道。谁知道?mysql自己知道。让mysql自己去判断(查询优化器)。具体表的连接顺序和使用索引情况,mysql查询优化器会对每种情况做出成本评估,最终选择最优的那个做为执行计划。

在inner join的连接中,mysql会自己评估使用a表查b表的效率高还是b表查a表高,如果两个表都建有索引的情况下,mysql同样会评估使用a表条件字段上的索引效率高还是b表的。

而我们要做的就是:把两个表的连接条件的两个字段都各自建立上索引,然后explain 一下,查看执行计划,看mysql到底利用了哪个索引,最后再把没有使用索引的表的字段索引给去掉就行了。

三、mysql事务与锁的关系?

事务和锁

事务的定义

简而言之: 事务(Transaction)是并发控制的基本单位。

所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务的特点 ACID

原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(Consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(Durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

事务对应的语句

BEGIN TRANSACTION 开始事务

COMMIT TRANSACTION 提交事务

ROLLBACK TRANSACTION 回滚事务

事务并发控制

事务不考虑隔离性引发的问题

脏读:此种异常时因为一个事务读取了另一个事务修改了但是未提交的数据,当修改的事务进行回滚操作时将造成读取事务异常。

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(一个事务读取到了另外一个事务提交的数据)

幻读(虚读):指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。例如读整个表,即表的行数,例如第一次读某个表有3条记录,第二次读该表又有4条记录 (和不可重复读的不同:不可重复读针对的是数据的值,幻读针对的是数据的数量)

数据库事务隔离级别(SQL标准定义)

READ UNCOMMITTED(未提交读):事务中的修改,即使没有提交,其他事务也可以看得到。很容易导致脏读等众多问题,如无必要,很少使用

READ COMMITTED(提交读):大多数数据库系统默认的隔离级别(除Mysql等)。这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。这种级别会出现读取旧数据的现象,即不可重复读的问题。

REPEATABLE READ(可重复读):解决了脏读的问题,该级别保证了每行的记录的结果是一致的,也就是上面说的读了旧数据的问题,但是却无法解决另一个问题,幻行,顾名思义就是突然蹦出来的行数据。指的就是某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。即幻读。–MYSQL默认隔离级别

SERIALIZABLE(可串行化):最高的隔离级别,它通过强制事务串行执行(注意是串行),避免了前面的幻读情况,由于他大量加上锁,导致大量的请求超时,因此性能会比较底下,在特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别

数据库锁

数据库锁的基本类型:

X锁:exclusive 用于写操作

- 某数据对象在没有加任何锁的情况下,一个事务可以对其加X锁,而其他事务就不能对其再加任何锁

S锁:share 用于读操作

- 一个事务对某数据对象加了S 锁后,其他事务就不能对其加X锁,但可以加S锁

U锁:update

- 事务要更新数据对象时,先申请该对象的U 锁。对象加了U锁,允许其他事务对它加S锁。在最后写入时,再申请将U锁升级为X锁。不必在全过程中加X

不同级别的加锁协议

一级封锁协议(脏数据、不可重复读)

任一事务在写某数据前,必须对其加上X锁,该事务结束后才释放。不采用S锁,读数据不用加锁。

事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。

二级封锁协议(不可重复读)

满足一级封锁协议,且任一事务在读取某数据前,必须对其加上S锁,读完后 就释放

三级封锁协议()

满足一级封锁协议,且任一事务在读取某数据前,必须对其加上S锁,事务结束后 释放锁

其他加锁协议

两阶段加锁协议:

整个事务分为两个阶段,前一个阶段为加锁,后一个阶段为解锁。在加锁阶段,事务只能加锁,也可以操作数据,但不能解锁,直到事务释放第一个锁,就进入解锁阶段,此过程中事务只能解锁,也可以操作数据,不能再加锁。两阶段锁协议使得事务具有较高的并发度,因为解锁不必发生在事务结尾。它的不足是没有解决死锁的问题,因为它在加锁阶段没有顺序要求。如两个事务分别申请了A, B锁,接着又申请对方的锁,此时进入死锁状态。

定理:若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的。

多粒度加锁协议

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。只在存储引擎层实现

页级锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

四、mysql父子关系怎么查?

在 MySQL 中,要查mysql父子关系。这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。

用表结构和数据CREATE TABLE table1(id int, name varchar(10), parent_id int);

INSERT table1 VALUES

根据父级查询方法,很容易可以写出查所有子级的。

五、mysql和phpmyadmin什么关系?

mysql是数据库,而phpmyadmin是用来管理mysql的一个工具。

关于mysql: MySQL是一个关系型数据库管理系统,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。关于phpmyadmin: phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。如下是phpmyadmin的登录界面: 登录后如下,可看到版本等相关信息:

六、mysql 和eclipse 有啥关系?

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS应用软件之一。

七、mysql和jdk有关系吗?

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

八、mysql驱动好和jdbc的关系?

MySQL驱动是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。

JDBC一般指Java数据库连接。它是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

九、mysql和云计算有什么关系?

1、云计算指的是资源使用和交互的一种模式 ,虚拟化指的是技术,可以将物理计算机虚拟成多个逻辑计算机,他俩是彼此独立,互不影响,但是云计算又需要使用虚拟化技术。

2、可以理解为云计算包含虚拟化,如Cloudview云计算操作系统,之所以容易混淆虚拟机和云计算,是因为虚拟机确实在云计算中太普遍了,它是云计算中最活跃的主体,也是核心之一,很多服务都是围绕着虚拟机提供服务。

————————————————

3、在AWS或者其它公有云买云服务,最直接的方式就是申请一台虚拟机。你购买的云数据库,底层也有可能是虚拟机。

4、原理大概是这样的,比如你买一个mysql云数据库,云平台会在后台给你首先起一个虚拟机,这个虚拟机镜像包含了mysql服务,当虚拟机起来,mysql服务就跑起来了。你不仅需要访问数据库,还有可能需要其它相关的功能,比如设置主从、查看日志、创建备份、设置账户权限等,由于虚拟机对用户是不可见的,并且不是所有的用户都会这些操作。

————————————————

5、因此云服务商还提供了非常方便的API接口,用户只需要调用API或者Web界面就可以完成以上所有操作,而不需要自己去学习和关心怎么操作。底层怎么实现?这个没有固定地方法,有可能是在虚拟机跑个agent程序,执行某个操作。

6、比如创建一个数据库用户,agent就跑一个已经定义好的脚本;当然也有可能通过外部程序来完成数据库内部的配置管理,比如ssh/ansible/puppet等。

十、mysql与关系数据库的比较?

mysql本身就是关系型数据库,其他常见的关系型数据库还有SQLSERVER,postgresql等等。这些常见的关系型数据库中,mysql的查询效率是最高的,因为它的设计更加简单,特别适合一些对安全性要求不高的网站使用。但是随着mysql的发展,现在的安全性,稳定性各方面都有了显著的提升。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片