mysql执行原理

只要是B/S架构,都是会有客户端与服务端,mysql也不例外。

首先客户端发出一个请求,这个请求就是一个查询请求(Select),而它请求的对象就是服务端,服务端是怎么处理这项查询功能的呢?

首先可以把服务端想象成一个大的容器,里面有四层结构,当一个请求过来后,将会执行这四层,执行一遍后才会返回给我们想要的结果。

具体是:

首先客户端发出一个Select操作--->连接层接收后给服务层--->服务层对你的查询进行一个优化,并把优化结果给引擎层--->选择当前数据库的引擎,选完引擎后,引擎将最终的数据交给了存储层--->存储层,用存储层来存数据

# 查看Mysql所支持的所有引擎
show ENGINES

#查看当前数据库使用的引擎
show variables like '%storage_engine%';

参考:MySQL执行原理,逻辑分层、更改数据库处理引擎

mysql如何让自增id归0

  • 当你不再需要该表时, drop
  • 当你仍要保留该表,但要删除所有记录时, truncate
  • 当你要删除部分记录时(always with a WHERE clause), delete.

方法一: 如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数

truncate table 表名

方法二: 许多时候希望table中数据的id不要从1开始,像qq, id从10000开始
代码如下:

alter table 表名 AUTO_INCREMENT=10000;
而且该语句也适用于修改现有表的id上, 比如大批量删除数据后,想id从654321退回123456开始

alter table 表名 AUTO_INCREMENT=123456;

但是经过实际测试, 单机的Mysql没有问题, Mysql Cluster下是无效的,可能在主键上的机制,还是有所不同。

mysql数据表增加列

  因为Drop Table会把数据也删除掉,要增加数据列的时候,最好用Alter语句。如:

alter table OrderSearchSummary add IsMonthly int(11) not NULL DEFAULT 0;

alter table OrderSearchSummary add DistributorFirstName varchar(50);

Update

1、存在则更新,不存在则增加

  在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新,

在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新。

后来发现在mysql中有  ON DUPLICATE KEY UPDATE一步就可以完成。

该语句是基于唯一索引或主键使用,比如一个字段a被加上了unique index,并且表中已经存在了一条记录值为1:

下面两个语句会有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1; UPDATE table SET c=c+1 WHERE a=1;

ON DUPLICATE KEY UPDATE后面可以放多个字段,用英文逗号分割。

INSERT INTO FerDB.RedisConfig(`RedisKey`, `RedisValue`, `RedisDesc`, `CreateDataTime`, `ExpiredMinutes`, `IsEncrypt`, `IsAdmin`, `EnableEdit`)
VALUES ('urn: MinTimeDiff', '', '最低時間差(分鐘),默認120,參考範圍(30~600)', '2019-01-25 08:00:00', '', '', '', '')
ON DUPLICATE KEY UPDATE RedisValue='', RedisDesc='最低時間差(分鐘),默認120,參考範圍(30~600)', CreateDataTime='2019-01-25 08:00:00',
ExpiredMinutes='', IsEncrypt='', IsAdmin='', EnableEdit='';

2、互换表中两列数据方法

创建表及记录用于测试

CREATE TABLE `product` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '产品id',
`name` varchar(50) NOT NULL COMMENT '产品名称',
`original_price` decimal(5,2) unsigned NOT NULL COMMENT '原价',
`price` decimal(5,2) unsigned NOT NULL COMMENT '现价',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `product` (`id`, `name`, `original_price`, `price`) VALUES
(NULL, '雪糕', '', '3.5'),
(NULL, '鲜花', '', ''),
(NULL, '甜点', '', '12.5'),
(NULL, '玩具', '', ''),
(NULL, '钱包', '', '');

互换original_price与price的值

错误方法:

update product set original_price=price,price=original_price;

这样执行的结果只会使original_price与price的值都是price的值,因为update有顺序的,

先执行original_price=price , original_price的值已经更新为price, 然后执行price=original_price,这里相当于没有更新。

正确做法:

update product as a, product as b set a.original_price=b.price, a.price=b.original_price where a.id=b.id;

代码设置主键+自增长

当db中的主键名称不是id或者ID时,eg:MID,则代码中的实体需要显示添加 主键属性。如下:

 [Key] //主键
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增
public int MID { get; set; }

需要引入Microsoft.EntityFrameworkCore

【mysql】知识点的更多相关文章

  1. 1+x 证书 Web 前端开发 MySQL 知识点梳理

    官方QQ群 1+x 证书 Web 前端开发 MySQL 知识点梳理 http://blog.zh66.club/index.php/archives/199/

  2. MySQL知识点系统总结

    MySQL数据库是一个非常流行的关系型数据库.配合Linux.PHP.Apache,简称lamp,是一般个人企业网站的首选.MySQL用起来不难,要系统的用好,可不是一件简单的事.于是PHP程序员雷雪 ...

  3. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  4. 掌握这四大MySQL知识点,吊打面试官

    作为一名后端开发,MySQL的使用必不可少,合理的使用索引和索引调优是后端开发者必须掌握的技能之一. 在日常数据库的问题当中,不合理的使用索引占大部分. MySQL是大家工作上最常用的关系型数据库之一 ...

  5. MySQL 知识点

    文件格式: frm.MYI.MYD   分别是   MyISAM   表的表结构\索引\数据文件       一个库在一个目录下    不过在   MySQL   4.0   以上版本中,    你可 ...

  6. MYSQL知识点

    1.MYSQL为了可移植性,使用"--"做为注释,使用"/*!*/"表示可执行的注释.

  7. mysql知识点汇总

    1. 数据库的安装 2. 数据库设计需要注意什么 3. SQL语句优化 4. 怎样处理慢查询? 5. 怎样更好的利用数据库索引? 6. 事务隔离级别有哪些?怎么实现的? 7. 数据库锁有哪些? 8. ...

  8. mysql知识点拾遗梳理

    mysql卸载重装过程: sudo apache2ctl stop sudo apt-get --purge remove mysql-client mysql-server mysql-common ...

  9. Mysql知识点个人整理

    1.概念 数据库:保存有组织的数据的容器. 表: 某种特定类型数据的结构化清单 模式:关于数据库和表的布局和特性的信息?(有时指数据库) 主键: primary key 一个列或一组列,其值能唯一区分 ...

  10. mysql知识点总结

    一.mysql_connect(),在php7已移除,有mysqli_connect(),pdo,代替. <?php header("Content-type:text/html;ch ...

随机推荐

  1. 如何将 Redis 用于微服务通信的事件存储

    来源:Redislabs作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的.松耦合的.可协同工作的独立逻辑业务服务会更易于构建和维护.这 ...

  2. helm chart应用使用示例

    有两种方法 一是按照正常流程直接用yaml文件的形式发布应用到k8s集群上 二是把生成好的yaml文件发布到kubeapps应用商店,在应用商店中操作发布应用到k8s集群中 这里采用第二种方式的变种方 ...

  3. 【洛谷 P2051】 [AHOI2009]中国象棋(DP)

    题目链接 首先想到状压dp,但是\(n,m\)高达100,怎么压? 容易发现,每行每列最多两个象棋,否则就直接gg了. 一个巧妙的设置状态的方式是,只需要记录到当前行有多少列是放了1个炮和2个炮. 然 ...

  4. Elasticsearch 及 Kibana 安装篇

    简介 官网-安装介绍 这里记载了各个软件包的安装方法,Linux Mac Windows-- 本文记载的是在 CentOS 系统安装 Elasticsearch 7.0.0 版本的步骤. 安装 Jav ...

  5. Jenkins的语法之pipeline

    如果不处理,pipeline:stages中任一stage失败,都会致使其以下stage都失败,那么处理方式为: 1.stage在可能出错的地方添加try catch语句 如:try{} catch( ...

  6. Fortify漏洞之Insecure Randomness(不安全随机数)

    继续对Fortify的漏洞进行总结,本篇主要针对  Insecure Randomness  漏洞进行总结,如下: 1.Insecure Randomness(不安全随机数) 1.1.产生原因: 成弱 ...

  7. 设置redis开机自动启动

    注意:win7执行命令前面可不需要加路径,win10必须要加路径 命令: redis-server --service-install redis.windows.conf 执行完成之后,打开服务管理 ...

  8. golang基础归纳

    1. hello-world package main import "fmt" func main(){ fmt.Println("Hello world, Go Go ...

  9. sqoop 导入增量数据到hive

    版本 hive:apache-hive-2.1.0 sqoop:sqoop-1.4.6 hadoop:hadoop-2.7.3 导入方式 1.append方式 2.lastmodified方式,必须要 ...

  10. python算法与数据结构-插入排序算法(34)

    一.插入排序的介绍 插入排序的工作方式非常像人们排序一手扑克牌一样.开始时,我们的左手为空并且桌子上的牌面朝下.然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置.为了找到一张牌的正确位置,我 ...