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

面试必问之mysql基础

外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。...如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据; 如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了...如果主键为自增 id 的话,mysql 在写满一个数据页的时候,直接申请另一个新数据页接着写就可以了。...如果主键是非自增 id,为了确保索引有序,mysql 就需要将每次插入的数据都放到合适的位置上。...其实对主键 id 还有一个小小的要求,在满足业务需求的情况下,尽量使用占空间更小的主键 id,因为普通索引的叶子节点上保存的是主键 id 的值,如果主键 id 占空间较大的话,那将会成倍增加 mysql

35110

-基础面试题总结

truncate (清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数据的时候使用。...说明: 以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。...如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。...拓展一下: 一般我们也是不建议在数据库层面使用外键的,应用层面可以解决。不过,这样会对数据的一致性造成威胁。具体要不要使用外键还是要根据你的项目来决定。 4....其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM 和 InnoDB 引擎都支持表级锁。 行级锁: MySQL 中锁定 粒度最小 的一种锁,只针对当前操作的行进行加锁。

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

    MySQL学习笔记【基础篇】

    3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 4、表由列组成,我们也称为字段。...注意是在从表中添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。 从表的外键列的类型要求和主表中对应的列的类型一致。名称无要求。...)#外键约束 ); -- 查看stuinfo表中所有的索引,包括主键、外键、唯一 SHOW INDEX FROM stuinfo; 2.添加表级约束 语法: 在各个字段的最下面 【constraint...stuinfo ADD UNIQUE(seat); 5.添加外键 -- 为majorid字段添加外键约束,与major表中的id字段关联 ALTER TABLE stuinfo ADD CONSTRAINT...特点 标识列必须和主键搭配吗?------> 不一定,但要求是一个key,比如主键、唯一、外键; 一个表中可以有几个标识列?

    2.2K31

    03-面试必会-Mysql篇

    , 单列索引又分为 普通索引:MySQL 中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。...MyISAM 不支持事务 , InnerDB 支持事务 MyISAM 不支持外键 , InnerDB 支持外键 9....需要查询二次 如果使用MyISAM存储引擎 , 会首先根据索引查询到数据行指针, 再根据指针获取数据 如果是InnoDB存储引擎 , 会根据索引查找指定数据关联的主键 ID , 再根据主键 ID 去主键索引中查找数据...Mysql 锁和分库分表 MYSQL 锁按照锁的粒度分,分为以下三类: 全局锁:锁定数据库中的所有表。...在 RR 隔离级别下都支持 临键锁(Next-Key Lock):行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙 Gap。在 RR 隔离级别下支持。 MYSQL 实现事物的原理 有了解过嘛 ?

    25110

    MySQL的使用及优化

    都是一些日常需要注意的地方,我们目前在开发过程中,其实用不到MySQL太深的内容的。只是能适用我们日常开发的知识就可以了。所以我将自己的理解和学习总结也写出来,供大家一起分享。...外检约束:虽然InnoDB支持外键,MyISAM不支持外键。但是也不建议在日常的使用过程中用外键,因为每次操作外键时都要去检查一下外键关联的数据。...表设计-规划 在设计表时要遵循几个基本原则: 线上业务尽量避免使用外键、存储过程、分区表、触发器等。 不在数据库中存储图片、文件等大数据。 尽量避免使用TEXT\BLOB等类型的大字段。...并且是按照字段定义的大小来占用磁盘空间的,如果一个200G的硬盘,但是表中的数据是50G,在抽取全表数据时会有可能将磁盘占满的。...所以,更大的定义列会消耗更多的内存,在使用内存临时表进行排序或操作时会根据定义的长度进行内存分配。

    75720

    2022年Java秋招面试必看的 | MySQL调优面试题

    前言 随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。...共有 5 种类型的表格: 1、MyISAM2、Heap 3、Merge 4、INNODB 5、MISAM 3、简述在MySQL 数据库中 MyISAM 和InnoDB 的区别 图片 4、MySQL 中InnoDB...6、主键和候选键有什么区别? 表格的每一行都由主键唯一标识,一个表只有一个主键。 主键也是候选键。按照惯例, 候选键可以被指定为主键, 并且可以用于任何外键引用。...REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。 51、CHAR 和 VARCHAR 的区别? 图片 52、列的字符串类型可以是什么? 图片 53、如何获取当前的 Mysql 版本?...主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。 58、如何使用 Unix shell 登录 Mysql? 图片 59、myisamchk 是用来做什么的?

    2.8K30

    MySQL 索引概览

    CREATE TABLE user_tbl( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 与之类似的是外键索引...,如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。...聚集索引在创建主键时自动生成,如果没有主键,则根据第一个不为空的唯一索引自动生成,如果还没有,则自动生成一个隐式的聚集索引。...这是由 MySQL 查询优化器的执行顺序决定的,在执行一条查询 sql 时,针对索引的选择大致有如下步骤: MySQL 优化器根据搜索条件,找出所有可能使用的索引 计算全表扫描的代价 计算使用不同索引执行查询的代价...对比各种执行方案的代价,找出成本最低的那一个 因此,虽然有多个单列索引,但 MySQL 只能用到其中的那个系统认为似乎是最有效率的,其他的就会失效。

    81220

    Mysql-5-数据表的基本操作

    主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询速度。主键分为两种类型:单字段主键和多字段联合主键。...float,primary key(id,name)); 3.外键约束:外键用来在两个表之间建立联系,它可以是一列或者多列。...是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的主键。...例:定义数据表tb_employee5,并且在该表中创建外键约束 创建一个部门表tb_dept1,表结构如下表所示 字段名称 数据类型 备注 id int(11) 部门编号 name varchar(22...常用的修改表的操作有:修改表名,修改字段数据类型或字段名,增加和删除字段,修改字段的排列位置,更改表的存储引擎,删除表的外键约束等。

    1.7K60

    MySQL数据库总结

    二 MySQL数据类型(5.5版本)   MySQL中除了字符串类型需要设置长度,其他类型都有默认长度。 ? ? ? ?...SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操纵数据,定义数据,控制数据。   ...88000.00,200.00,30); -- 1.查询每个部门的平均工资 SELECT deptno,AVG(sal) FROM emp GROUP BY deptno; -- 2.查询每个职位的最高工资和最低工资...如果表A的主键是表B中的字段,则该字段称为表B的外键,表A(主表),表B(从表)。 外键是用来实现参照完整性的,主表更新时从表也更新,主表删除时如果从表有匹配的项,删除失败。   ...INSERT INTO dept VALUES (10,'餐饮部','上海'), (20,'销售部','浙江'), (30,'财务部','北京'), (40,'技术部','深圳'); 为从表emp加外键

    63150

    sql语言总结合集

    数据表:数据表是关系数据库的基本存储结构,二维数据表有行(Row),和列(Column)组成,也叫作记录(行)和字段(列) 二、MySQL数据类型(5.5版本) 数值类型        Java中        ...MySQL中 整型        byte        tinyint short        smallint int        int long        bigint 浮点型        ...:用于在两个表之间建立关系,需要指定引用主表的那一列 如果表A的主键是表B中的字段,则该字段称为表B的外键,表A(主表),表B(从表)....订单和商品:一个订单中包含多个商品,一个商品也可以出现多个订单中。 一对一: 公司与地址,一个公司只能有一个注册地址,一个地址也只能被一个公司注册。...外键关联的话,如果主表中的数据,从表用了的,就删除不了、 代码大杂烩,按照DDL DML TCL DQL DCL顺序进行 数据定义语言DDL CREATE,ALTER,DROP -- 一、数据库相关的DDL

    68130

    python数据库-MySQL数据库高级查询操作(51)

    不难发现在这么多列中,年龄、住址和成绩、学科没有直接关系,也就是说我考多少分,和年龄及住址都无关,他们都是学生的信息,但都是不相关的信息,所以根据第三范式,我们需要将这些数据根据其相关性拆分为多个表。...但是在成绩表中查找的时候,需要从省标中查到张三的学号(stu_id)和从学科表中查到语文学科(sub_id)的编号,这个时候这三张表就发生了关系,这也就是关系型数据库的精髓,而根据这种表与表之间的关系也会衍生出很多的查询的高级操作...表的stu_id外键关联到students表的stu_id字段(说明:这里scores表里面字段stu_id和students表里的stu_id重名了,最好避免重名) 每个外键都有一个名字,可以通过constraint...例如,此时在从表插入或者修改数据时,如果stu_id的值在students表中不存在则会报错 外键也可以在创建表时可以直接创建约束 语法: foreign key (外键字段) references...三、外键的级联操作 在删除或者修改students表的数据时,如果这个stu_id值在scores中已经存在,则会抛异常 推荐使用逻辑删除,还可以解决这个问题 可以创建表时指定级联操作,也可以在创建表后再修改外键的级联操作

    3K20

    【Mysql】:linux环境下表的三部曲(数据操作 + 类型解析 + 约束规则)

    外键 用于 确保表间数据的一致性,例如:防止插入一个不存在班级的学生或删除一个还有学生的班级。 定义:外键约束用于建立主表和从表之间的关联关系,主要定义在从表上,主表必须包含主键或唯一键。...外键 用于定义 主表 和 从表 之间的关系: 外键约束主要定义在从表上 主表则必须是有主键约束或 unique 约束 当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL 在从表中,设置外键约束...,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整 3.8 外键(foreign Key) 外键: 从表和主表的关联关系 产生外键约束 为什么需要外键约束?...外键 用于 确保表间数据的一致性,例如:防止插入一个不存在班级的学生或删除一个还有学生的班级。 定义:外键约束用于建立主表和从表之间的关联关系,主要定义在从表上,主表必须包含主键或唯一键。...外键 用于定义 主表 和 从表 之间的关系: 外键约束主要定义在从表上 主表则必须是有主键约束或 unique 约束 当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL 在从表中,设置外键约束

    3700

    MariaDB 表的基本操作

    ,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度.主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的.主键分为两种类型:单字段主键和多字段联合主键.定义单字段主键实例...◆外键用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键,外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值.外键:首先它是表中的一个字段...,它可以不是本表的主键,但对应另外一个表的主键.外键主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行.外键的作用是保持数据的一致性、完整性.主表(父表):两个具有关联关系的表...,以确认表的定义是否正确.在MySQL中,查看表结构可以使用describe和show create table语句....◆对于数据库定义的外键,如果不需要可以将其删除掉,外键一旦删除,就会解除主表和从表的关联关系,MySQL中删除外键的语法如下:alter table drop foreign key 外键约束名

    1.4K20

    Mysql数据库-存储引擎

    外键约束 MySQL支持外键的存储引擎只有InnoDB , 在创建外键的时候, 要求主表必须有对应的索引 ,从表在创建外键的时候,关联对应的索引字段。...下面两张表中 , country_innodb是主表 , country_id为主键索引,city_innodb表是从表,country_id字段为外键,对应于country_innodb表的主键country_id...存储位置 表结构存放在 .frm 文件中, 数据和索引保存在 .ibd 文件中 [root@server01 db2]# ls -ll total 112 -rw-r----- 1 mysql mysql...对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。以下是几种常用的存储引擎的使用环境。 InnoDB : 是Mysql的默认存储引擎,用于事务处理应用程序,支持外键。...MEMORY :将所有数据保存在内存中,在需要快速定位记录和其他类似数据环境下,可以提供几块的访问。

    5.1K10

    MySQL 面试题

    这些表定义了 MySQL 数据库服务中各级别(全局,数据库,表和列等)的权限。在管理 MySQL 权限时,常常会使用命令行工具或者图形化界面工具对这些表进行查询或修改,而不直接操作这些表。...在 MySQL 中,char和 varchar类型都用于存储字符(字符串)数据,但它们在存储机制和使用场景上有以下主要区别: 存储方式: char是一个固定长度的字段,它总是会占用定义时指定的长度(字节数...在数据库中,主键(Primary Key)和候选键(Candidate Key)都是用于唯一标识表的行,但它们有以下不同点: 定义: 候选键:一个表中的一个或多个列,可以唯一标识表中的每一行。...聚簇索引:聚簇索引并不仅仅是一个索引,而是决定表中数据存储和排序方式的数据结构。在聚簇索引中,表中数据物理上按索引键顺序存储。换句话说,聚簇索引定义了数据在磁盘上的物理顺序。...LEFT OUTER JOIN 关键字指示我们想要执行左外连接。 ON employees.id = project_assignments.employee_id 定义了两个表之间的关联条件。

    16011

    mysql学习总结04 — SQL数据操作

    左连接和右连接其实可以互相转换,但是数据对应的位置(表顺序)会改变 外连接中主表数据记录一定会保存:连接之后不会出现记录数少于主表(内连接可能) 应用 常用的数据获取方式:获取主表和对应的从表数据(关联...where子查询:子查询出现的位置在where条件中(标量、列、行子查询) from子查询:子查询出现的位置在from数据源中,做数据源(表子查询) 11.1 标量子查询 标量子查询:子查询结果是一个数据...key(class_id) references tbClass(id); 修改&删除外键 外键不允许修改,只能先删除后增加。...外键字段与主表主键字段类型完全一致 外键字段与主表主键字段基本属性相同 如果是在表后增加外键,对数据有要求(从表数据与主表的关联关系) 外键只能使用innodb存储引擎,myisam不支持 12.4...(主表与从表数据一致),外键强大的数据约束作用可能导致数据在后台变化的不可控,所以外键在实际开发中较少使用 12.5 外键约束模式 三种约束模式: district:严格模式,默认的,不允许操作 cascade

    5.2K30

    MySQL数据库入门

    MySQL引擎在物理文件上的区别 InnoDB在数据库表中只有一个*.frm文件,以及上级目录下的 ibdata1文件 MYISAM对应文件 *.frm 表结构的定义文件 *.MYD 数据文件(data...注释 -- /**/ sql 关键字大小写不敏感,建议大家写小写 所有的符号全部用英文 MySQL的数据管理 外键(了解即可) 方式一、在创建表的时候,增加约束(麻烦,比较复杂) CREATE TABLE...PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 学生表的 gradeid字段 要去引用年级表的gradeid -- 定义外键...KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 学生表的 gradeid字段 要去引用年级表的gradeid -- 定义外键key --...) REFERENCES 那个表(哪个字段) 以上的操作都是物理外键,数据库级别的外键,我们不建议使用!

    58120
    领券