数据库

    xiaoxiao2025-07-13  11

    1.数据库方面面试总结: 一、数据库方面 mysql数据库引擎: 概念:MySQL中的数据用各种不同的技术(存储机制、索引技巧、等等)存储在文件(或者内存)中。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型) 一、MyISAM存储引擎 默认的存储引擎,提供高速存储和检索,以及全文搜索能力。 不支持事务。表级锁。不能在表损坏后恢复数据。 二、InnoDB存储引擎 具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。 基于聚簇索引建立,聚簇索引对主键查询有很高的性能。不过它的二级索引(secondary index,非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都会很大。因此表上的索引较多的话,主键应当尽可能的小。 支持事务和外键。行级锁。

    mysql锁机制----事务的隔离性 目的:就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。 分类:表级锁定,行级锁定和页级锁定(只知道概念)。

    表级锁: MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock) 如何添加表锁: MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预 查看表级锁:争用情况 sql语句 : show status like 'table%' 行级锁: InnoDB的锁定模式实际上可以分为四种:共享锁(S),排他锁(X),意向共享锁(IS)和意向排他锁(IX)。 共享锁(S) 排他锁(X) 意向共享锁(IS) 意向排他锁(IX) 共享锁(S) 兼容 冲突 兼容 冲突 排他锁(X) 冲突 冲突 冲突 冲突 意向共享锁(IS) 兼容 冲突 兼容 兼容 意向排他锁(IX)冲突 冲突 兼容 兼容 如果一个事务请求的锁模式与当前的锁兼容,InnoDB就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。 添加行级锁: mysql> select * from emp where empid > 100 for update;

    mysql的事务; 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性:

    并发引发的事务问题: 1.更新丢失(Lost Update): 2 脏读 3 不可重复读 4 幻读

    事务的隔离级别: 数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使事务在一定程度上 “串行化”进行,这显然与“并发”是矛盾的

    隔离级别 读数据一致性 脏读 不可重复读 幻读 最低级别只能保证 未提交读 不读取物理上损坏数据 是 是 是 已提交读 语句级 否 是 是 可重复读 事务级 否 否 是 可序列化 最高级别,事务级 否 否 否 说明:“是”表示会出现,”否“表示不会出现

    mysql的默认数据库隔离级别 mysql默认的事务隔离级别为:可重复读(repeatable-read)

    隔离级别与锁的关系 在Read Uncommitted级别下,读操作不加S锁; 在Read Committed级别下,读操作需要加S锁,但是在语句执行完以后释放S锁; 在Repeatable Read级别下,读操作需要加S锁,但是在事务提交之前并不释放S锁,也就是必须等待事务执行完毕以后才释放S锁。 在Serialize级别下,会在Repeatable Read级别的基础上,添加一个范围锁。保证一个事务内的两次查询结果完全一样,而不会出现第一次查询结果是第二次查询结果的子集。

    数据库索引: 1.普通索引 2.唯一索引 UNIQUE INDEX 3.主键索引 4.组合索引

    普通索引: CREATE INDEX index_name ON table(column(length)) 唯一索引: CREATE UNIQUE INDEX indexName ON table(column(length)) 主键索引: CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) NOT NULL , PRIMARY KEY (`id`) ); 4.组合索引 指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合 ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);

    数据库索引的缺点: 1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update和delete。因为更新表时,不仅要保存数据,还要保存一下索引文件。 2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。 索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

    索引失效的的几种场景: 1.索引不会包含有null值的列 只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。 3.索引列排序 查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。 Order by age desc,num asc 4.like语句操作 一般情况下不推荐使用like操作,如果非使用不可,如何使用也是一个问题。 like “

    转载请注明原文地址: https://yun.8miu.com/read-139346.html
    最新回复(0)