经过一段时间的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. sass的基本语法与使用

    一.简介 SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护.以上都是百度的,哈哈: 其实个人认为sass就是一套提高编写css效率的规则 ...

  2. linux防火墙(四)—— SNET和DNET原理及应用

    图(1) 一.SNAT策略 应用环境:局域网主机共享单个公网IP地址接入Internet,简单的说就是企业内部局域网想访问外部服务器时,网关型防火墙需要开启的SNAT应用策略. SNAT策略原理:网关 ...

  3. 【数据结构】单链表&&静态链表详解和代码实例

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存 ...

  4. 4.jQuery和DOM 对象之间的相互转换

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 吴裕雄 python 机器学习——密度聚类DBSCAN模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

  6. JavaScript的高级知识---词法分析

    JavaScript的高级知识---词法分析 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 函数在运行的瞬间, ...

  7. Mysql相关操作:

    允许root用户远程访问:https://www.cnblogs.com/davidgu/p/3706663.html; 用户的添加删除管理: https://www.cnblogs.com/hzd2 ...

  8. 报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出。网上查询了一些.NET 的C#例子,发现都实现的比较复杂

    报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出.网上查询了一些.NET 的C#例子,发现都实现的比较复杂,其实这个问题可以很简单的通过.NET的DateTime函数来实现 ...

  9. web 前端提交方式

    1.get提交    如: <a href="actions/Student_Add?name=a&age=8">路径问题说明add</a>< ...

  10. openstack、kvm、qemu-kvm、libvirt、xen的关系

    虚拟化技术—基础(1) 本文围绕下面3个问题进行对虚拟化技术展开讨论: 1.虚拟化技术实现方式有哪些?虚拟化技术分哪些? 2.请分别通过kvm.xen工具来实现虚拟化系统的部署? 3.请描述opens ...