此篇是本人在准备java开发岗位时准备的一些关于mysql的事务和一些面试需要特别注意的地方,还有诸多面试知识点在主页,欢迎大家查看,互相交流学习~~ 第一部分链接 目前只是第二部分后续还会更新mysql 的优化、集群、锁和其他高频面试问题 事务4大特性 事务4大特性: 原子性、一致性、隔离性、持久性 原⼦性: 事务是最⼩的执⾏单位,不允许分割。 undolog日志保证,他记录了需要回滚的日志信息,回滚时撤销已执行的sql 一致性:由其他三大特性共同保证,是事务的目的 隔离性:由MVCC保证 持久性:由redolog日志和内存保证,mysql 2、不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。 它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻卷一样,所以称为幻读。
中间发生了什么事情):DNS解析服务 用户输入完地址掉下回车,先找域名对应服务,DNS,传ip,在请求URI,创建链接 ,三次握手,成功,客户端发送报文,建立http请求+springmvc执行流程,断开连接 2. 7.为什么写service不直接写实现类 解耦、异步开发,提高工作效率 8.开发中遇到了那些问题,与解决 ---- ---- ---- 002篇: 1.从数据库取值,服务器启动就加载这个值到内存 2. , 1 2
Q1、mysql数据库是关系型数据库 Q2、存储引擎是InnoDB、MYISAM Q3、InnoDB与MyISAM的区别? MySQL的索引使用的是B+Tree。但是存储内容与存储引擎有关 在MyISAM下叶子节点存储的是数据的地址,通过索引找到地址,再通过地址找数据。 9.1、MySQL日志都有哪些,作用 Q1、binlog日志,是server端的日志 主要用于主从数据同步,记录的模式包括:statement、mixed、row(默认) Q2、redolog日志,是存储引擎层的日志 数据库高性能优化建议 ①、单表数量不能超过500w; ②、TEXT、BLOB类型的字段存储:TEXT一般存储长文本字符串;varchar(n) n代表的是字符数;text(m)m代表的是字节数 Q2、SQL 偏移法:需要知道上一次分页查询的最大id && id是自增的select ... from table_name where id > lastMaxId order by id limit 10 2、
而此时的事务并发性是最低的 2. Mysql 的 hash 索引是怎么样,有什么优缺点? 因此,redo log 有 2 个位置,一个是 writepos,自己写日志的位置;另一个是 checkpoint,是定时的将数据页同步到硬盘的位置。 Mysql 里的锁 Mysql 里的锁有哪些? 乐观/悲观锁 乐观锁:在读取数据时会假设各个事务互不影响,它们会处理好属于自己的那部分数据。 [mysql 的 3 层架构] 9. 执行计划是什么?怎么看? 执行计划是 mysql 根据我们的查询语句进行一系列的分析后得到的优化方案。我们可以通过执行计划来获取执行过程。
前言 在学习了Mysql的基础知识后,我们用一套sql练习题来实战一下。 关于练习所需要的数据,让我们继续玩坏倚天屠龙的江湖。 面试中,偶尔会考察。 面试中,很多有难度的sql也大多难在直接去考虑,难以获得答案。 难度:⭐⭐⭐⭐ 频率:⭐⭐ 思路:通常思路,我们先获取04号同学的课程,再遍历其他同学,以此筛选。 score FROM score GROUP BY s_id,c_id ORDER BY score DESC) a, (SELECT @i:= 0,@j:= 0,@score:= 0) s 简评:Mysql 难度:★★★★☆ 频率:★★ 思路: 1、先将01课程的所有人的分数排序,再进一步根据rank BETWEEN 2 AND 3筛选出2、3名 2、使用同样方法,筛选02、03课程数据,使用 UNION
根本想不起来其他的) 说一下命令执行和代码执行的区别 命令执行就是执行操作系统的命令,代码执行就只是执行你那个语言的代码,比如php的话,需要用system才能执行系统的命令 不用工具,怎么判断一个xxx框架 当时面试不是这个问题
MySQL中,索引是在存储引擎层面实现的,所以,并没有统一的索引标准,一般来说,不同存储引擎的工作方式是不一样的,也不是所有的存储引擎都支持所有类型的索引 哈希索引 哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效 B-Tree索引 B-Tree索引使用B-Tree树数据结构存储数据,大多数MySQL引擎都支持这种索引(Archive引擎是个例外) ? B+Tree索引图 详细的B-Tree和B+Tree可以参考 【MySQL一】开发人心里都该有的那颗 B 树 B树被作为实现索引的数据结构被创造出来,是因为它能够完美的利用“局部性原理”。 (1)由于是m分叉的,高度能够大大降低; (2)每个节点可以存储j个记录,如果将节点大小设置为页大小,例如4K,能够充分的利用预读的特性,极大减少磁盘IO; 注意:高度降低的原因在于: 在利用了局部性原理前提下 ,我们把一个节点的大小设为一页,一页4K,假设一个KEY有8byte,一个节点可以存储500个KEY,即j=500 m叉树,大概m/2<= j <=m,即可以差不多是1000叉树 一层树:1个节点,1*
MySQL数据库面试系列 1. 事务的四大特性 原子性。事务中的操作要么都执行,要么都不执行 一致性。 当事务提交以后,对于数据的更改不会受到数据库系统本身的影响 2. 数据库隔离级别 「数据库并发可能出现的问题:」 脏读。事务A读到了事务B修改的数据 不可重复读。 MySQL的两种存储引擎区别,各自适用于什么场景? 谈一下MySQL架构 MySQL主要分为四层: 连接层。主要是负责和各种后端语言进行交互 服务层。进行SQL数据返回,解析,优化,缓存等 引擎层。进行具体的数据操作 存储层。 谈一下MySQL的锁 行锁和表锁 读锁和写锁 间隙锁 乐观锁和悲观锁 13.
1、MySQL中myisam与innodb的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作对整个表加锁; 存储表的总行数; 一个MYISAM表有三个文件:索引文件、 知道的童鞋,欢迎留言说出正确答案~ 2、MySQL INT和CHAR隐式类型转换需要注意什么? ----+ | id | name | +----+---------+ | | apple | +----+---------+ 情况2: // 查询字段全部转化成数字,id:1和id:2字段值转化为 -------+ | | apple | | | banana | +----+----------+ 3、MySQL 如何高效率随机获取N条数据? WHERE t1.id >= t2.id ORDER BY t1.id LIMIT ; 4、说说你知道的MySQL的索引类型,并分别简述一下各自的场景。
MySQL面试题 查询Student表中的所有记录的Sname、Ssex和Class列。 查询教师所有的单位即不重复的Depart列。 查询Score表中成绩在60到80之间的所有记录。 查询至少有2名男生的班号。 查询Student表中不姓“王”的同学记录。 查询Student表中每个学生的姓名和年龄。 以班号和年龄从大到小的顺序查询Student表中的全部记录。 Mysql数据库导入数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table teacher` VALUES (856, '张旭', '男', '1969-03-12 00:00:00', '讲师', '电子工程系'); SET FOREIGN_KEY_CHECKS = 1; Mysql select st.sname,st.ssex,st.class from student st; -- 2、查询教师所有的单位即不重复的Depart列。
mysqldump 备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原 备份指定数据库:mysqldump -uroot -p test > /backup/mysqldump/test.db 备份指定数据库指定表(多个表以空格间隔):mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.db 备份指定数据库排除某些表:mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db 还原命令 系统行命令:在导入备份数据库前,db_name如果没有,是需要创建的;而且与db_name.db ; soure 方法:mysql > use db_name ;mysql > source /backup/mysqldump/db_name.db
前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来. 此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案.如果您有其他的MySQL 面试题,觉得题目尚有意思或者难度,可以评论题目或者发送邮件至huyanshi2580@gmail.com,我会将其收录进此文并标注您的姓名. 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 事务是一系列的操作,他们要符合ACID特性.最常见的理解就是:事务中的操作要么全部成功,要么全部失败.但是只是这样还不够的. 2. ACID是什么?可以详细说一下吗?
1、为什么mysql用b+树做索引? 因为b+树它的数据全部存在叶子结点上,并且叶子结点都通过链表进行关联,适合通过索引查询多条记录,如果限制查询一条数据,则可以使用哈希索引 2、什么是B+树? 2 第二范式(2NF) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。 第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF)要求实体的属性完全依赖于主关键字。 3 第三范式(3NF) 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
MySQL 中有哪几种锁?全局锁、行级锁、自增锁、记录锁、外键锁、间隙锁、表级锁、元数据锁、意向锁、临键锁MySQL 中有哪些不同的表格? VARCHAR:只存储一个字符,实际只占用2个字节(1个字节存储长度信息,1个字节存储实际的字符)。性能CHAR:某些情况下性能更好,因为它是固定长度,处理起来更快,尤其是当所有数据接近定义长度时。 example WHERE YEAR(created_at) = 2023;SELECT * FROM example WHERE name LIKE '%Alice';SELECT col1, col2, col3 FROM example WHERE col1 = 10;SELECT * FROM example WHERE col1 = 10 OR col2 = 20;使用函数或表达式使用LIKE通配符索引覆盖不足使用 例如:事务 1 读取某表中的数据 A=20,事务 2 也读取 A=20,事务 1 修改 A=A-1,事务 2 也修改 A=A-1,最终结果 A=19,事务 1 的修改被丢失。
1.名称和字段名要有意义,比如说用英文或英文的组合; 2.自己定义的名称最好都小写; 3.SQL语句需要大写。 ? 2.字符型 可以使用“”和''来存储。 char、varchar的长度都是255。 ? 如果超出了指定的长度,就会保存失败。 ? SET 集合 1,2,3,4,8字节 ? 数据字段属性 1.unsigned可以让空间增加一倍, -128-127, 0-255,只能用在数值型字段; 2.zerofill 零填充,前导0,自动用0填充。 ? ? 2.唯一索引 3.常规索引 4.全文索引
MySQL面试题 Mysql 基本架构 mysql基本架构组成:客户端,Server层和存储引擎层。其中,只有Server层和存储引擎层是属于Mysql。 返回结果 选择执行方案,执行前检查是否有权限等返回错误信息或者执行结果 存储引擎 主要负责存储数据,提供读写接口 支持 innodb,myisam,archive,memory,CSV等不同的存储引擎类型 面试题汇总 Mysql中有哪些不同的表类型? BDB、HEAP、ISAM、MERGE、MyISAM、InnoDB以及Gemeni这7种Mysql表类型 2. 2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态 3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务, 4) 持久性。 2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
面试题:十一个高级MySql 面试题 1. MYSQL面试题: 简单叙述一下MYSQL的优化 1.数据库的设计 尽量把数据库设计的更小的占磁盘空间. 1).尽可能使用更小的整数类型. 2.系统的用途 1).尽量使用长连接. 2).explain 复杂的SQL语句。 类似地,如果你计划构建电子商务超市,而且系统拥有2G内存,那么你可能要用到mysql-huge.cnf文件了。 为了利用这些文件中的一个,你需要复制一个最适合需求的文件,改名为my.cnf。 2. 联接列 对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。
[mysql@slave02 bin]$ masterha_check_status --conf=/etc/app1.cnf app1 is stopped(2:NOT_RUNNING). [mysql@slave02 bin]$ ps faux | grep manager mysql 27192 0.0 0.0 103244 864 pts/2 S+ 00:23 0:00 \_ grep manager [mysql@slave02 bin]$ ---- 关闭原slave上keepalived 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2:
Ss Sep25 2:17 /usr/sbin/keepalived -D root 73610 0.0 0.0 112500 2908 ? S Sep25 2:21 \_ /usr/sbin/keepalived -D root 73611 0.0 0.0 112484 2064 ?
MySQL用户数据和权限有修改后,搜索希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令 */ MySQL权限管理 授权 --语法格式: grant 权限列表 on 库名 > create view view_test2 as select count(name) from t_student; Query OK, 0 rows affected (0.71 sec) mysql 示例: mysql> show tables; +-----------------+ | Tables_in_test2 | +-----------------+ | goods //从语法可以看出,DROP VIEW一次可以删除多个视图 示例: mysql> drop view view_test1,view_test2; Query OK, 0 rows affected ,sn)将s1,s2...,sn连接成字符串 CONCAT_WS(sep,s1,s2...,sn)将s1,s2...