合上《SQL Server2000数据库基础与应用》的时候,外头早就黑透了。说实话,刚把这书拎回家,我脑子就嗡嗡的。都什么年代了,谁还专门去淘二十年前的老教材?砖头那么厚,纸边卷得跟咸菜似的。目录一打开,好家伙,清一色“Transact-SQL”“游标”“锁机制”。光看字就犯头疼。我本以为得硬啃一堆天书似的代码,结果翻着翻着……哎,居然在“学生成绩管理系统”那几页例子里,品出点别的东西。不是代码。是人。

往后翻,大段大段都在讲“事务与锁”。作者不整虚的,上来就甩概念:原子性。说白了就俩字,成或者败。别想卡在半道儿上装死。翻到“提交事务”和“回滚事务”那章,我手指头在书脊上蹭了半天。数据库多干脆啊,一旦报错,系统“咔哒”一下,数据直接扒回初始状态,不拖泥带水。咱们人呢?多少事儿一拍大腿就干了,回头一看走偏了,想回滚?连当初的草稿纸都找不着了。可你想想,数据库这种死磕到底的较真,是不是正好治咱们这种容易上头的毛病?它明明白白把退路铺好了。平时咱用不上,但心里知道有这么个机制兜着,夜里睡觉都踏实。

再往后是“数据完整性”。主键、外键、非空、默认值。作者列得清清楚楚。意思就一个:录入的时候把规矩钉死,后头能少擦多少回屁股?我盯着那一页,脑子里全是自己以前干过的蠢事。那时候总爱闷头往前冲,撞了南墙才想起来回头收拾烂摊子。拿日子当没加约束的表,结果数据撒了一地,查着累,养着更累。后来才慢慢咂摸过味儿来。长大这回事,其实就是给自己硬套上几条“外键约束”。知道哪条线不能踩,明白哪些关系得一对一死磕,哪些能一对多糊弄过去。规矩真不是捆人的绳子。它是防你生活散架的网。人嘛,总得折腾到一定岁数才信这个邪。没约束的自由?多半是一地鸡毛。

书的后半截,直接进“应用项目开发实例”。散落的表、视图、存储过程,跟拼积木似的,咔哒咔哒咬上。最后真能把一个成绩管理系统跑通,我心里那块石头才算落地。你说数据库是冷冰冰的死物?扯淡。它分明是记忆的骨架子。每一行数据底下,压着的都是活生生的人和事儿。作者拿“学生成绩”当核心例子,估计心里跟明镜似的,知道这玩意儿里塞了多少人的焦虑、盼头,还有那点见不得人的小得意。我好像又瞅见当年为了期末考熬红眼的自己,还有现在还在为各种指标赶路的咱们。数据不骗人。它就在那儿,死记着。咱们呢?总得在乱糟糟的数据流里,摸出条属于自己的查询语句。查不到结果又怎样?至少,过程是实打实跑过的。

不过得认,这书也有掉队的时候。SQL Server 2000,老古董了。现在满大街跑的,清一色云原生、分布式架构。书里那种单表查询、本地锁定的笨路子,放今天确实显得有点土。可你转个弯想想,技术翻篇翻得再快,底下的底子变过吗?系统怎么折腾,核心不还是那三件事:安全地存,利索地查,靠谱地改。人折腾到多大岁数,面对世界的招数,剥开来看,不也就那几个词?记下来,连上线,做取舍,扛责任。技术圈天天吹新架构多牛,底层逻辑这东西,说白了就是几十年前的老调重弹。换汤不换药,只是换了身更时髦的皮。

屏幕暗下去。键盘缝里的灰,在月光底下慢慢打转。脑子里又飘出书里那句平平淡淡的话:“事务必须保持一致性。”日子嘛,大抵也这么回事。不用死磕每一步都得完美运行。只要心里那套底层逻辑没散架,偶尔抛出个异常,也能一点点调回来。至于那些没来得及提交的操作,就让它悬着吧。有些过程,本身比结果耐琢磨。