本文转载自:https://fangcaicoding.cn/course/14/72
Hello 我是方才,8人后端研发leader、6年后端经验、3年团队管理&架构经验。 专注于分享成体系的编程知识、职场经验、个人成长历程等! 文末,方才送你一份优质的技术资料,记得领取哟!
最近方才面试了一个初级ava同学,聊到Mysql,我首先问了一句,什么是数据库?
他说mysql就是数据库呀。。。
回答得看似正确,实际也是一点毛病都没有。
不过这反应出这位同学,对数据库是没有一个认知的,没有理解数据库的本质。
今天方才简单聊聊,什么是数据库?如果对你有所启发,记得点赞关注哟。
大白话讲解下就是:数据库就是按照一定的规则和结构,把数据组织管理起来,方便高效地对数据进行增删改查的软件程序。
再用小学生都能听懂的话理解下(直接看AI的回答了,嘿嘿):

image-20241227165223844
几个关键字对应着理解下,就很清晰了:
基于这个理解,其实稍微有点编程基础的伙伴,就可以自己开发一个简单的数据库系统(和mysql、Oracle这种比较起来,只是实现的功能很简单,增删改查效率很低而已)。
方才就直接让AI,使用JavaScript实现了一个极简版的数据库;来动手感受下,其实数据库真没有很高大上。
下面的代码,就是包含了增删改查(CRUD)的基本功能的数据库:
class SimpleDB {
constructor() {
this.db = {};
}
// 增加记录
insert(table, record) {
if (!this.db[table]) {
this.db[table] = [];
}
this.db[table].push(record);
}
// 查询记录
find(table, query) {
return this.db[table].filter(record => {
for (let key in query) {
if (record[key] !== query[key]) {
return false;
}
}
return true;
});
}
// 更新记录
update(table, query, updateData) {
const records = this.find(table, query);
records.forEach(record => {
for (let key in updateData) {
record[key] = updateData[key];
}
});
}
// 删除记录
remove(table, query) {
this.db[table] = this.db[table].filter(record => {
for (let key in query) {
if (record[key] === query[key]) {
return false;
}
}
return true;
});
}
}
// 使用示例
const db = new SimpleDB();
// 插入数据
db.insert('users', { id: 1, name: '方才', age: 25 });
db.insert('users', { id: 2, name: '方才呀', age: 30 });
// 查询数据
console.log(db.find('users', { name: '方才' })); // 查找名为【方才】的用户
// 更新数据
db.update('users', { id: 1 }, { age: 26 }); // 更新ID为1的用户的年龄
// 删除数据
db.remove('users', { id: 2 }); // 删除ID为2的用户
// 查看更新后的数据
console.log(db.db);
这个一个简单的数据库就实现了,提供基本的CRUD操作:
insert(table, record):向指定的表中插入一条记录。find(table, query):根据查询条件在指定的表中查找记录。update(table, query, updateData):根据查询条件更新指定表中的记录。remove(table, query):根据查询条件删除指定表中的记录。运行的效果:
[ { id: 1, name: '方才', age: 25 } ]
{ users: [ { id: 1, name: '方才', age: 26 } ] }
是不是很简单,哈哈。
其实MySQL数据库也是类似是的,只是底层管理数据的数据结构更加复杂,数据文件间的组织更加复杂,实现了一套标准的增删改查语法糖而已。
回到开头的题目,方才会这样去回答:什么是数据库?
数据库就是按照一定的规则和结构,把数据组织管理起来,方便高效地对数据文件进行增删改查的软件程序。
不同类型的数据库系统,只是数据组织的规则和结构不同,以及提供的增删改查交互不同而已,比如说关系型数据库 Mysql 以逻辑概念 库、表、字段对数据进行管理,非关系型数据库 Redis 以key-value的形式对数据进行管理。
(ps:如果你了解更底层的内容,还可以去引导下面试官后续的发问)在深入点,比如说在MySQL底层,使用Innodb引擎,将表数据索引构建为B+树,以提高对数据的增删改查操作的效率;记录 redo log 实现了事务的持久性, undo log 实现了事务的原子性和一致性,通过MVCC+锁机制,实现了事务的隔离性。本质都是对数据的管理。
不知道今天的分享是否对你有所帮助,记得评论中告诉方才哟。
后续方才,也会持续输出完整的MySQL系列+面试内容,期望能帮大家建立一个完整的知识体系。
