MYsql面试题
532 字
3 分钟
MYsql面试题
索引
索引是数据库的”目录”,用空间换时间,加速查询但拖慢写入。 — 1️⃣ 普通索引:加速查询 CREATE INDEX idx_name ON employees (name);
— 2️⃣ 唯一索引:加速查询 + 保证唯一性(如手机号) CREATE UNIQUE INDEX idx_phone ON users (phone);
— 3️⃣ 联合索引:多列组合查询(遵循最左前缀原则) CREATE INDEX idx_dept_salary ON employees (dept, salary);
事务
四大特性:
原子性(A) 事务不可分割,要么全做要么全不做 转账:扣钱和加钱必须同时成功。 一致性(C) 事务前后数据库状态保持一致 转账后总金额不变(1000+500=900+600)。 隔离性(I) 多个事务并发执行时互不干扰 你转账时,别人看不到你未提交的修改。 持久性(D) 事务提交后,数据永久保存 提交后即使数据库重启,钱也不会少。
-- 账户表 accounts-- id | name | balance-- 1 | 张三 | 1000-- 2 | 李四 | 500
-- 张三给李四转 100 元START TRANSACTION; -- 开启事务
UPDATE accounts SET balance = balance - 100 WHERE id = 1;UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- ✅ 两条都成功,提交-- 或ROLLBACK; -- ❌ 任何一条失败,全部回滚聚合查询
一致性
- 脏读 读到另一个事务未提交的数据(万一对方回滚,你就读了脏数据)。 读到的数据可能根本不存在(对方回滚了)。
- 不可重复读 同一个事务内,两次读同一条记录,结果不一样(因为中间被其他事务修改并提交了)。 针对同一行数据,内容变了。
- 幻读 同一个事务内,两次执行同一条查询,返回的行数不一样(因为中间被其他事务插入/删除了符合条件的新行)。 针对行数变了,多出来或少了”幻影”行。
三大区别速记: 脏读:读到未提交的临时数据(最严重)。 不可重复读:读到已提交的更新(同一条记录内容变了)。 幻读:读到已提交的新增/删除(行数变了)。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!