asc

Mysql死锁如何排查:insert on duplicate死锁一次排查分析过程

元气小坏坏 提交于 2019-11-29 05:40:11
前言 遇到Mysql死锁问题,我们应该怎么排查分析呢?之前线上出现一个insert on duplicate死锁问题,本文将基于这个死锁问题,分享排查分析过程,希望对大家有帮助。 死锁案发还原 表结构: CREATE TABLE `song_rank` ( `id` int(11) NOT NULL AUTO_INCREMENT, `songId` int(11) NOT NULL, `weight` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `songId_idx` (`songId`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 隔离级别: mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set, 1 warning (0.00 sec) 数据库版本: +------------+ | @@version | +------------+ | 5.7.21-log | +------------+ 1 row in

SQL基础-操纵表及插入、查询

自闭症网瘾萝莉.ら 提交于 2019-11-28 19:58:16
一、操纵表 1、表的关键信息 2、更新表名 更新表名:使用RENAME TABLE关键字。语法如下: RENAME TABLE 旧表名 TO 新表名; 比如,生产环境投产前备份teacher表,使用如下语句: RENAME TABLE teacher TO teacher_bak; 3、更新字段名 更新字段名:使用ALTER TABLE关键字。语法如下: ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名; 比如,修改teacher_name的字段名为teacher_nm,使用如下语句: ALTER TABLE teacher RENAME COLUMN teacher_name TO teacher_nm; 4、更新字段类型 更新字段类型:使用ALTER TABLE关键字。语法如下: ALTER TABLE 表名 ALTER COLUMN 字段名 新字段类型; 比如,修改teacher_name的类型为VARCHAR(100),使用如下语句: ALTER TABLE teacher ALTER COLUMN teacher_name varchar(100); 在更改类型的时候,更改前的类型和更改后的类型一定要能显示转换,否则会造成数据丢失。 5、更新字段NULL值 更新字段类型时,可同时设置字段NULL值、默认值,也是使用ALTER

MYSQL 锁

十年热恋 提交于 2019-11-28 13:45:53
锁的类型 共享锁(S) 共享锁可以被多个事务持有,事务T1获取了行r的共享锁,那么事务T2也可以获得行r的共享锁,但是获取不到事务T1的排它锁 显示的加共享锁:select * from xx lock in share mode; 排它锁(X) 排他锁只能被一个事务持有,事务T1持有了行r的排它锁,那么事务T2获取不到行r的排它锁,也获取不到行r的共享锁 显式的加排它锁:select * from xx for update; S X S 兼容 不兼容 X 不兼容 不兼容 创建一张测试表a,id是主键,a2为唯一索引,a3为普通所以 CREATE TABLE `a` ( `id` int(11) NOT NULL AUTO_INCREMENT , a1 int(11) NOT NULL , a2 int(11) not NULL, a3 int(11) not null, PRIMARY KEY (`id`), unique key uniq_a2(a2), index idx_a3(a3) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; insert into a(a1,a2,a3) values(1,2,3),(2,4,6),(3,6,12); 事务1获取共享锁,事务2获取排它锁,事务2将获取失败 事务1 事务2 start

【PHP】数组按照字母排序

点点圈 提交于 2019-11-27 10:49:28
/** * 将数组按字母A-Z排序 * @return [type] [description] */ private function chartSort($list) { // $user=$this->user; $data = []; foreach ($list as $k => $v) { $v['letter'] = $this->getFirstChart($v['name']); if (empty($data[$v['letter']])) { $data[$v['letter']] = []; } $data[$v['letter']][] = $v; } $i = 0; foreach ($data as $k => $v) { $li[$i]['letter'] = $k; $li[$i]['list'] = $v; $i++; } sort($li); return $li; } /** * 返回取汉字的第一个字的首字母 * @param [type] $str [string] * @return [type] [strind] */ private function getFirstChart($str){ if( empty($str) ){ return ''; } $char=ord($str[0]); if( $char >= ord('A'

Spark排序方式集锦

╄→гoц情女王★ 提交于 2019-11-27 08:23:33
一.简介   spark中的排序一般可以使用orderBy或sort算子,可以结合负号、ASC/DESC和col进行简单排序、二次排序等情况 二.代码实现 1 package big.data.analyse.sparksql 2 3 import org.apache.log4j.{Level, Logger} 4 import org.apache.spark.sql.SparkSession 5 6 /** 7 * 排序 8 * Created by zhen on 2019/8/14. 9 */ 10 object DateFrameSort { 11 Logger.getLogger("org").setLevel(Level.WARN) 12 def main(args: Array[String]): Unit = { 13 val spark = SparkSession.builder().appName("DateFrameSort").master("local[2]").getOrCreate() 14 15 val data = Array((7, 2, 3), (1, 8, 6), (1, 8, 3), (4, 5, 9)) 16 val df = spark.createDataFrame(data).toDF("col1", "col2",

C# datatable排序(转)

匆匆过客 提交于 2019-11-27 08:19:26
转自:http://www.cnblogs.com/ztf_yh/p/3765327.html 在此表示感谢! 一、重生法 dstaset.Tables.Add(dt) dataset.Tables(0).DefaultView.Sort = "id desc" -------------------------------------------------------------------------------- 二、直接法 dv = New DataView(dt) dv.Sort = "id desc" -------------------------------------------------------------------------------- 三、间接法 dv = New DataView(ds.Tables[0]) dv.Sort = "id desc" DataRow[] rows = dataTable1.Select("", "ord asc"); DataTable t = DataTable1.Clone(); t.Clear(); foreach (DataRow row in rows) t.ImportRow(row); DataTable1 = t; VS2005中这种方法最简单: DataView dv = dt

android -------- RSA加密解密算法

前提是你 提交于 2019-11-27 03:45:27
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用 RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 网上写法也有很多种,分享一种参考 import java.math.BigInteger; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.RSAPublicKeySpec; import java.util.HashMap; import javax.crypto.Cipher; public class RSAUtils { /** * 生成公钥和私钥 * @throws

mysql limit分页查询效率比拼

好久不见. 提交于 2019-11-26 16:06:53
1、直接使用数据库提供的SQL语句 limit M ,N SELECT * from message limit 0 , 10 ; -- 0.044 SELECT * from message limit 100 , 10 ; -- 0.084 SELECT * from message limit 1000 , 10 ; -- 0.087 SELECT * from message limit 10000 , 10 ; -- 0.102 SELECT * from message limit 100000 , 10 ; -- 0.236 SELECT * from message limit 1000000 , 10 ; -- 1.584 SELECT * from message limit 2000000 , 10 ; -- 2.961    适用场景:可以看出,在数据量小时,使用limit M ,N 可以很快的查询出数据,但是当数据量达到十万级甚至百万级时,查询效率呈几何倍数递增; 分析: 如下,其原因是,该查询会导致全表扫描,速度会很慢,且有的数据库返回结果集不稳定(如某次返回1,2,3,另外一次返回2,1,3),limit限制的是从结果集的M位置取出N条输出,其余抛弃; 2、基于索引排序 SELECT * from message order by id asc