常见的关系型数据库有哪些
说到关系型数据库,平时用得最多的就是 MySQL、Oracle、SQL Server 和 PostgreSQL。比如你在开发一个电商后台,用户订单、商品信息这些结构化数据,基本都会存在这类数据库里。面试官常会问你用过哪些,这时候别说只用过 Excel,那不是关系型数据库。
主键和外键的作用是什么
主键就像身份证号,每条记录都得有唯一标识。比如用户表里的 user_id,不能重复也不能为空。外键则是用来建立关联的,比如订单表里的 user_id 就是外键,指向用户表的主键。这样就能知道每个订单是谁下的。
说说事务的 ACID 特性
ACID 其实就是四个特性的缩写。A 是原子性,操作要么全做,要么全不做,像转账这种操作就必须保证;C 是一致性,数据从一个合法状态变到另一个合法状态;I 是隔离性,多个事务同时执行时互不干扰;D 是持久性,一旦提交,数据就不会丢。银行系统最看重这个。
什么是索引,有什么优缺点
索引就像书的目录,能快速定位数据。比如你在百万级用户表里查一个人,没索引就得一页页翻,有索引直接跳到位置。但索引也不是白吃的,它会占用空间,而且插入、更新数据时要同步维护索引,速度会受影响。
MySQL 中 InnoDB 和 MyISAM 的区别
InnoDB 支持事务、行级锁、外键,适合高并发写场景,比如订单系统。MyISAM 不支持事务,锁是表级的,读快但写容易堵,适合日志类只读多的场景。现在大多数项目都用 InnoDB。
SQL 查询优化有哪些常用方法
先看有没有走索引,可以用 EXPLAIN 分析执行计划。避免 SELECT *,只取需要的字段。大表连接注意关联字段有没有索引。分页查询别用 OFFSET 深翻,容易拖慢,可以记上一次 ID 接着查。
写一个左连接查询的例子
SELECT u.name, o.order_no
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;这条语句会列出所有用户,不管有没有订单。如果换成 INNER JOIN,就只显示有订单的用户了。面试时经常让你手写这类 SQL,得练熟。
什么是范式,一般用到第几范式
范式是设计表结构的规范。第一范式要求字段原子性,不能再拆;第二范式要求完全依赖主键,不能部分依赖;第三范式要求不能有传递依赖。实际开发中一般做到第三范式就够了,有时候为了查询效率也会适度反范式,比如把用户名直接冗余到订单表里。