经过一段时间的NodeJs开发经历,选用的数据库是MySQL,一开始以为自己对数据库的基础知识掌握还ok,因为毕竟自己以前用过Apache+PHP+MySQL做数据库课程设计,但是在开发过程中才知道在这方面的基础非常不扎实,下面把项目中用到的MySQL数据库知识作个总结:

  首先在Node环境下开发,一开始是选择mysql模块(https://github.com/mysqljs/mysql),后来该用了easymysql模块,原因可以看Node中使用mysql模块遇到的问题,先小总结下数据库的基础内容吧~

  1. 在一个数据量很大的表中查询字段或者与一个数据量很大的表建立连接查询时,记得要建立索引
    索引,是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
    因为笔者之前没有接触过庞大数据库,所以为索引这个概念不是特别有印象,做项目的时候就是因为没有建立索引使用查询sql非常费劲,基本上整个页面都卡住动弹不得,例如,笔者现在这个数据表里面有148893条记录,每条记录有20个字段左右,整个表的大小现在达到了42MB左右,囧,从来没有存过这么大的数据量,但是一个公司的业务数据还远远不止这样。。。。
    如果没有查询字段建立索引,页面就如下

    但是呢,如果你有对查询字段建立索引,查询基本上都是秒出的,建立索引很简单,如下一点就OK了

  2. 连接两个表进行更新字段,在MySQL中可以用INNER JOIN...ON....的sql语句
    例如: 
      UPDATE `tableA` a INNER JOIN `tableB` b ON a.`id` = b.`uid` SET a.`order_pay` = b.`order_price`
  3. 将一个数据表复制到另外一个数据表,可以用INSERT INTO的语句
    (1)部分字段:
    INSERT INTO `tableA`(`字段1`,`字段2`......)
    (select `字段1`,`字段2`......
    from `tableB`)
    (2)全部字段:
    INSERT INTO `tableA`
    (select *
    from `tableB`)
  4. 在MySQL中建立临时表temporaryTable可以用下面sql语句
    CREATE TABLE temporaryTable(
    SELECT DISTINCT  `id`,`sex` 
    FROM table
    );
  5. 关于时间计算,当前日期前一天和后一天,这个在业务需求中也需要用到
    (1)后一天
    SELECT DATE_ADD('1997-12-31 23:59:59',INTERVAL 1 DAY)
    (2)前一天
    SELECT DATE_ADD('1997-12-31 23:59:59',INTERVAL -1 DAY)
  6. 判断table表是否存在
    SELECT table_name
    FROM information_schema.TABLES
    WHERE table_name =  'table'
  7. INSERT INTO的用法相信大家都熟悉,但是如果在插入记录过程中有时会因为主键原因而导致查询出错,这个时候可以用INSERT IGNORE INTO语句,加入IGNORE关键字后,当遇到primary duplicate的错误会直接跳过,这样保证了新增的并且没有和主键重复的记录能够顺利插入数据表。
    例如,假设在数据表tableA中字段1是主键
    INSERT IGNORE INTO  `tableA` (  `字段1` ,  `字段2`。。。 )
    SELECT  `字段1` ,  `字段2`。。。
    FROM  `tableB`
  8. 最后一点想要分享的是在业务需求中用到过的唯一约束,也是在设计数据表结构中很关键的一步
    例如,两个字段组合性质的唯一约束
     create table table1 (
        field1 int,
        field2 int,
        unique key (field1,field2)
      );

  以上便是我在项目实战中总结出来的MySQL知识,都是非常基础的知识,但是我相信只有把基础知识都打扎实后,以后才能走得更远。

附一位技术大牛跟我说过的一句话,日后想成为一名独当一面的程序员,要培养兴趣,不怕坑,直面困难。

MySQL的知识回顾的更多相关文章

  1. Docker 核心知识回顾

    Docker 核心知识回顾 最近公司为了提高项目治理能力.提升开发效率,将之前的CICD项目扩展成devops进行项目管理.开发人员需要对自己的负责的项目进行流水线的部署,包括写Dockerfile ...

  2. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  3. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  4. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  5. [C#] C# 知识回顾 - 异常介绍

    异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...

  6. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  7. [.NET] C# 知识回顾 - 事件入门

    C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...

  8. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  9. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

随机推荐

  1. iis 重启命令

    打开IIS配置窗口的CMD命令:开始---运行---CMD----输入inetmgr  直接使用CMD我们可以操作很多事情,比如启动IIS,重启IIS,停止IIS 重启IIS服务器,开始->运行 ...

  2. selenium滑动验证码操作

    1.首先要找到你要滑动的地方 2.调动鼠标事件按住不动 3.调整坐标即可 我这里是为了调试加了很多的sleep,print(hander)是为了看是否定位到了元素 4.效果如下图,但是我这里的验证文字 ...

  3. Win通过端口号结束进程

    准备: 01在cmd中查看命令使用 格式:命令名称 /? 02netstat 03findstr C:\Users\Good>findstr /? 在文件中寻找字符串. ...... strin ...

  4. ML理论知识博文列表

    一文弄懂神经网络中的反向传播法——BackPropagation:http://www.cnblogs.com/charlotte77/p/5629865.html 人脸识别图库:http://vis ...

  5. js 冒泡事件与解决冒泡事件

    事件冒泡 :当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window . html代码: <div id="div1"> <div id= ...

  6. 多线程 GCD 的使用

    参考:http://www.jianshu.com/p/2d57c72016c6 GCD 的两个核心概念: 队列 与 任务 一.队列 队列分为串行队列和并发队列, 队列的作用是管理开发者提交的任务,在 ...

  7. scrapy 请求和响应

    scrapy Request类的一些参数意义 url: 就是需要请求,并进行下一步处理的url callback: 指定该请求返回的Response,由那个函数来处理. method: 一般不需要指定 ...

  8. SQL Server2012如何更改服务器的名称

    Problem: sql server 2012 安装完毕后,连接数据库只能使用 机器名\数据库实例 的方式,想用 localhost 或 . 作为服务器名称不可以 Solution: 参考:http ...

  9. Tensorflow基础-mnist数据集

    MNIST数据集,每张图片包含28*28个像素,把一个数组展开成向量,长度为28*28=784,故数据集中mnist.train.images是一个形状为[60000,784]的张量,第一个维度数字用 ...

  10. bzoj3196 二逼平衡树 树状数组套线段树

    题目传送门 思路:树状数组套线段树模板题. 什么是树状数组套线段树,普通的树状数组每个点都是一个权值,而这里的树状数组每个点都是一颗权值线段树,我们用前缀差分的方法求得每个区间的各种信息, 其实关键就 ...