程序员学数据库那些事儿

2023-11-08

最近有人问(是问,不是请教)我数据库怎么学?要学哪些?以下我谈一些个人想法。

其实我的数据库知识不是很扎实,真心的。

当年我学这个东西时某个大神告诉我“学会sql server”走遍天下都不怕。事实上,这几年如果只会sqlserver根本到哪都很惊悚。

原因?

1、如果是政府软件,虽然不像互联网那样高,但是数据存储量确实很大很大,大家想想譬如财政数据、公积金数据、民政局数据等,而且很多数据不能使用缓存,必须实时计算,当sql2008还没出现时,确实在大数据计算性能上不如oracle(同时期版本)

2、由于某些原因(你懂的),政府很少会同意使用windows服务器平台,大都会使用unix或linux平台,这就决定了sqlserver或者.net应用很难卖出去(当然不是完全不行,有些局部部门的软件还是可以的,机密数据那想都不要想)

3、对于企业项目,很多中小企业为了节约成本又想有节操的不使用盗版,那么mysql是他们最好的选择。

4、对于自己做网站,前期如果不想花大成本购买独立服务器的话,使用mysql是正道,便宜而且好用,最重要的是前期也没有这么多数据和人气让我们需要上高级数据库。

其实我个人认为,至少掌握1-2个数据库是很有必要的,譬如mysql和oracle,至于sqlserver不是它简单,而是微软的大部分东西(没说全部)在用户体验和易学性上确实做得更甚一筹(易学性既是优点也是缺点,缺点在于出了问题你很难找到根本原因)

以下有几个建议关于怎么玩数据库。

换个方法学习

一、 不建议按部就班的学习,因为你这么学,别人也是这么学,而每个人的理解能力、技术基础、记忆力、周边环境和自己肚皮饱饿程度都是不同的,这些要素直接影响你的学习速度。

如果大家都在同一起跑线上,使用相同的学习办法是不可取的

二、自己逼自己

模拟项目学习是我个人认为最好的办法。

首先需要了解基本的语法,譬如select insert update 等等(还有一些,这里不一一列出)

譬如我们新建一个新闻表叫做 news ,里面包含 id,title,content(text型),addtime,clickcount 5个字段。

然后手工insert into 这张表50万条高仿真数据,注意是50万或更多且新闻内容字段数据必须要大(如"111,aaa,大大大" 这样的测试数据不如赶紧洗洗睡)。

然后做一个页面,展示某一条新闻的详细,右边边栏展示(1、相关新闻 2、人气排行 3、两天内发布的新闻 等各10条)

(1) 这时你会发现,取数据还真不能简单的 select * from 表 where id=X,你会需要学习如何创建字段索引、如何需要在该表中加入冗余字段,你还会发现当新闻表特别大的时候,用户每点击一次新闻此时如果update这张表的clickcount时页面很慢,你的笔记本风扇很烫。

(2) 如果再复杂点需求,你会发现用视图比较好,或者用存储过程来更新一些数据效率更高,然后你会发现新增新闻时还要使用事务才行。于是逼着你去学这些知识。

(3) 再进一步,你会发现自己做的新闻页面好丑好丑,于是逼着你去学css和html 和jquery

(4) 然后你把表中的数据扩展到2000万以上,你会发现某些功能还真不是一张表可以搞定的。貌似还得了解数据库的分区甚至分表更甚的是你会发现还得用到分布式部署。 你还会学会用数据库sql查询分析器来分析哪条sql语句占了很大性能。甚至不同的sql语句有的比较耗内存,而有的sql语句让你的cpu涨到了100%。

于是,我个人认为你本来学1个月然后做测试项目,共需2个月左右才能基本掌握一个数据库知识,如果用同步边学边自虐的方式很可能时间要节约20%-30%以上,并且让你掌握的更扎实。

这就是为什么有的计算机系大学毕业的学生不如其他专业转行的学生。

总结:

当然,技术(这里主要指开发相关)做到高级境界 其实是数学知识和自然社会知识的碰撞,和编程语言也就关系不大了。但是数据库知识是必须掌握的,不管你做什么样的应用,只要你需要存储数据那么必须了解数据库。

如果你想作为业余爱好更深入的了解数据库,那么你可以从数据结构学起,深入了解数据库是怎么运作的,当然mysql都是开源的,学学思想很不错,当然我从没看过(因为看不懂以及没有经济实力去研究)。

如果在你还没有成为大神时就想自己开发一个关系型数据库,那可能不太现实。在我国玩这种事情的前提是必须要有钱,然后才能谈技术、谈团队、谈产品,否则你会深陷泥塘不可自拔。

还有一句话,好的并且是赚钱的程序员大部分都是在特定时事背景中逼出来的,在这个范围内没有天才。


以上为个人观点,见仁见智。并非在任何场合都是正确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员学数据库那些事儿 的相关文章

随机推荐

  • CentOS系统安装libssl-dev时No package libssl-dev availab

    libssl dev是ubuntu系统的库 而centos系统对应的是openssl devel centos中运行yum install openssl devel ubuntu系统运行apt get install libssl dev
  • 7.2 IDEA 没有Java EE

    方法二 第一步 正常创建一个新的New Project 创建完成后 选择项目包 gt 点击右键 gt 点击Add Framework Support 然后勾选Web Application 4 之后点击OK确认即可 完美的创建了JavaEE
  • C#断点续传的实现示例

    断点续传是一种可以在文件传输过程中出现断电 网络故障等情况时 能够保证传输内容不会全部丢失 而是可以从已传输的位置继续传输的机制 在文件传输较大 较复杂的情况下 使用断点续传可以提高传输质量 稳定性和效率 在C 中 可以使用HTTP协议的R
  • 蓝桥杯2021年第十二届真题第二场-国际象棋

    题目 题目描述 众所周知 八皇后 问题是求解在国际象棋棋盘上摆放 8 8 8 个皇后 使得两两之间互不攻击的方案数 已经学习了很多算法的小蓝觉得 八皇后 问题太简单了 意犹未尽 作为一个国际象棋迷 他想研究在 N M
  • DCGAN生成动漫头像(附代码)

    DCGAN 顾名思义 就是深度卷积生成对抗神经网络 也就是引入了卷积的 但是它用的是反卷积 就是卷积的反操作 我们看看DCGAN的图 生成器开始输入的是噪声数据 然后经过一个全连接层 再把全连接层的输出reshape 然后经过反卷积 判别器
  • 链表-单向链表、双向链表、链表反转、删除链表指定指定值

    目录 单向链表 双向链表 链表反转 删除链表中指定的所有值 单向链表 package basic linkedList public class SingleNode public SingleNode next public int va
  • 关于idea导入gradle工程,出现sync failed的问题

    在 精通Spring MVC4 这本书中 作者通篇采用gradle来作为项目构建工具 当我们下载下来随书源码后 想导入到idea中 发现idea控制台正在syncing 在第三步configure时一直出错 有时候依赖下载不下来 你到mav
  • c编译时的错误:程序中有游离的‘\240’‘\302’‘\XXX 时解决方案

    偶尔从网上看到不错的源码 想研究下 不幸编译时遇到 错误 程序中有游离的 240 302 之类的错误 大量的源码不可能再全部重敲一遍 经过一番研究 终于让我找到简单的解决方案 还是本着让后人少走弯路的想法 分享下 首先 编译器提示的 xxx
  • 西门子S7协议格式解析

    文章目录 简介
  • 基于FPGA的超声波测距

    文章目录 一 项目框架 二 超声波测距模块 三 串口模块 1 串口发送模块 2 串口发送控制模块 四 蜂鸣器模块 五 vga显示模块 1 vga协议驱动代码 2 vga数据控制模块 六 数码管 1 数码管段选控制 2 数码管位选 七 顶层文
  • Vue与ElementUI的v-loading控件

    Vue与Element的v loading控件 在需要添加loading动画的组件中加入v loading xxx xxx为true时表示加载 false时关闭加载 默认样式如下 如果要修改样式或者添加文字 则使用element loadi
  • qt调用图片并自适应界面大小显示

    一 前言 记录qt使用图片打开 查看和关闭等操作 实现点击按键 打开选择的指定位置图片 有缩放显示 并可以点击放大按键放大图片 放大后图片自适应电脑窗口大小 大于窗口尺寸会根据最大宽和高缩放 小于窗口尺寸就按原比例居中显示出来 二 环境 w
  • chromedriver不在路径的解决办法

    from selenium import webdriver driver webdriver Chrome 错误信息 WebDriverException Message chromedriver executable needs to
  • BUUCTF-Secret File

    Secret 意为秘密 可知我们需要在网页中寻找到隐藏的flag文件 启动环境打开靶机 直接查看源码 发现一个文件 打开后点击 secret 但是会直接跳转到 end php 并且提示查阅结束 说明页面跳转过快 需要手动抓放包来查看 经过拦
  • 微信 Android 模块化架构重构实践(上)

    转自 https cloud tencent com developer article 1005631 作者 carlguo 微信Android架构历史 微信Android诞生之初 用的是常见的分层结构设计 这种架构简单 清晰并一直沿袭至
  • 解决mysql链接时报错Authentication plugin ‘caching_sha2_password‘ cannot be loaded的问题

    1 打开命令提示符 2 输入 cd C Program Files MySQL MySQL Server 8 0 bin 3 进入到C Program Files MySQL MySQL Server 8 0 bin gt 目录之后 键入
  • NLP学习(二)中文分词技术

    运行平台 Windows Python版本 Python3 x IDE PyCharm 一 前言 这篇内容主要是讲解的中文分词 词是一个完整语义的最小单位 分词技术是词性标注 命名实体识别 关键词提取等技术的基础 本篇博文会主要介绍基于规则
  • Windows中账户没有登录的情况下程序开机自启动

    windows打开任务计划程序 开始菜单 所有程序 管理工具 任务计划程序 打开后点击右边创建任务 在常规界面填写启动名称描述等信息 安全选项勾选不管用户是否登录都要运行 我这里为了保险起见还勾选了使用最高权限 在触发器界面选择新建 开始任
  • c++运算符

    运算符 作用 用于执行代码的运算 1 算术运算符 下表显示了 C 支持的算术运算符 假设变量 A 的值为 10 变量 B 的值为 20 则 运算符 描述 实例 把两个操作数相加 A B 将得到 30 从第一个操作数中减去第二个操作数 A B
  • 程序员学数据库那些事儿

    最近有人问 是问 不是请教 我数据库怎么学 要学哪些 以下我谈一些个人想法 其实我的数据库知识不是很扎实 真心的 当年我学这个东西时某个大神告诉我 学会sql server 走遍天下都不怕 事实上 这几年如果只会sqlserver根本到哪都