MySQL学习
文章平均质量分 88
MySQL学习
A_Tai2333333
这个作者很懒,什么都没留下…
展开
-
MySQL学习Day32——数据库备份与恢复
在任何数据库环境中,总会有不确定的意外情况发生,比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的,这些情况可能会导致数据的丢失、 服务器瘫痪等严重的后果。为了有效防止数据丢失,并将损失降到最低,应定期对MySQL数据库服务器做备份。如果数据库中的数据丢失或者出现错误,可以使用备份的数据进行恢复,主从服务器之间的数据同步问题可以通过复制功能实现。逻备份恢复速度慢,但占用空间小,更灵活。逻辑备份就是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现。原创 2024-03-13 10:36:42 · 459 阅读 · 0 评论 -
MySQL学习Day31-主从复制
异步模式就是客户端提交COMMIT之后不需要等从库返回任何结果,而是直接将结果返回给客户端,这样做的好处是不会影响主库写的效率,但可能会存在主库宕机而Binlog还没有同步到从库的情况,也就是此时的主库和从库数据不一致。数据备份实际上是一种冗余的机制,通过这种冗余的方式可以换取数据库的高可用性,也就是当服务器出现故障或宕机的情况下可以切换到从服务器上,保证服务的正常运行。Slave重做中继日志中的事件,将改变应用到自己的数据库中。会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。原创 2024-03-13 10:14:06 · 951 阅读 · 0 评论 -
MySQL学习Day30—其他数据库日志
通用查询日志用来记录用户的所有操作,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给MySQL数据库服务器的所有SQL指令等。,如果MySQL数据库意外停止可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助;从服务器通过读取中继日志的内容,来同步主服务器上的操作。原创 2024-03-12 10:29:37 · 363 阅读 · 0 评论 -
MySQL学习Day29——多版本并发控制
如果某个版本的数据对当前事务不可见的话,那就顺着版本链找到下一个版本的数据,继续按照上边的步骤判断可见性,依此类推,直到版本链中的最后一个版本。如果被访问版本的trx_id属性值大于或等于ReadView中的low_limit_id 值,表明生成该版本的事务在当前事务生成ReadView后才开启,所以该版本不可以被当前事务访问。如果被访问版本的trx_id属性值小于ReadView中的 up_limit_id 值,表明生成该版本的事务在当前事务生成ReadView前已经提交,所以该版本可以被当前事务访问。原创 2024-03-11 14:00:45 · 341 阅读 · 0 评论 -
MySQL学习Day28——锁
所谓的锁其实是一个内存中的结构,在事务执行前本来是没有锁的,也就是说一开始是没有锁结构和记录进行关联的,当一个事务想对这条记录做改动时,首先会看看内存中是否有与这条记录关联的锁结构,没有就会在内存中生成一个锁结构与之关联。在普通的SELECT语句后边加FOR UPDATE,如果当前事务执行了该语句,那么它会为读取的记录加X锁,这样既不允许别的事务获取这些记录的S锁,也不允许获取这些记录的X锁,如果别的事务想要获取这些记录的S锁或者X锁,那么它们会阻塞直到当前事务提交之后将这些记录上的X锁释放掉。原创 2024-03-07 10:44:55 · 875 阅读 · 0 评论 -
MySQL学习Day27——MySQL事务日志
注意,redo log buffer刷盘到redo log file的过程并不是真正的刷到磁盘中去,只是刷入到文件系统缓存(page cache)中去,真正的写入会交给系统自己来决定,那么对于InnoDB来说就存在一个问题,如果交给系统来同步,同样如果系统宕机那么数据也丢失。其中REDO LOG称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性,redo log是存储引擎层生成的日志,记录的是物理级别上的页修改操作,主要为了保证数据的可靠性;保存在硬盘中,是持久性的。原创 2024-03-06 10:27:13 · 776 阅读 · 0 评论 -
MySQL学习Day26——事务基础知识
保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式,当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),这些修改永久的保存下来,要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。如果事务执行了一部分而变为失败的状态,那么就需要把已经修改的事务中的操作还原到事务执行前的状态。隔离性是指一个事务的执行不能被其他事务干扰,也就是一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。原创 2024-03-05 11:58:25 · 1074 阅读 · 0 评论 -
MySQL学习Day25——数据库其他调优策略
用于控制MySQL监听TCP牆口时设置的积压请求栈大小,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log将不被授予连接资源。足够大的内存是提高MySQL数据库的性能方法之一,内存的速度比磁盘IO快很多,可以通过增加系统的缓冲区容量使得数据在内存中停留的时间更长,以减少磁盘的IO。表示同时打开表的个数,table_cache值越大,能够同时打开的表的个数越多。原创 2024-03-04 22:26:27 · 883 阅读 · 0 评论 -
MySQL学习Day24—数据库的设计规范
数据库的范式设计越高阶,冗余度就越低,同时高阶的范式一定符合低阶范式的要求,满足最低要求的范式是第一范式,在第一范式的基础上进一步满足更多规范要求的称为第二范式,其余范式以此类推。如果数据库中的数据量比较大,系统的UV和PV访问频次比较高,则完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,在一定程度上会影响数据库的读性能。范式可能降低查询的效率,因为范式等级越高,设计出的数据表越多、越精细、数据冗余度就越低,进行数据查询的时候就可能需要关联多张表,也可能导致索引失效。原创 2024-03-01 11:24:56 · 917 阅读 · 0 评论 -
MySQL学习Day23——索引优化与查询优化
如果表的连接条件上只能有一个字段有索引,则有索引的字段所在的表会被作为被驱动表。对索引进行表达式计算、调用函数会导致索引失效,这是因为需要把索引的全部字段都取出来,让然后依次进行表达式或函数的计算来进行条件判断,因此采用的就是全表扫描的方式,运行时间也会慢得多。在WHERE子句中如果在OR前的条件列进行了索引而在OR后面的条件列没有进行索引,那么索引就会失效。在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为%,索引就不会起作用,只有%不在第一个位置索引才会起到作用。原创 2024-02-28 15:23:43 · 432 阅读 · 0 评论 -
MySQL学习Day22——性能分析工具的使用
如果查询扫描过的记录数大于等于这个变量的值,并且查询执行时间超过long_query_time的值,那么这个查询就被记录到慢查询日志中;反之,则不被记录到慢查询日志中。如果从磁盘中对单一页进行随机读,那么效率是很低的(差不多10ms),而采用顺序读取的方式,批量对页进行读取,平均一页的读取效率就会提升很多,甚至要快于单个页面在内存中的随机读取。如果页就在数据库缓冲池中,那么效率是最高的,否则还需要从内存或者磁盘中进行读取,当然针对单个页的读取来说,如果页存在于内存中,会比在磁盘中读取效率高很多。原创 2024-02-26 15:53:19 · 911 阅读 · 0 评论 -
MySQL学习Day21-索引的创建与设计原则
全文索引只能创建在 CHAR、VARCHAR或 TEXT 类型及其系列类型的字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询,但是只有查询条件中使用了这些字段中的第一个字段时才会被使用。使用UNIQUE参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引的值必须是惟一的,但允许有空值,在一张数据表中可以有多个唯一性索引。一种特殊的唯一性索引,在唯一索引的基础上增加了不为空的约束,一张表里最多只有一个主键索引。原创 2024-02-23 14:04:06 · 419 阅读 · 0 评论 -
MySQL学习Day19——索引的数据结构
索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教课书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据査找时,首先查看查询条件是否命中某条索引,符合则通过索引査找相关数据,如果不符合则需要全表扫描,即需要一条一条地查找记录,直到找到与条件符合的记录。(2)索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,存储在磁盘上如果有大量的索引,索引文件就可能比数据文件更快达到最大文件尺寸。原创 2024-02-20 11:53:57 · 440 阅读 · 0 评论 -
MySQL学习Day18——存储引擎
同时支持哈希索引和B+树索引,并且表的大小是受到限制的。Blockhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存,但是服务器会记录日志,可以用于赋值数据到备用的数据库,或者简单的记录到日志中。拥有很好的压缩机制,适合存储大量的独立的作为历史记录的数据,拥有很高的插入速度,但是对查询的支持较差。如果在创建表的语句中没有显式指定表的存储引擎的话,就会默认使用InnoDB作为表的存储引擎。存储引擎就是指表的类型,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。原创 2024-02-20 11:35:39 · 939 阅读 · 0 评论 -
MySQL学习Day18——逻辑架构
和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用,主要体现在存诸引擎的架构上, 插件式的存储引擎架构将査询处理和其它的系统任务以及数据的存储提取相分离。第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的査询,SQL的分析和优化及部分内置函数的执行。这个执行计划表明应该使用哪些索引进行査询(全表检索还是使用索引检索),表之间的连接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。原创 2024-02-19 17:54:11 · 1102 阅读 · 1 评论 -
MySQL学习Day17——用户与权限管理
每添加一个用户,CREATE USER语句会在MySQL.user表中添加一条新记录,但是新创建的账户没有任何权限。(2)使用DELETE方式删除:可以使用DELETE语句直接将用户的信息从mysql.user表中删除,但必须拥有对mysql.user表的DELETE权限。在MySQL数据库中,可以使用 DROP USER语句来删除普通用户,也可以直接在mysql.user表中删除用户。是超级管理员,拥有所有的权限,包括创建用户、删除用户和修改用户的密码等。MySQL的用户可以分为。原创 2024-02-16 13:32:59 · 437 阅读 · 0 评论 -
MySQL学习Day15——MySQL安装与使用
开源免费,用于架构集群服务器,可以将几个MySQL Server封装成为一个Server,需要在社区版或企业版的基础上使用。(2)安装前检查依赖:rpm -qa|grep libaio;提供了更多的功能和完善的技术支持,更适合于对数据库的功能和可靠性要求较高的客户。(1)检查/tmp临时目录权限:chmod -R 777 /tmp。开源免费,自由下载,但不提供官方支持,适用于大部分普通用户。(1)查找相关文件:find / -name mysql。(2)删除上述命令查找出的相关文件:rm -rf xxx。原创 2024-02-15 18:40:16 · 412 阅读 · 0 评论 -
MySQL学习Day14
两次扫描算法:MySQL4.1之前,使用该方式排序,首先根据条件取出排序字段和行指针信息,然后在排序区sort buffer中排序,如果sort buffer不够,则在临时表temporary table中存储排序结果,完成排序之后,再根据行指针回表读取记录。(1)主键顺序插入:因为InnoDB类型的表是按照主键的顺序保存的,所以导入的数据按照主键的顺序排列,可以有效地提高导入数据的效率。执行sql语句,返回值就是SQL语句在执行过程中影响的行数:cursor.execute("sql");原创 2023-10-16 10:57:15 · 29 阅读 · 1 评论 -
MySQL学习Day13——日志
STATEMENT:该日志格式在日志文件中记录的都是SQL语句(statement),每一条对数据进行修改的SQL都会记录在日志文件中,通过MySQL提供的mysqlbinlog工具可以清晰的查看到每条语句的文本。在应用的开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统性能的瓶颈,需要对其进行优化。原创 2023-10-15 00:01:29 · 42 阅读 · 1 评论 -
MySQL学习Day12——存储引擎和事务
Memory:所有数据置于内存的存储引擎,拥有极高的插入、更新和查询效率,但是会占用和数据量成正比的内存空间,并且其内容会在MySQL重新启动时丢失。Archive:非常适合存储大量独立的,作为历史记录的数据,拥有高效的插入速度,但是对查询的支持相对较差。InnoDB:事务型速记的首选引擎,支持ACID事务,支持行级锁定,MySQL5.5成为默认数据库引擎。MyISAM:MySQL5.5之前默认数据库引擎,最为常用,拥有较高的插入,查询速度,但不支持事务。用户可以根据不同的需求为数据表选择不同的存储引擎。原创 2023-10-13 09:38:12 · 51 阅读 · 0 评论 -
MySQL学习Day11——索引
索引是通过某种算法构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询所花费的时间越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,可以节省一大部分时间。索引是存储引擎用来快速查找记录的一种数据结构,按照实现的方式来分,主要有Hash索引和B+Tree索引,按照功能分可分为单列索引(普通索引、唯一索引、主键索引),组合索引,全文索引和空间索引。原创 2023-10-11 09:37:25 · 57 阅读 · 1 评论 -
MySQL学习Day10—触发器
触发器就是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中执行DML操作时自动触发这个SQL片段的执行,无需手动调用。使用别名OLD和NEW来引用出发其中发生变化的记录,这与其他数据库是相似的,现在触发器还只支持行级触发,不支持句级触发。UPDATE触发器:OLD表示修改之前的数据,NEW表示将要或已经修改后的数据。3.触发器是针对每一行的,对增删改非常频繁的表切记不要使用触发器,非常消耗资源。什么条件会触发:I、D、U。原创 2023-10-10 16:53:03 · 42 阅读 · 1 评论 -
MySQL学习Day09——存储过程和函数
有输入输出参数,可以声明变量,有if/else,case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能。简单地说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法。速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤。存储过程就是数据库SQL语言层面的代码封装与重用。函数的普遍特性:模块化,封装,代码复用。MySQL5.0起开始支持存储过程。自定义结束符号一般为$$MySQL的存储过程。原创 2023-10-08 10:34:02 · 83 阅读 · 1 评论 -
MySQL学习Day08——视图
某些视图是可以更新的,也就是说可以在UPDATE,DELETE或INSERT等语句中使用它们,以更新基表的内容,对于可以更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。视图中虽然可以更新数据,但是有很多的限制,一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据,因此,视图中的数据是依赖于原来的表中的数据的,一旦表中的数据发生改变,显示在视图中的数据也会发生变化。删除视图时,只能删除视图的定义,而不能删除视图的数据。原创 2023-10-08 10:23:26 · 89 阅读 · 1 评论 -
MySQL学习Day07——函数
ADDDATE/DATE_ADD(d,INTERVAL expr type):计算起始日期d加上一个时间段后的日期,type的可以是MICROECOND,SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,YEAR,DAY_MINUTE,DAY_HOUR,YEAR_MONTH。MID(s,n,len):从字符串s的n位置截取长度为len的子字符串,同SUBSTRING(s,n,len)原创 2023-10-06 22:14:28 · 74 阅读 · 1 评论 -
MySQL学习Day06——多表连接和子查询
MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用,对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表,外键所在的表就是从表。外键用来建立主表和从表的关联关系,为两个表的数据建立连接,约束两个表中的数据一致性和完整性。多对多关系:多对多关系的实现需要借助第三张中间表,中间表至少包含两个字段,将多对多的关系拆分成一对多的关系。一对一关系:在任一表中添加唯一外键,指向另一方主键,确保一对一的关系,一对一关系一般比较少见,遇到一对一关系的表最好是合并表。原创 2023-10-03 00:23:17 · 90 阅读 · 0 评论 -
MySQL学习Day05
正则表达式描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、定义匹配的规则以及一系列符合某个句法规则的字符串。SQL执行顺序:from——where——group by——having——select——order by——limit。如果要进行分组的话,则select字句之后只能出现分组的字段和统计函数,其他字段不能出现。{n,m}:m和n均为非负整数,其中n≤m,最少匹配n次且最多匹配m次。{n}:n是一个非负整数,匹配确定的n次。*:匹配前面的子表达式零次或者多次。原创 2023-10-02 12:50:32 · 94 阅读 · 1 评论 -
MySQL学习Day04——基本查询
数据库管理系统的一个重要功能就是数据查询,数据查询不应只是简单的返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。MySQL提供了功能强大、灵活的语句来实现这些操作。MySQL数据库使用select语句来查询数据。MySQL数据库基本操作DQL-基本查询。原创 2023-10-01 11:54:26 · 53 阅读 · 0 评论 -
MySQL学习Day03——约束
主键约束(primary key),自增长约束(auto_increment),非空约束(not null),唯一性约束(unique),默认约束(default),零填充约束(zerofill),外键约束(foreign key)在MySQL中,当主键定义为自增长后,这个主键的值就不需要用户输入数据了,而由数据库系统根据定义自动赋值,每增加一条记录,主键会以相同的步长进行增长。1.插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0。原创 2023-09-30 20:33:27 · 66 阅读 · 0 评论 -
MySQL学习Day03——DELETE,INSERT,UPDATE
delete和truncate原理不同,delete只删除内容,而truncate类似于drop table,可以理解为是将整表删除,然后再创建该表。DML是指数据操作语言,英文全称是Data Manupulation Language,用来对数据库中表的数据记录进行更新。一个括号代表一行值,若要插入多行数据则写多个括号即可,括号之间使用逗号进行分隔。列名没有顺序,只要和后面的值对应起来即可。MySQL数据库基本操作:DML。原创 2023-09-28 10:57:45 · 55 阅读 · 1 评论 -
MySQL学习Day02——创建数据库和数据表
字符串类型:CHAR,VARCHAR(变长字符串,使用时后面加一个括号,里面是字符的数目,例如varchar(20)),TINYBLOB,TINYTEXT,BLOB,TEXT,MEDIUMBLOB,MEDIUMTEXT,LONGBLOB,LONGTEXT。日期和时间类型:DATE(YYYY-MM-DD),TIME(HH:MM:SS),YEAR(YYYY),DATETIME(YYYY-MM-DD HH:MM:SS),TIMESTAMP(YYYYMMDD HHMMSS)(2)对表结构的常用操作。原创 2023-09-28 10:24:12 · 134 阅读 · 1 评论 -
MySQL学习Day01
键值型数据库的典型应用场景是作为内存缓存。一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record),一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。文档型数据库(MongoDB):此类数据库可以存取并获取文档,可以是XML,JSON等格式,在数据库中文档作为处理信息的基本单位,一个文档相当于一条记录,文档数据库所存放的文档相当于键值型数据库所存放的值。原创 2023-09-26 19:16:52 · 45 阅读 · 0 评论