
MySQL
酱油瓶啤酒杯
这个作者很懒,什么都没留下…
展开
-
MySQL-超大分页处理-开发角度
1、什么是超大分页当一个表的行数大小达到百万及以上这种量级时候,毫无疑问产生超大分页2、从数据库方面解决利于id进行子查询3、从需求的角度减少这种请求,以及防止ID泄漏且连续被人恶意攻击.4、主要措施解决超大分页,其实主要是靠缓存,可预测性的提前查到内容,缓存至redis等k-V数据库中,直接返回即可5、《Java开发手册》参考MySQL并不是跳过offset行,而是取offset+N行,然后舍弃前offset行,返回N行,当offset特别大的时候,效率就特别低下,要么控制原创 2021-01-12 10:33:13 · 956 阅读 · 0 评论 -
MySQL-InnoDB行锁算法-三种详解
1、行锁是什么?字面意思,给一行数据加锁。InnoDB 行锁是通过给索引上的索引项加锁来实现的,如果没有索引,InnoDB 将通过隐藏的聚簇索引来对记录加锁。注意:行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。 两个事务不能锁同一个索引。2、三种算法(1)Record lock:记录锁,单个行记录上的锁锁住具体的索引项,当SQL执行按照唯一性索引进行数据的检索时,查询条件等值匹配且查询的数据是存在,这时SQL语句加上的锁即为记录锁Record locks,锁住具体的索引项BEGI原创 2021-01-11 16:50:48 · 967 阅读 · 0 评论 -
MySQL-MVCC-深入解析
1、什么是MVCC?MVCC,Multi-Version Concurrency Control,多版本并发控制,是MySQL的默认存储引擎InnoDB实现隔离级别的一种具体方式,能够实现提交读/READ-COMMITTED和可重复读/REPEATABLE-READ两种隔离级别。MVCC指的就是在使用 READ COMMITTDREPEATABLE READ这两种隔离级别的事务在执行普通的 SELECT 操作时,访问记录的版本链的过程。可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。提原创 2021-01-11 16:08:29 · 179 阅读 · 0 评论 -
MySQL-从事务的四大特性开始-到隔离级别
数据库事务是一组操作,只有全部执行或全部不执行两种情况1、事务的四大特性ACID原子性(Atomicity):指事务是一个不可分割的工作单位,事务的操作要么都发生,要么都不发生。一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 一致性关注数据的可见性,中间状态的数据不可见,只有最初和最终状态的数据对外可见。隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的原创 2021-01-11 10:49:50 · 93 阅读 · 0 评论 -
MySQL-普通索引和唯一索引速度对比-深入分析
结论:唯一索引不一定比普通索引快,要分情况讨论查询时: 未使用limit1的情况,唯一索引匹配到一条数据后即返回;普通索引回继续匹配下一条数据,发现不匹配后才返回。从这里看,唯一索引比较普通索引少了一次匹配过程,领先这个微乎其微的消耗。更新时: 在更新时,普通索引将记录放在change buffer中即执行完毕;唯一索引还要校验唯一性,必须将数据页读入内存确定没有冲突,然后才能继续操作;所有对于写多读少的情况,普通索引使用change buffer,减少了对 磁盘的访问次数,性能更高。...原创 2021-01-11 10:25:59 · 2508 阅读 · 0 评论 -
MySQL-常用存储引擎-深入了解
1、MyISAM引擎1.1 什么时候使用?当表的读操作远远大于写操作,且不需要事务的支持的时候,可以选用MyISAM引擎。因为MyISAM不提供事务支持,也不支持行级锁和外键。当插入/更新操作需要写操作时需要把整个表锁定,效率太低。但是MyISAM保存了表的行数,SELECT COUNT(*) FROM TABLE能直接返回表的行数而不用扫描全表计算。1.2 支持的三种存储格式**静态表:**默认的存储格式,表中的字段都是非变长字段,每个记录都是固定长度的,优点是存储非常迅速,容易缓存,出现故障原创 2021-01-06 15:19:38 · 106 阅读 · 0 评论 -
MySQL-日志-深入解析
1、redolog,undolog,binlogredo log-重做日志文件,记录数据修改之后的值,用于持久化到磁盘中。-包括两部分:1是内存中的日志缓冲,是易失性的;2是磁盘上的重做日志文件,是持久性的;-由InnoDB引擎实现,是物理日志,记录的是物理数据页修改后的信息。-当一条数据需要更新时,InnoDB会先将数据更新,然后记录redoLog 在内存中,然后找个时间将redoLog的操作刷新到磁盘上的文件上。-不管事务是否提交成功,都会被记录,确保了事务的持久性。undo lo原创 2021-01-05 19:32:32 · 158 阅读 · 0 评论 -
MySQL-基本架构-深入解析
1、层级结构简单的划分为:Server层和存储引擎层Server层:所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。主要包括连接器、查询缓存、分析器、优化器、执行器等。存储引擎层:主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块是 redolog 模块。2、Server层主要部件连接器: 身份认证和权限相关(登录原创 2021-01-05 14:55:49 · 204 阅读 · 0 评论 -
MySQL-三大范式-深入解析
1、什么是范式?范式就是一种规则约束,数据库范式就是通过约束来优化数据库数据的存储方式,没有规矩不成方圆,没有约束就没有性能卓越的MySQL2、第一范式/1NF表中的每一列都保持原子性,也就是数据库表的每一列都是不可分割的最小单元,即每一列满足原子性,列不能再被分割。3、第二范式/2NF在第一范式的基础上要满足第二范式,即每个表必须有主键,每个表只描述一件事情/确定单一职责,非主键列要完全依赖于主键列,属性必须完全依赖于主键4、第三范式/3NF在第一范式和第二范式的基础上,非主键列只能依赖于主原创 2021-01-05 14:39:05 · 273 阅读 · 0 评论 -
MySQL-为什么要使用数据库-深入解析
很多时候我们学习和使用数据库,但是没有深入了解为什么我们要使用数据库?数据库和竞品相比有哪些优点呢?1、数据保存在内存中:存取快但不能永久保留优点:存取速度快缺点:数据不能永久保存2、数据保存在文件中:永久保存但失去了存取查询速度优势优点:数据永久保存缺点:1)数据比内存操作慢,频繁的IO操作;2)查询数据不方便3、数据保存在数据库⭐:永久保存且增删改查方便数据永久保存使用SQL语句,查询方便效率高管理数据方便4、进一步了解MySQLMySQL是关系型数据库管理系统,原创 2021-01-05 14:21:38 · 2149 阅读 · 0 评论 -
MySQL-30改善性能-必知必会
关键的生产DBMS应该运行在自己的专用服务器上默认配置一般很好用,建议根据需求进行更改MySQL是多用户多线程的DBMS,可以使用KILL命令终结某个特定的进程尝试用最佳的方法编写SELECT语句存储过程执行比逐条执行更快使用正确的数据类型有的操作支持DELAYED关键字导入数据时应该关闭自动提交多个OR条件的查询,建议使用UNION语句连接多个SELECT语句索引改善数据库检索的性能,但损害插删改的性能LIKE很慢,最好使用FULLTEXT…...原创 2021-01-05 10:45:10 · 116 阅读 · 0 评论 -
MySQL-28数据库维护-必知必会
备份数据使用命令行实用程序mysqldump转储所有数据库内容到外部文件使用命令行实用程序mysqlhostcopy从一个数据库复制所有数据使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到稳不稳就进行数据量维护ANALYZE TABLE,用来检查表键是否正确CHECK TABLE用来针对许多问题对表进行检查,发现和修复问题如果从表中删除大量的数据,使用OPTIMIZE TABLE来收回空间优化表的性能启动诊断问题–help .原创 2021-01-05 10:32:06 · 146 阅读 · 0 评论 -
MySQL-28安全管理-必知必会
访问控制用户需要对所需的数据有适当的访问权限,不多不少。可以使用图形用户界面MySQL Administor管理用户及账号权限严肃的对待root登录的使用,仅在绝对需要时使用它管理用户MySQL的用户账户和信息存储在名为mysql的MySQL数据库中,需要直接访问时:USE mysql;SELECTE user FROM user;创建用户账户CREATE USER ben IDENTIFIED BY 'p@$$wOrd';重命名一个用户账号RENAME USER ben T..原创 2021-01-05 10:18:00 · 161 阅读 · 1 评论 -
MySQL-27全球化和本土化/字符集和较对-必知必会
字符集和较对顺序不同的语言需要以不同的方式存储和检索;字符集是字母和符号的集合、编码为对某个字符集成员的内部表示;较对为规定字符如何比较的指令,比如排序英文时是否区分大小写等;使用字符集和较对顺序SHOW CHARACTER SET;-- 查看所有可用的字符集+每个字符集的描述和默认较对SHOW COLLATION;-- 查看所支持较对的完整列表,以及查看它们适用的字符集#通常系统默认定义一个字符集和较对,可以在创建数据库时指定#使用以下的语句确定所用的字符集和较对SHOW VA..原创 2021-01-05 09:50:10 · 127 阅读 · 0 评论 -
MySQL-26管理事务处理-必知必会
InnoDB 引擎支持事务处理什么是事务处理事务处理可以用来维护数据库的完整性,保证成批的MySQL操作要么全都执行,要么都不执行。事务处理是一种机制,用来成批的执行MySQL操作,以保证数据库不包含不完整的操作结果。事务transaction:指的是一组SQL语句回滚rollback:撤销指定的SQL语句的过程提交commit:将未存储的SQL语句结果写入数据库表中保留点savepoint:指事务处理中设置的临时占位符place hoder,可以对它发布回退使用ROLLBACK原创 2021-01-05 09:26:20 · 139 阅读 · 0 评论 -
MySQL-25使用触发器-必知必会
MySQL5增加了对触发器的支持什么是触发器想让某条语句在某个事件发生的时候自动执行,就需要触发器。触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句:DELETE、INSERT、UPDATE创建触发器唯一的触发器名、触发器关联的表、触发器应该响应的活动、触发器何时执行(处理之前还是之后CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';CREATE原创 2021-01-03 20:40:09 · 184 阅读 · 2 评论 -
MySQL-24使用游标-必知必会
MySQL5添加了对游标的支持什么是游标在SELECT检索操作返回的结果集的行,使用简单的SELECT语句无法得到第一行、前十行、在检索结果前进/后退一行这些操作。使用游标能实现这些操作。游标是存储在MySQL服务器上的数据库查询,是该语句检索出来的结果集。在存储了游标之后,就能根据需要滚动/浏览其中的数据。主要应用于交互式应用,用户需要滚动屏幕上的数据,并对数据进行浏览/做出更改。MySQL的游标只能用于存储过程&函数。使用游标1、在使用前定义游标,定义要使用的SELECT语句原创 2021-01-03 20:06:56 · 246 阅读 · 0 评论 -
MySQL-23使用存储过程-必知必会
MySQL5加入了对存储过程的支持。什么是存储过程学习到本章,大多数SQL语句都是针对一个/多个表的单条语句,但是有的操作需要多条语句才能完成。存储过程就是为以后的使用而保存的一条/多条SQL语句的集合。为什么使用存储过程?把处理封装在容易使用的单元中,简化复杂的操作;集中一起处理会减少出错的可能性,保证了数据的完整性;简化对变动的管理,如果表名/列名/业务逻辑等发生变化,只需更改存储在过程的代码,使用人员无需知道提高性能编写功能更加强大且灵活的代码执行存储过程MySQL称原创 2021-01-03 19:14:38 · 131 阅读 · 0 评论 -
MySQL-22使用视图-必知必会
视图视图是虚拟的表,与包含数据的表不同,视图只包含使用时 动态检索数据的查询 / MYSQL5及之后支持视图#进行一次联结查询,需要知道相关表的结构才能知道如何创建查询和对表进行连接,当检索其他的数据时要修改WHERE子句SELECT cust_name,cust_contactFROM customers,orders,orderitemsWHERE customers.id = orders.cust_id, AND orderitems.order_num = order.order_..原创 2021-01-03 16:41:23 · 98 阅读 · 0 评论 -
MySQL-21创建和操作表-必知必会
创建表使用CREATE TABLE语句,在关键字之后给出新表的名字,表列的名字和定义/用逗号分隔CREATE TABLE customers( cust_id int NOT NULL AUTO_INCREMENT,#自动增长 cust_name char(50) NOT NULL,#不允许NULL值的列在插入/更新时必须有值。 cust_address char(50) NULL, #NULL的意思就允许N..原创 2021-01-03 15:38:37 · 123 阅读 · 0 评论 -
MySQL-20更新和删除数据-必知必会
利于UPDATE和DELETE语句更新和删除数据更新数据更新表中的特定行UPDATE costomers SET cust_email = '1234@qq.com' WHERE cust_id = 1001;UPDATE costomers SET cust_email = '1234@qq.com',cust_name = 'a' WHERE cust_id = 1001;首先指定要更新的表,之后是列名和他们的新值,之后是确定要更新行的过滤条件。想删除某个列的值,可以将它更新为NU原创 2021-01-03 14:55:24 · 135 阅读 · 0 评论 -
MySQL-19插入数据-必知必会
增删改查的查之前18章已经讲过了,本章将学习增操作,INSERT,插入行到数据库表中。插入完整的行INSERT INTO CustomerVALUE(NULL,#id没有值是因为该列由MySQL自动增量 'Pep E.Lapew', '100 STREET', 'Los ANG', 'CA', '123445', 'CN', NULL, NULL);#INSERT语句一般不会产生输出不想给一个值可原创 2021-01-03 14:54:44 · 162 阅读 · 0 评论 -
MySQL-18全文本搜索-必知必会
MyISAM引擎支持全文本搜索,InnoDB不支持全文本搜索。之前学习的通配符和正则表达式匹配通常需要MySQL尝试匹配表中的所有行,非常耗时;很难控制匹配什么和不匹配什么;不能提供一种智能化的选择结果的方法。启动全文本搜索支持CREATE TABLE productnoted( node_id int NOT NULL AUTO_INCREMENT, prod_id char(10) NOT NULL, note_data datetime NO原创 2021-01-02 17:49:54 · 191 阅读 · 0 评论 -
MySQL-17组合查询-必知必会
利用UNION操作符将多条SELECT语句组合成一个结果集。一般SQL查询只包含从一个/多个表中返回的单条SELECT语句,MySQL允许多个查询并将结果作为单个查询结果集返回什么时候使用组合查询?1、在单个查询中从不同的表返回类似结构的数据2、在单个表执行多个查询,按单个查询返回数据具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出使用UNION操作符来组合多条SQL查询#需要价格<=5的所有物品的一个列表,还想要包括供应商1001和1002生产的所有物品(不原创 2021-01-02 12:39:51 · 189 阅读 · 0 评论 -
MySQL-16创建高级级联知必会
第十章介绍了使用别名引用被检索的表列https://blog.youkuaiyun.com/CodeDabaicai/article/details/111954842,如下所示SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title FROM vendors ORDER BY vend_name;SQL 还允许给表名起别名,可以缩短SQL语句,允许在单条SELECT语句中多次使用相同的表#同第15章最后的代码示例,三原创 2021-01-02 12:39:17 · 103 阅读 · 0 评论 -
MySQL-14使用子查询-必知必会
之前的学习的所有SELECT语句都是简单查询,只从单个数据库表中检索数据的单条语句,SQL还允许建立子查询:嵌套在其他查询中的查询举例:表orderitems只存储客户的ID和物品信息。实际的客户信息存储在customers表中 现在需要查询订购物品TNT2的所有客户1、在orderitems表中检索出含物品TNT2的所有订单的编号2、检索具有步骤1的订单编号的所有客户的ID3、检索步骤2返回的所有客户ID的客户信息1、对prod_id为TNT2的所有订单,检索其order_num原创 2021-01-02 12:36:44 · 285 阅读 · 0 评论 -
MySQL-13分组数据-必知必会
本章介绍如何分组数据,以便汇总表内容的子集。两个新的SELECT语句子句:GROUP BY子句和HAVING子句创建分组GROUP BY子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更细致的控制如果在GROUP BY子句中嵌套了分组,数据将在最后的分组上进行汇总GROUP BY子句列出的列必须是检索列/有效的,不能使用别名(把取别名的完整表达式替换过来)NULL 也算一个分组,多个NULL将合并成一组GROUP BY子句必须出现在WHERE之后,ORD原创 2021-01-02 12:36:08 · 155 阅读 · 0 评论 -
MySQL-12聚集函数-必知必会
有时需要汇总数据而不用实际把它们检索出来,比如确定表中的行数,找出表列的最大值、最小值和平均值等需求聚集函数:运行在行组上,计算和返回单个值的函数SELECT AVG(prices) AS avg_prices FROM products;返回表中所有产品的平均价格SELECT AVG(prices) AS avg_prices FROM products WHERE id = 110;返回特定的产品的平均价格SELECT COUNT(*) AS num_cust FROM costome原创 2020-12-31 15:22:55 · 134 阅读 · 0 评论 -
MySQL-11使用数据处理函数-必知必会
因为函数的可移植性很差,并不被建议使用,使用需做好代码注释文本处理函数SELECT name,Upper(name) AS name_upcase FROM student ORDER BY name;日期和事件处理函数SELECT id,num FROM orders WHERE Data(order_order) = '2005-09-01';数值处理函数...原创 2020-12-31 15:22:00 · 73 阅读 · 0 评论 -
MySQL-01/02了解与介绍-必知必会
一.了解SQL1、什么是数据库?数据库是保存有组织的数据的容器,database。2、什么是数据库管理系统?数据库是通过DBMS创建和操作的容器,它替用户访问数据库,database management system。3、表、模式、数据类型、列、行、主键**表:**某种特定类型数据的结构化清单,有唯一的名字用来标识自己**模式:**关于数据库和表的布局及特性的信息**数据类型:**每列都有特定的数据类型,限制存储在列中的数据种类**列:**是表中的一个字段,表由一个/多个列组成,每列都原创 2020-12-30 11:16:24 · 155 阅读 · 0 评论 -
MySQL-03使用MySQL /SHOW语句-必知必会
SHOW DATABASES;返回可用数据库的一个列表USE XXXX;切换成xxxx数据库SHOW TABLES;返回当前选择的数据库内可用表的列表SHOW 表 FROM 数据库;返回一个表列SHOW STATUE;显示广泛的服务器状态信息SHOW CREATE DATABASE;显示创建特定的数据库的MySQL语句SHOW CREATE TABLE;显示创建特定的表的MySQL语句SHOW GRANTS;显示授权用户的安全权限SHOW ERRORS;显示服务器错误SHOW WARN.原创 2020-12-30 11:14:54 · 121 阅读 · 0 评论 -
MySQL-04检索数据/SELECT语句-必知必会
检索单个列,返回表中所有的行关于该列的信息,数据没有排序也没有过滤SELECT 列名 FROM 表名;SELECT NAME FROM student;检索多个列,在SELECT关键字之后给出多个列名,用,分割SELECT id,age FROM student;检索所有列,用通配符*,一般返回列在表中定义中出现的顺序SELECT * FROM student;检索不同的行,出现的每个值都是不同的,DISTINCT关键字,放在列名前边SELECT DISTINCT id.原创 2020-12-30 11:14:02 · 115 阅读 · 0 评论 -
MySQL-05排序检索数据/ORDER BY-必知必会
关系数据库设计理论认为,如果不明确规定排序顺序,则不应假定检索出的数据的顺序是有意义的。ORDER BY取一个列/多个列的名字,据此对输出进行排序SELECT id FROM student ORDER BY id;对id列按数字大小顺序排列SELECT id,age FROM student ORDER BY id,age;先按照id排序,相同id的按照age排序指定排序的方向,默认升序,还可以指定降序,使用DESC关键字SELECT id FROM student ORDER BY原创 2020-12-30 11:13:12 · 93 阅读 · 0 评论 -
MySQL-06过滤数据/WHERE子句-必知必会
使用搜索/过滤条件来检索所需数据SELECT * FROM student WHERE id = 1;SELECT id,age FROM student WHERE id = 1;WHERE子句操作符和Java一致,还有 BETWEEN:在指定的两个值之间,<>和!=一个意思SELECT * FROM student WHERE id <> 1;SELECT * FROM student WHERE id != 1;SELECT * FROM student .原创 2020-12-30 11:12:25 · 107 阅读 · 0 评论 -
MySQL-07数据过滤/WHERE子句/NOT/IN-必知必会
MySQL允许使用多WHERE子句,这些子句以AND/OR子句方式使用操作符:逻辑操作符用来联解或改变WHERE子句中的子句的关键字AND操作符,使用多个条件进行过滤,需要满足所有条件SELECT id,age FROM student WHRER id = 1 AND age = 50;OR操作符,使用多个条件进行过滤,只需要满足其中一个条件SELECT id,age FROM student WHRER id = 1 OR age = 50;SQL在处理逻辑操作符时,优先处理.原创 2020-12-30 11:11:28 · 585 阅读 · 0 评论 -
MySQL-08用通配符过滤数据-必知必会
LIKE通配符之前介绍的操作符是针对已知的值进行过滤的,但不是对所有的搜索都好用,比如搜索名字含有anvil的所有产品通配符:用来匹配值的一部分的特殊字符搜索模式:由字面值、通配符或两者组合构成的搜索条件在搜索子句中使用通配符,必须使用LIKE操作符,指示MySQL后跟的搜索模式利用通配符匹配,而不是直接相等匹配进行比较。百分号%通配符:表示任何字符出现任意次数,例如寻找名字jet开头的id,注意空格SELECT id,name FROM student WHERE name LIK..原创 2020-12-30 11:10:06 · 113 阅读 · 0 评论 -
MySQL-09使用正则表达式进行搜索-必知必会
正则表达式的作用是匹配文本,将一个模式/正则表达式与文本串作比较。MySQL的WHERE子句对正则表达式提供了支持基本字符匹配SELECT name FROM student WHERE name REGEXP '1000' ORDER BY name;REGEXP 后所跟的东西作为正则表达式处理处理,不区分大小写,返回包括后跟的行LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会被返回/除非使用通配符REGEXP在列值中进行匹配,如果出现则找到并返回相原创 2020-12-30 10:24:04 · 137 阅读 · 0 评论