经过一段时间的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. jwt-dotnet使用示例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. php 镜像richarvey/nginx-php-fpm的ngnix配置

    1.遇到错误option error_page 405 =200 $request_uri; location ~ ^/(json)/ { # root /data/website/xxxx.com/ ...

  3. 前端CSS的基本素养

    前端开发的三驾马车——html.css.js,先谈谈CSS CSS 前期:解决布局.特效.兼容问题 中级:网站风格的制定.色调.模块.布局方式.交互方式.逻辑设计等 高级:模块命名.类的命名.文件的组 ...

  4. Opencv博文收藏列表

    opencv识别二维码:https://blog.csdn.net/jia20003/article/details/77348170 opencv视频:http://www.opencv.org.c ...

  5. 使用带参数的SQL语句向数据库中插入空值

    private void button1_Click(object sender, EventArgs e) { string name = textBox1.Text; int age = Conv ...

  6. 配置YOLO2(ubuntu16.04+cuda8.0+opencv3.1.0)

    要求已经安装好了CUDA 8.0 以及OpenCV3.1.0 YOLO官方网站 配置darknet git clone https://github.com/pjreddie/darknet cd d ...

  7. PHP请求远程地址设置超时时间

    file_get_contents 请求超时设置 $timeout = array( 'http'=> array( 'timeout'=>5//设置一个超时时间,单位为秒 ) ); $c ...

  8. POJ - 1222 / POJ - 3279 枚举第一行

    说好的高斯消元法呢,暴搜都能0ms 这种翻转就是枚举第一行控制变量下面行就全都确定了 代码参考挑战程序设计例题 #include<iostream> #include<algorit ...

  9. SPOJ - AMR11

    A Thanks a lot for helping Harry Potter in finding the Sorcerer's Stone of Immortality in October. D ...

  10. html自定义垂直导航菜单

    html自定义垂直导航菜单(目前只支持上级+下级两级菜单) 由于工作的需要,昨天花了三个多小时的事件整理了一份关于垂直导航二级菜单,可以通过js配置的方式初始化菜单box(测试环境:chrome 49 ...