mysql for update使用 *** (mysql 数据库使用分享(多图解析)
如何连接两个数据库mysql数据库共享(多图分析)
1、大体流程
1.1 一些概念
1.1.1 RDBMS
关系数据库是指使用关系模型组织数据的数据库,它以行和列的形式存储数据,类似于excel。1.1.2 OLAP 和 OLTP
OLTP(在线交易处理):在线/在线事务处理。它主要是添加、删除和检查数据库中的数据。在线分析处理是指在线分析处理。通过分析数据库中的数据,我们可以得到一些结论性的东西。
OLTP查询一般只涉及单个表,并且主要指点检查,返回记录本身或多列记录。
OLAP是不同的。查询本身并不关心表中的单个记录。
1.1.3 事务
多个操作进行,所以成功,所以失败。这就是生意。1.2 innodb 存储结构
InnoDB将数据分成几页,每页的默认大小为16KB。页面是磁盘和内存交互的基本单位。每个IO将至少16KB的内容读入内存。换句话说,IO的基本单位是页面。一页中可以存储多行记录。
页面可能没有物理连接,通过一个链表来关联。页面中的记录按主键大小排序,形成一个单向链表。
行-页-区域-段-表空间
盘区是文件系统中连续分配的空间,一个盘区等于64页,大小为6416K=1MB。
段不要求彼此相邻,不同类型的数据库对象存在于不同的段中。例如数据表段(叶节点)和索引段(非叶节点段)。
表空间本质上是一个用于存储各种页面的页面池。数据库由多个表空间组成,可分为系统表空间(只有一个,额外记录系统信息)、用户表空间、临时表空间等。
如果希望每个数据库表都有一个单独的表空间文件,可以通过参数innodb_file_per_table=ON来设置它。
1.3 物理文件
1.3.1日志文件
1.错误日志文件记录了MySQL异常,或者MySQL链接错误。2.binarg日志用于数据恢复和数据库的主从配置。
3.事务日志(rado undo log):一个事务的打开会存储在rado log和undo log中,稍后会刷到磁盘。
4.慢速查询日志可以用来查询项目中哪些sql语句查询起来比较慢。
5.查询日志用于查询慢速语句日志。
1.3.2 数据库文件
1.frm文件(MySQL表的引擎属于MyISAM,存放的是创建表或者引擎其他操作的语句)。2.myd文件(MySQL表的引擎是MyISAM,存放引擎的所有数据)。
3.myi文件(MySQL表的引擎是MyISAM,存放引擎的所有索引)。
4.ibd和ibdata文件(MySQL表的引擎是innodb,存放引擎的索引和数据)。
注意每个存储引擎都有自己的文件夹来存储各种数据。这些存储引擎真正存储的是数据和索引等数据。
直观感受一下
1.4 mysql架构
连接层位于整个MySQL架构的顶端,主要起到客户端连接器的作用。连接池主要负责存储和管理客户端与数据库之间的连接信息,连接池中的一个线程负责管理客户端与数据库之间的连接信息。数据库服务层是整个数据库服务器的核心,主要包括系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存。系统文件层主要包括MySQL中存储数据的底层文件,与上层存储引擎交互,是文件的物理存储层。MySQL中的存储引擎层主要负责数据的读写以及与底层文件的交互。MySQL中的存储引擎是插件式的,服务器中的查询执行引擎通过相关接口与存储引擎进行通信。,接口屏蔽了不同存储引擎之间的差异。InnoDB和MyISAM是MySQL中最常用的存储引擎。2、sql语句
2.1 DDL 定义结构
三个关键字 create ,alter ,drop
010创建数据库创建数据库【如果不存在】mydb1删除数据库删除数据库[如果存在]mydb 1;2.1.1 数据库 database
创建表表名(字段1字段1类型[注释字段1注释],字段2字段2类型[注释字段2注释],字段3字段3类型[注释字段3注释],field n field n type[comment field n comment])[comment table comment];更改表表名添加字段名类型(长度)[co mment 字段注释] [约束]alter table 表名 drop 字段名truncate table 表名 #删除指定表,并重新创建该表drop table [if exists] 表名 #删除数据表2.1.3 索引 index?
1、index 普通索引(最基本的索引,没有任何限制)alter table table_name add index index_name(column)2、primary key 主键索引(是一种特殊的唯一索引,不允许有空值)alter table table_name add primary key(column)3、unique 唯一索引(与“普通索引”类似,不同的就是,索引列的值必须是唯一,但允许有空值)alter table table_name add unique(column)4、filltext 全文索引(仅可用于MyISAM表)alter table table_name add fulltext(column)5、组合索引(遵循“最左前缀”原则)alter table table_name add index index_name(column1,column2,column3)
2.1.4 视图 view:x:
视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。
CREATE VIEW lt视图名gt AS ltSELECT语句gtALTER VIEW lt视图名gt AS ltSELECT语句gtDROP VIEW lt视图名1gt [ , lt视图名2gt …]
一般不使用,不好管理
2.1.5 存储过程:x:
存储过就是数据库SQL与层层面的代码封装与重用
DROP PROCEDURE [ IF EXISTS ] lt过程名gt
不建议使用,不好管理sql
?tips可以使用工具生成的语句,然后操作。
2.2 DML 操作数据??
2.2.1 insert 添加数据
INSERT INTO `grade`(`gradeid`,`gradename`) VALUES(#3911114#39,#39大七#39)
2.2.2 update 修改数据
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition
2.2.3 delete 删除数据
DELETE FROM table_name WHERE condition
2.3 查询语句
执行顺序: from where 聚合 having order limit
1、from 先做表连接
2、where 进行条件限制
3、然后做聚合 group by
4、然后做 having 过滤
5、然后对结果进行排序
6、限制数量 limit
3、索引
3.1 索引类型
按数据结构分类B+tree索引、Hash索引、Full-text索引。按物理存储分类聚集索引、非聚集索引(也叫二级索引、辅助索引)。按字段特性分类主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。按字段个数分类单列索引、联合索引(也叫复合索引、组合索引)。3.2 索引的数据结构
页是mysql innodb存储的最基本结构,也是Innodb磁盘管理的最小单位。
mysql的文件系统在从硬盘加载数据的时候,会以页为单位进行加载,在内存中也是以页为单位进行调度。
在mysql中默认的page_size 是 16K
3.3 B+ 树的数据结构
B+ 树是mysql innodb 的索引数据结构,先看下数据的存储
解释下上面这张图
蓝色的表示数据指针,也就是索引列的值,
红色的表示数据页的地址。
可以看到上面这张图除叶子节点(粉色框的)外存储的数据都是索引列的值
所有的叶子节点做了一个指针指向。
3.4 mysql 什么情况下不适合建立索引
查询用不到的字段不需要创建索引。数据量小的表更好不要使用索引,如果表中记录太少,比如少于1000个,那么是不需要创建索引的。表记录太少,是否创建索引对查询效率的影响并不大。有大量重复数据的列上不要建立索引在条件表达式中经常用到的不同值较多的列上建立索引,但字段中如果有大量重复数据,也不用创建索引。比如在学生表中的性别字段上只有男和女两个不同的值,无须建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低数据更新速度。避免对经常更新的表创建过多的索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候会造成负担,从而影响效率。虽然提高了查询速度,却会降低更新 表的速度。不建议使用无序的值作为索引,例如身份证、uuid(在索引比较时需要转为ASCII,并且插入时可能会造成页分裂,这些了解即可)、md5、hash、无序字符串等。删除不再使用或者很少使用的索引,从而减少索引对更新操作的影响。3.5 索引失效的情况
更佳左前缀法则数据类型不匹配,导致索引失效不等于(!= 或者ltgt)导致索引失效like以通配符%开头索引失效联合查询时,字符集不匹配导致索引失效where中索引列使用了函数或者运算4、java python
4.1 spring-data-jpa mybatis-plus
4.2 pymysql sqlalchemy
5、经验分享
查询的生命周期客户端 -gt 服务器查询缓存 -gt 解析器 -gt 预处理器 -gt 查询优化器-gt 查询执行引擎 -gt 存储引擎 -gt 数据
尽量命中缓存,尽量少读数据,尽量少查数据。
小表驱动大表执行 from 后的表关联查询是从左往右执行的,之一张表会涉及到全表扫描,所以将小表放在前面,先扫小表,扫描快效率较高,在扫描后面的大表,或许只扫描大表的前100行就符合返回条件并return了。
删除大量数据时表先删除索引,后删除数据,再重建索引,使用truncate代替delete根据业务需要设计表,动静分离,减少冗余,可适当冗余进入docker容器进入容器docker exec -it 02d894edba22 bash连接数据库mysql -uroot -p123456选择数据库 show databases切换到具体数据库use ccp_device执行sqlselect from device_ limit 10
6、Navicat使用
6.1 建立连接
6.2 建库
6.3 建表
6.4 建立索引,删除表数据,增加表数据
原文链接https://blog.csdn.net/perfect2011/article/details/127051926?utm_source=tuicoolutm_medium=referral
mysql数据库知识点理解 mysql dateadd函数的使用