首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

115道MySQL面试题(含答案),从简单到深入!

唯一键(Unique Key)也确保列的值唯一,但一个表可以有多个唯一键,并且唯一键的列可以包含NULL值。7. 什么是视图,它有什么优点?视图是基于SQL语句的结果集的可视化表现。...它确保一个表中的列值必须在另一个表的主键或唯一键列中存在。这有助于维护数据的完整性和一致性。...当执行相同的查询时,如果查询缓存中存在结果,MySQL会直接返回缓存的结果,而不是再次执行查询。查询缓存的有效性受多个因素影响,包括表的更改。在高更新环境中,查询缓存可能不会带来性能提升。42....触发器和存储过程都是在MySQL中执行预定义操作的数据库对象,但它们的使用场景和目的不同: - 触发器(Trigger):自动响应特定事件(如插入、更新或删除)的数据库对象。...这种技术对于具有相同前缀的字符串数据特别有效,如长文本字段。99. 在MySQL中,什么是自适应哈希索引?自适应哈希索引是InnoDB存储引擎的一个特性,它基于对表数据的查询模式动态创建哈希索引。

2.2K10

深入剖析MySQL数据库约束:原理、应用与实践

数据质量是数据库应用的生命线,直接关系到基于数据的决策的准确性和可靠性。在实际应用中,数据库需要面对来自不同数据源、不同格式的数据,并且要满足多个用户并发访问和操作的需求。...2.2.3 唯一约束(UNIQUE) 唯一约束是用于确保表中某列或多列的取值唯一的约束。它保证了在指定的列上,所有记录的值都不相同,从而防止数据的重复插入。...这一约束机制通过在数据库层面进行严格的检查,当有新数据插入或现有数据更新时,数据库会自动验证相关列的值是否与已存在的值重复。若存在重复值,操作将被拒绝,以此保证数据的唯一性。...当为某列设置非空约束后,数据库系统会在数据插入和更新操作时,对该列进行严格的检查,确保插入或更新的数据值不为空。若违反这一规则,操作将被拒绝,并返回错误提示,以此保证数据的完整性和准确性。...当插入或更新成绩数据时,如果输入的成绩值小于 0 或大于 100,数据库会拒绝该操作,并返回错误提示,从而保证了成绩数据的有效性和合理性。

12310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL 语法速成手册

    列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。 行(row) - 表中的一个记录。 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。...DISTINCT 用于返回唯一不同的值。它作用于所有列,也就是说所有列的值都相同才算相同。 LIMIT 限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。...在没有条件语句的情况下返回笛卡尔积。 自连接可以看成内连接的一种,只是连接的表是自身而已。 自然连接是把同名列通过 = 测试连接起来的,同名列可以有多个。...UNION 基本规则 所有查询的列数和列顺序必须相同。 每个查询中涉及表的列的数据类型必须相同或兼容。 通常返回的列名取自第一个查询。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    17.2K40

    SQL 语法速成手册

    列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。 行(row) - 表中的一个记录。 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。...DISTINCT 用于返回唯一不同的值。它作用于所有列,也就是说所有列的值都相同才算相同。 LIMIT 限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。...在没有条件语句的情况下返回笛卡尔积。 自连接可以看成内连接的一种,只是连接的表是自身而已。 自然连接是把同名列通过 = 测试连接起来的,同名列可以有多个。...UNION 基本规则 所有查询的列数和列顺序必须相同。 每个查询中涉及表的列的数据类型必须相同或兼容。 通常返回的列名取自第一个查询。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    16.9K20

    3分钟速读原著《高性能MySQL》(二)

    因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。...3.RANGE分区 可以根据对列的指定,如下所示,当主键ID值大于10小于20的就会存储在p1区,当ID值小于10时就会存储在p0区,并且在磁盘当中也会分成两个ibd文件来进行存储,这种情况下如果插入的数据范围不在定义范围时...,例如插入30,则会报错.RANGE分区主要适用于日期列分区,如销售类的表,可以根据年份来分区存放销售记录 create table t( id int(11) )engine=innodb...4.视图的使用场景 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如工资 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作 三.外键 1.定义 表的外键是另一表的主键,...所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。

    53210

    MySQL进阶 1:存储引擎、索引

    如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。...唯一索引: 唯一索引列的值必须唯一,允许有空值。空间索引: 空间索引是一种针对空间数据类型(如点、线、多边形等)建立的特殊索引,用于加速地理空间数据的查询和检索操作。...具有唯一性约束的列: 对于需要保证唯一性的列,如主键或具有唯一约束的列,建立索引是必要的,因为索引可以帮助快速检查重复的数据。...索引页的碎片化意味着索引中的数据不再按照顺序存储,这会增加数据库在执行查询操作时的磁盘I/O次数,因为数据库可能需要读取多个不连续的页面来满足查询条件。...分析数据分布:对于列的值分布进行分析,避免在高度重复的列上创建索引,因为这样的索引可能不会带来显著的性能提升。避免过度索引:过多的索引会增加数据库的维护成本,尤其是在数据插入、更新和删除时。

    11900

    如果有一天你被这么问MySQL,说明你遇到较真的了

    在MySQL中,常见的索引类型包括以下几种: 普通索引(INDEX) :这是最基本的索引类型,可以包含一个或多个列。普通索引用于提高查询效率,但不保证数据的唯一性。...组合索引(复合索引) :组合索引是包含多个列的索引,可以提高对多列组合进行查询的效率。 全文索引(FULLTEXT) :全文索引用于文本数据的快速搜索,适用于需要对大量文本数据进行全文搜索的场景。...例如: 哈希索引适合等值查询,但不支持范围查询; 全文索引适合文本搜索,但可能影响插入和更新操作的性能; B-Tree索引适用于大多数查询场景,但可能在某些情况下不如哈希索引高效。...数据结构: 聚簇索引:数据行存储在与索引相同的B+树结构中,这意味着数据行和索引是同一棵树的节点。 非聚簇索引:索引和主键ID存储在B+树结构中,但数据行本身并不存储在索引结构中。...查询性能影响 插入和更新性能: 聚簇索引:插入和更新数据时需要移动其他数据行,因此性能较差。由于数据行的物理位置与索引顺序一致,更新操作需要移动所有受影响的数据行,这会增加操作的复杂性和时间消耗。

    6310

    SQL语法速成手册,建议收藏!

    列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。 行(row) - 表中的一个记录。 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。...DISTINCT 用于返回唯一不同的值。它作用于所有列,也就是说所有列的值都相同才算相同。 LIMIT 限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。...UNION 基本规则 所有查询的列数和列顺序必须相同。 每个查询中涉及表的列的数据类型必须相同或兼容。 通常返回的列名取自第一个查询。...视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。对视图的操作和对普通表的操作一样。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    8.1K30

    Mysql 快速指南

    模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。 列(column):表中的一个字段。所有表都是由一个或多个列组成的。...DISTINCT 用于返回唯一不同的值。它作用于所有列,也就是说所有列的值都相同才算相同。 LIMIT 限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。...UNION 基本规则 所有查询的列数和列顺序必须相同。 每个查询中涉及表的列的数据类型必须相同或兼容。 通常返回的列名取自第一个查询。...视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。对视图的操作和对普通表的操作一样。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    6.9K20

    一文带你熟悉MySQL索引

    在数据库中,这意味着需要更多的存储空间和时间来维护索引。当你在图书馆中添加或移除书籍时,索引卡片也需要更新。同样,在数据库中,当你添加、修改或删除数据时,索引也需要更新,这会增加额外的工作。...高效的数据结构:索引使用的数据结构(如B+ree)允许快速地在磁盘上存储和检索数据。这种结构支持快速的插入、删除和查找操作,因为它总是保持平衡,确保任何数据的查找路径长度都大致相同。...缓存效率:索引提高了数据访问的局部性,使得相关的数据更有可能被同时缓存到内存中。当多个查询访问相同的数据时,这些数据可以被缓存,从而避免了重复的磁盘I/O操作。...在索引列上使用内置函数: 对索引列应用MySQL内置函数,如DATE()或UPPER(),会使得MySQL无法直接使用索引进行查找。...同时,聚集索引的维护成本相对较高,尤其是在插入和更新操作频繁的情况下,可能会引起页分裂和数据重组,影响性能。因此,在选择合适的主键和索引策略时,需要根据应用的具体需求和数据访问模式进行权衡。

    19010

    这是我见过最有用的Mysql面试题,面试了无数公司总结的(内附答案)

    RDBMS是基于关系模型的数据库管理系统(DBMS)。 可以使用结构化查询语言(SQL)访问关系数据库中的数据 10.在IT行业中流行的数据库管理系统是什么?...它是美国国家标准协会(ANSI)的标准。 它是用于访问和操作数据库的标准语言。 使用SQL,我们可以做的一些动作是创建数据库,表,存储过程(SP), 执行查询,针对数据库检索,插入,更新,删除数据。...可以在一个列或一组列上创建索引。 18.所有不同类型的索引是什么? 索引有三种类型 1.唯一索引:唯一索引通过确保表中没有两行数据具有相同的键值来帮助维护数据完整性。...它包含类似于真实表的行和列。视图中的字段是来自一个或多个实际表的字段。 视图不包含自己的数据。它们用于限制对数据库的访问或隐藏数据复杂性。 21.视图的优点是什么?...外部联接:外部联接从两个表返回行,这些行包括与一个或两个表不匹配的记录。 36.什么是SQL约束? SQL约束是在数据库中插入,删除或更新数据时实施一些约束的一组规则。 37.

    27.1K20

    MySQL 教程上

    简单的正则表达式测试 可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP 检查总是返回0(没有匹配)或1(匹配)。可以用带文字串的REGEXP来测试表达式,并试验它们。...insert 语句可以加入 IGNORE 关键字 insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。...update 后为无用语句,如 id=id,则同1功能相同,但错误不会被忽略掉。...id = id UPDATE 语句 IGNORE 关键字 如果用 UPDATE 语句更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个 UPDATE 操作被取消(错误发生前更新的所有行被恢复到它们原来的值...建议在定义列的时候,检查 COMMENT 备注,是否运行非空,是否具有唯一性。 SQL 允许指定默认值,在插入行时如果不给出值,DBMS 将自动采用默认值。

    3.4K10

    【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)

    这里肯定要用到事物,我们先从库存表中取出物品数量,然后插入订单,付款后插入付款表信息,然后更新商品数量。在这个过程中,使用锁可以对有限的资源进行保护,解决隔离和并发的矛盾。...这一行 在通过 主键索引 与 唯一索引 对数据行进行 UPDATE 操作时,也会对该行数据加记录锁: -- id 列为主键列或唯一索引列 UPDATE SET age = 50 WHERE id =...对索引项之间的“间隙”加锁,锁定记录的范围(对第一条记录前的间隙或最后一条将记录后的间隙加锁),不包含索引项本身。其他事务不能在锁范围内插入数据,这样就防止了别的事务新增幻影行。...需要强调的一点是,InnoDB 中行级锁是基于索引实现的,临键锁只与非唯一索引列有关,在唯一索引列(包括主键列)上不存在临键锁。 对于行的查询,都是采用该方法,主要目的是解决幻读的问题。...如果事务需要修改或锁定多个表,则应在每个事务中以相同的顺序使用加锁语句。

    95310

    再谈mysql锁机制及原理—锁的诠释

    加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 什么是锁? 锁是计算机协调多个进程或线程并发访问某一资源的机制。...因此,在实际应用开发中,尤其是并发插入比较多的应用,我们要尽量优化业务逻辑,尽量使用相等条件来访问更新数据,避免使用范围条件。...如果事务需要修改或锁定多个表,则应在每个事务中以相同的顺序使用加锁语句。...在应用中,如果不同的程序会并发存取多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会 通过SELECT ......根据上述情况,有以下几种组合 id列是主键,RC隔离级别 id列是二级唯一索引,RC隔离级别 id列是二级非唯一索引,RC隔离级别 id列上没有索引,RC隔离级别 id列是主键,RR隔离级别 id列是二级唯一索引

    1.5K01

    PostgreSQL 索引类型详解

    .]); 唯一索引特性: 声明唯一索引后,索引列的数值在表中必须唯一,不允许出现相同的索引值对应多行数据。 默认情况下,唯一索引对空值不视为相同,因此允许多个空值存在于索引列中。...手动创建索引可能会导致重复,不建议这样做。 表达式的索引 索引列不必只是基础表的一列,还可以是从表的一列或多列计算得出的函数或标量表达式。此功能对于根据计算结果快速访问表非常有用。...,以及确保实际值相同的行不会重复插入,因此索引表达式可以用于实施不能定义为简单唯一约束的约束。...此外,由于索引不需要在所有情况下都更新,部分索引还可以加快许多表更新操作的速度。 索引数据:不在索引范围内的数据,不能使用部分索引。...注意事项: 添加非键列到索引可能会增加索引的大小,可能导致性能下降,尤其是对于宽列。 在表数据变化较慢的情况下,才有利于索引只扫描不访问堆。

    9410

    MySQL命令,一篇文章替你全部搞定

    ,而NOT NULL则表示在插入或者更新该列数据,必须明确给出该列的值; DEFAULT表示该列的默认值,在插入行数据时,若没有给出该列的值就会使用其指定的默认值; PRIMARY KEY用于指定主键,...注意:数据是从第0行开始计数的; ORDER BY子句取一个或者多个列,据此对输出进行排序:SELECT cust_id,cust_name FROM customers ORDER BY cust_id...UNION将多个查询结果进行合并成一个结果集返回,UNION必须包含两个及两个以上的SELECT查询,并且每个传必须包含相同的列、表达式或聚集函数,数据类型不必完全相同,MySQL会进行隐式的类型转换。...创建一个INSERT触发器,每次插入一行数据,每次会返回当前插入的行数据的id。...,需要知道以下两点: 在DELETE触发器代码内,可以引用一个名为OLD的虚拟表,来访问被删除的行; OLD表中的数据只能读,不能被更新,而在INSERT触发器中,就可以通过NEW来更新被插入的行数据;

    2.6K20

    SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    SQL 目录 检索 过滤检索结果 数据汇总处理 分组 给检索结果排序 表操作 插入数据 更新删除数据 子查询-迭代查询 联结-关联多个表 组合查询 视图 其它 检索 检索某表中单个列: SELECT 列名...约束:每个列可以有一种或几种约束。 NOT NULL 非空约束. UNIQUE 唯一约束,可唯一标识数据库表中的每条记录。...,可省略 Customers 括号内的内容,即按照列的顺序,分别插入数据(不推荐)。...如果不写WHERE会更新或删除所有行内容。...常用作从不同表中查询时,只要列数相同就可以拼接到一起,列名按照第一句中查询的列名。 视图 对已存在的表,进行筛选,数据处理,联结等操作后返回的数据,创建的虚拟表。视图是为了重用和简化常用的查询。

    1.5K10

    【MySQL学习】基础指令全解:构建你的数据库技能

    确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 注:一张表里只能有一个 primary key....外键用于关联其他表的主键或唯一键 案例: 对学生表进行数据插入: 注:当我们想删除父表时,则需要先删除 子表,再删除 父表。...例如,基于外键的索引可以加速表之间的联接操作。 4. 避免全表扫描 使用索引后,MySQL 可以避免对整个表进行全表扫描,这可以显著减少查询的时间,尤其是在数据量非常大的情况下。 5....7.4 使用场景及注意事项 要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点: 数据量较大,且经常对这些列进行条件查询。 该数据库表的插入操作,及对这些列的修改操作频率较低。...更新性能:虽然索引能提高查询速度,但插入、更新和删除操作可能会变得较慢,因为每次数据修改时,索引也需要被更新。 选择性:索引对于具有高选择性的列(即列中唯一值较多)效果更好。

    15410

    SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    目录 检索 过滤检索结果 数据汇总处理 分组 给检索结果排序 表操作 插入数据 更新删除数据 子查询-迭代查询 联结-关联多个表 组合查询 视图 其它 检索 检索某表中单个列: SELECT 列名...约束: 每个列可以有一种或几种约束。 NOT NULL 非空约束. UNIQUE 唯一约束,可唯一标识数据库表中的每条记录。...,可省略 Customers 括号内的内容,即按照列的顺序,分别插入数据(不推荐)。...如果不写WHERE会更新或删除所有行内容。...常用作从不同表中查询时,只要列数相同就可以拼接到一起,列名按照第一句中查询的列名。 视图 对已存在的表,进行筛选,数据处理,联结等操作后返回的数据,创建的虚拟表。视图是为了重用和简化常用的查询。

    2.2K20

    最近的面试都在问些什么?

    存储空间占用更小,更快地加载到内存;基于数值比基于字符串比较速度更快;整数类型的ID一般是自增的,顺序写磁盘,减少数据碎片;ID更具有唯一性; mysql中,如何判断一个字段是否适合建立索引?...使用LIKE操作符进行模糊匹配,查询条件中的数据类型与索引列的数据类型不匹配导致隐式类型转换,查询中对索引列进行了计算或使用了函数; 如果数据量小, 不走索引;当使用order by时, 如果发现走索引的效率比较慢...复合索引会按照索引列的顺序对数据进行排序,最左前缀表示当查询条件包含复合索引中最左边的列时,数据库能够利用索引来加速查询。 该语句为什么查询慢? 有什么优化思路?...悲观锁在数据访问时加锁,通常用于写密集型场景,或者在数据冲突概率较高的情况下使用,排他锁; 乐观锁在提交更新时进行冲突检查,通常用于读密集型场景,或者在数据冲突概率较低的情况下使用,版本号机制,时间戳机制...唯一索引冲突:如果数据库表中有唯一索引,如主键或唯一约束,那么两个线程的插入操作中只有一个会成功,另一个会因为违反唯一性约束而失败;使用事务和select for update检查数据是否存在,在事务中锁定数据行

    12510
    领券