MySQL的知识回顾
经过一段时间的NodeJs开发经历,选用的数据库是MySQL,一开始以为自己对数据库的基础知识掌握还ok,因为毕竟自己以前用过Apache+PHP+MySQL做数据库课程设计,但是在开发过程中才知道在这方面的基础非常不扎实,下面把项目中用到的MySQL数据库知识作个总结:
首先在Node环境下开发,一开始是选择mysql模块(https://github.com/mysqljs/mysql),后来该用了easymysql模块,原因可以看Node中使用mysql模块遇到的问题,先小总结下数据库的基础内容吧~
- 在一个数据量很大的表中查询字段或者与一个数据量很大的表建立连接查询时,记得要建立索引
索引,是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
因为笔者之前没有接触过庞大数据库,所以为索引这个概念不是特别有印象,做项目的时候就是因为没有建立索引使用查询sql非常费劲,基本上整个页面都卡住动弹不得,例如,笔者现在这个数据表里面有148893条记录,每条记录有20个字段左右,整个表的大小现在达到了42MB左右,囧,从来没有存过这么大的数据量,但是一个公司的业务数据还远远不止这样。。。。
如果没有查询字段建立索引,页面就如下
但是呢,如果你有对查询字段建立索引,查询基本上都是秒出的,建立索引很简单,如下一点就OK了

- 连接两个表进行更新字段,在MySQL中可以用INNER JOIN...ON....的sql语句
例如:
UPDATE `tableA` a INNER JOIN `tableB` b ON a.`id` = b.`uid` SET a.`order_pay` = b.`order_price` - 将一个数据表复制到另外一个数据表,可以用INSERT INTO的语句
(1)部分字段:
INSERT INTO `tableA`(`字段1`,`字段2`......)
(select `字段1`,`字段2`......
from `tableB`)
(2)全部字段:
INSERT INTO `tableA`
(select *
from `tableB`) - 在MySQL中建立临时表temporaryTable可以用下面sql语句
CREATE TABLE temporaryTable(
SELECT DISTINCT `id`,`sex`
FROM table
); - 关于时间计算,当前日期前一天和后一天,这个在业务需求中也需要用到
(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) - 判断table表是否存在
SELECT table_name
FROM information_schema.TABLES
WHERE table_name = 'table' - INSERT INTO的用法相信大家都熟悉,但是如果在插入记录过程中有时会因为主键原因而导致查询出错,这个时候可以用INSERT IGNORE INTO语句,加入IGNORE关键字后,当遇到primary duplicate的错误会直接跳过,这样保证了新增的并且没有和主键重复的记录能够顺利插入数据表。
例如,假设在数据表tableA中字段1是主键
INSERT IGNORE INTO `tableA` ( `字段1` , `字段2`。。。 )
SELECT `字段1` , `字段2`。。。
FROM `tableB` - 最后一点想要分享的是在业务需求中用到过的唯一约束,也是在设计数据表结构中很关键的一步
例如,两个字段组合性质的唯一约束
create table table1 (
field1 int,
field2 int,
unique key (field1,field2)
);
以上便是我在项目实战中总结出来的MySQL知识,都是非常基础的知识,但是我相信只有把基础知识都打扎实后,以后才能走得更远。
附一位技术大牛跟我说过的一句话,日后想成为一名独当一面的程序员,要培养兴趣,不怕坑,直面困难。
MySQL的知识回顾的更多相关文章
- Docker 核心知识回顾
Docker 核心知识回顾 最近公司为了提高项目治理能力.提升开发效率,将之前的CICD项目扩展成devops进行项目管理.开发人员需要对自己的负责的项目进行流水线的部署,包括写Dockerfile ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [C#] C# 知识回顾 - 学会处理异常
学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- [C#] C# 知识回顾 - 异常介绍
异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- [.NET] C# 知识回顾 - 事件入门
C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
随机推荐
- JsonToHtml
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ELK 实用架构
- Qt 学习之路 2(73):Qt 线程相关类
Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类 豆子 2013年11月26日 Qt 学习之路 2 7条评论 希 ...
- Qt 学习之路 2(47):视图选择
Qt 学习之路 2(47):视图选择 豆子 2013年3月28日 Qt 学习之路 2 34条评论 选择是视图中常用的一个操作.在列表.树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反 ...
- Navicat 连接Sqlite数据库的方法和步骤
1.打开Navicat,进行如下操作. 2.在弹出的新建连接对话框中输入正确的信息,点击“确定”按钮. 3.可见如下
- LCT小小结
模板题P3690 基础题P3203[HNOI2010]弹飞绵羊 \(access\)是搞出一条端点为\(x,y\)的路径 , 且维护的是实子树的信息 . 由于题目比较简单 , \(access\)时还 ...
- RabbitMQ 在Linux环境中的默认位置
参考:https://www.rabbitmq.com/relocate.html
- JavaScript 调用 Windows 的打印 代码
JavaScript 调用 Windows 的打印 代码 2009-02-24 10:36 <%@ Page Language="C#" AutoEventWireup=&q ...
- HDU - 6186 前缀和位运算
异或操作蒙蔽了我的双眼 以至于没有第一时间想到前缀和与后缀和 水题做的不够多 #include<bits/stdc++.h> #define rep(i,j,k) for(register ...
- HDU - 5067 / HDU - 5418 TSP
集合表示多用[0,n)表示方法 HDU - 5067 经典TSP,每个顶点恰经过一次最优 #include<bits/stdc++.h> #define rep(i,j,k) for(in ...