背景
客户发消息说系统突然登录不上,验证码都出不来。当看到这个消息的时候觉得应该挺简单的,觉得大概率是应用程序挂了,决定临时使用重《重启》大法。登录应用服务进行查看发现服务在重启中,尝试重启也无效,就查看了相关日志发现是MySQL服务连接不上了。接下来就只能看下MySQL 服务出现什么问题并想办法尝试解决。
问题
登录MySQL服务器发现服务在启动中并且一直处于这个状态。停止服务MYSQL服务并尝试重启,问题依然存在。MYSQL的状态一直就是这个Server startup in progress,如下所示:
mysqld.service – MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Act...
6个月前 (05-31) 752℃ 0评论
0喜欢
背景
客户需要针对用户的积分进行排名,按照积分的多少降序进行。为了更快更好的满足客户需求,就采取了SQL Server已有的排名函数RANK或DENSE_RANK来实现
RANK
返回结果集的分区内每行的排名。 行的排名是相关行之前的排名数加一。
ROW_NUMBER 和 RANK 类似。 ROW_NUMBER 按顺序对所有行进行编号(例如: 1、2、3、4、5)。 RANK 为相应关联提供相同的数值(例如: 1、2、2、4、5)。
RANK是运行查询时计算出的临时值
语法
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名
DENSE_RANK
此函数返回结果集分区中每行的排名,排名值没有间断。...
3年前 (2022-04-06) 822℃ 0评论
3喜欢
游标
游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标的特性
游标具有以下三个特性:
不敏感(Asensitive)数据库可以选择不复制结果集只读(Read only)不滚动(Nonscrollable)游标只能向一个方向前进,并且不可以跳过任何一行数据
游标的优点
游标是针对行操作的,对从数据库中SELECT查询得到的结果集的每一行可以进行分开的独立的相同或不同的操作,是一种分离的思想。游标是面向集合与面向行的设计思想之间的一种桥梁。
游标的缺点
游标的主要缺点是性能不高。游标的开销与游标中进行的操作相关,如果在游标中进行复杂的操作,开销会非常高。
游标的适用场景
MySQL数据库中,可以在存储过程、函数、触发器、事件中使用游标。
...
3年前 (2021-08-28) 1161℃ 0评论
42喜欢
背景
某项目数据统计,为了更加直观显示一些数据,刚好有这个行转列的一个需求。行转列的需求其实在平常业务中也是比较常见的,在数据统计中使用的比较频繁。行转列以前也遇到过,之前数据库使用的是Microsoft SQL Server。目前使用的是MySQL数据库,这里也做一下简单的记录。
实现
结构与数据准备
为了更好的理解行转列,这里准备一张结构简单都表以及数据。
DROP TABLE IF EXISTS `project_completion_rate`;
CREATE TABLE `project_completion_rate` (
`id` int(8) NOT NULL,
`project_user` varchar(20) DEFAULT NULL,
`project_content` varchar(20) DEFAULT NULL...
3年前 (2021-08-09) 810℃ 0评论
7喜欢
因业务需求可能会导致数据存储结构发生变化,当数据保存到关系型数据库中时必将带来表结构的变化,这就涉及到对表中的列进行新增、修改、删除等操作。
在大多情况下数据库脚本执行必须是可重复的,因此对数据库表的任何表变动都需要进行判断,然而在MySQL数据库中通过SQL脚本进行列的变更就不太便利。下面记录一下曾经用到的一些MySQL脚本:
USE DATABASE NAME; -- 这里要换数据库名称
DROP PROCEDURE IF EXISTS Operate_ColumnADD_Update_Delete;
DELIMITER$$
-- 1表示新增列,2表示修改列类型,3表示删除列
CREATE PROCEDURE Operate_ColumnADD_Update_Delete(TableName VARCHAR(50),ColumnName VARCHAR(50)...
5年前 (2020-03-31) 769℃ 0评论
3喜欢
使用INT做主键的优点:
需要很小的数据存储空间,仅仅需要4 byte 。insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能。 index和Join 操作,int的性能最好。 容易记忆。 支持通过函数获取最新的值
使用INT做主键的缺点
如果经常有合并表的操作,就可能会出现主键重复的情况。 使用INT数据范围有限制。如果存在大量的数据,可能会超出INT的取值范围。 很难处理分布式存储的数据表。
使用GUID做主键的优点:
它是独一无二的。 出现重复的机会少。 适合大量数据中的插入和更新操作。 跨服务器数据合并非常方便。
使用GUID做主键的缺点:
存储空间大(16 byte),因此它将会占用更多的磁盘大小。很难记忆。join操作性能比int要低...
8年前 (2016-09-23) 893℃ 0评论
0喜欢
参数化查询(Parameterized Query )是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。下面将重点总结下Parameter构建的几种常用方法。
说起参数化查询当然最主要的就是如何构造所谓的参数:比如,我们登陆时需要密码和用户名,一般我们会这样写sql语句,select count(*) from username where names=@names and passwd=@passwd,为了防止sql注入,我们该如何构建@names和@passwd两个参数呢,下面提供7种(其实大部分原理都是一样,只不过代码表现形式不一样,以此仅作对比,方便使用)构建参数的方法,根据不同的情况选用合适的方法即可:
通用数据库...
9年前 (2016-05-05) 1008℃ 0评论
1喜欢
在数据库进行表设计的时,大多情况下都习惯使用一个自增列作为主键,具体原因这里不会进行描述。在很多情况下需要对现有数据进行数据迁移,这个时候就需要保证迁移后的数据自增列的数据保持不变。SQL SERVER是支持这种迁移方式的。
首先就要先取消自增长,数据迁移完成后再恢复自增长即可。
SET IDENTITY_INSERT
允许将显式值插入表的标识列中。
语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
实例
set IDENTITY_INSERT tableName on;
INSERT INTO tableName (id,name) VALUES (2,'name');
set IDENTITY_INSER...
13年前 (2012-04-10) 3026℃ 0评论
7喜欢