MKL学习——向量操作

article/2025/9/14 6:21:13

前言

推荐两个比较好的教程:

BLAS (Basic Linear Algebra Subprograms)

LAPACK for Windows

命名规范

BLAS基本线性代数子程序的函数命令都有一定规范,便于记忆

<character> <name> <mod> ()

character

定义的是数据类型

s实数域,单精度
c复数域,单精度
d实数域,双精度
z复数域,双精度

也可结合起来,比如sc代表实数域和复数域的单精度类型,dz代表实数域和复数域的双精度类型。

name

针对BLAS level 1,也就是向量与向量间的操作的时候

dot向量点乘
rot向量旋转
swap向量交换

针对BLAS level 2和3的情况,也就是矩阵参数类型

ge一般矩阵
gb一般带状矩阵
sy对称矩阵
sp对称矩阵(压缩存储)
sb对称带状矩阵
he埃尔米特矩阵 Hermitian matrix
hp埃尔米特矩阵(压缩存储)
hb埃尔米特带状矩阵
tr三角矩阵
tp三角矩阵(压缩存储)
tb三角带状矩阵

mod

提供操作的额外信息,三种Level情况

针对Level 1

c共轭向量
u非共轭向量
gGivens 旋转结构
m修正 Givens 旋转
mg修正 Givens 旋转结构

针对Level 2

mv矩阵-向量乘积
sv求解具有一个未知向量的线性方程组
r矩阵的一阶更新
r2矩阵的二阶更新

针对Level 3

mm矩阵-矩阵乘积
sm求解具有多个未知向量的线性方程组
rk矩阵的k阶更新
r2k矩阵的2k阶更新

函数实例

ddot 双精度、实数域,向量-向量点乘
cdotc复数域,向量-向量点乘,共轭
scasum巨型向量元素和,单精度实数域输出,单精度复数域输入
cdotu向量-向量点乘,一般矩阵,单精度
sgemv矩阵-向量点乘,一般矩阵,单精度
ztrmm矩阵-矩阵乘法,三角矩阵,双精度复数域

C接口的调用方法

C接口相对于Fortran有一个优势就是,可以指定是行优先还是列优先。调用方法就是在正常的命令规范前面加个前缀cblas_。对于复数函数?dotc?dotu还需要加一个后缀_sub,通过指针返回复数结果,作为后一个参数添加进来。

使用CALBAS需要遵循一些规则

  • 输入参数需要使用const修饰
  • 非复数标量输入参数直接使用值传递
  • 复数标量参数使用void指针传递
  • 矩阵参数使用地址传递
  • BLAS类型参数使用合适的枚举类型代替
  • Level 2和3中有一个CLABS_LAYOUT类型的额外参数,作为第一个输入参数。这个参数指定二维数组是行优先CblasRowMajor还是列优先CblasColMajor

定义的枚举类型:

enum CBLAS_LAYOUT {
CblasRowMajor=101, /* row-major arrays */
CblasColMajor=102}; /* column-major arrays */
enum CBLAS_TRANSPOSE {
CblasNoTrans=111, /* trans='N' */
CblasTrans=112, /* trans='T' */
CblasConjTrans=113}; /* trans='C' */
enum CBLAS_UPLO {
CblasUpper=121, /* uplo ='U' */
CblasLower=122}; /* uplo ='L' */
enum CBLAS_DIAG {
CblasNonUnit=131, /* diag ='N' */
CblasUnit=132}; /* diag ='U' */
enum CBLAS_SIDE {
CblasLeft=141, /* side ='L' */
CblasRight=142}; /* side ='R' */

矩阵存储方案

三种存储方案:

  • 全部存储:比如将矩阵 A 存储到二维数组a中,矩阵元素 Aij 以列优先的方式存储到 a[i+jlda] 中,或者以行优先的形式存储到 a[j+ilda] 中。这里的lda就是数组的引导维度。
  • 压缩存储:用于存储对称阵,埃尔米特矩阵,三角矩阵。对于列优先的布局,上三角和下三角按照列存储到一个一维数组;或者按照行优先的布局,上三角和下三角按行存储到一个一维数组中。
  • 带状存储:带状矩阵被压缩存储到一个二维数组中。对于列优先布局,矩阵的列被存储到对应的数组列中,矩阵对角部分被存储到数组的特殊行中。对于行优先的布局,矩阵的行被存储到对应数组的行中,矩阵对角部分被存储到数组的指定行中。

行优先与列优先

Fortran中以列优先的方式存储二维数组;在C中,需要数组为行优先的格式,这是C的约定。讲道理的话,这句话应该是这样写,但是官方文档给出的英文是
The BLAS routines follow the Fortran convention of storing two-dimensional arrays using column-major layout. When calling BLAS routines from C, remember that they require arrays to be in column-major format, not the row-major format that is the convention for C. Unless otherwise specified, the psuedo-code examples for the BLAS routines illustrate matrices stored using column-major layout.
这里却写着是按照列存储的。但是在Intel® Math Kernel Library Getting Started Tutorial: Using the Intel® Math Kernel Library for Matrix Multiplication中的实例却是这样
这里写图片描述
代码是
这里写图片描述
这个for循环明显是将一行一行的赋值,说明连续存储的单元是行中相邻的元素。但是后面的英文又是
The one-dimensional arrays in the exercises store the matrices by placing the elements of each column in successive cells of the arrays.
意思是联系中的以为数组是将每行列的元素放入到数组单元中。代码明明是每行的元素放入到其中。这到底是按行存储还是按列存储?两篇参考博客介绍行列存储的区别: 行优先和列优先的问题,矩阵存储的两种方式——行优先与列优先。个人感觉,姑且认为是按行存储的吧,毕竟代码是这样写的,虽然与文字不一致。如果有同学有何见解,希望在评论区讨论讨论^_^

Level 1所有函数

所有函数概览

函数名缺失部分描述
cblas_?asums, d, sc, dz向量和
cblas_?axpys, d, c, z标量-向量乘积
cblas_?copys, d, c, z拷贝向量
cblas_?dots,d点乘
cblas_?sdotsd,d双精度点乘
cblas_?dotcc,z共轭点乘
cblas_?dotuc,z非共轭点乘
cblas_?nrm2s,d,sc,dz向量2范数
cblas_?rots,d,cs,zd绕点旋转
cblas_?rotgs,d,c,z生成点的Givens旋转
cblas_?rotms,d点的修正Givens旋转
cblas_?rotmgs,d生成点的修正Givens旋转
cblas_?scals, d, c, z, cs, zd向量-标量乘法
cblas_?swaps, d, c, z向量-向量交换
cblas_i?amaxs, d, c, z绝对值最大元素位置
cblas_i?amins, d, c, z绝对值最小元素位置
cblas_?cabs1s,d辅助函数,计算单精度或者双精度复数的绝对值

cblas_?asum

  • 作用:计算向量元素和
  • 定义函数
float cblas_sasum (const MKL_INT n, const float *x, const MKL_INT incx);
float cblas_scasum (const MKL_INT n, const void *x, const MKL_INT incx);
double cblas_dasum (const MKL_INT n, const double *x, const MKL_INT incx);
double cblas_dzasum (const MKL_INT n, const void *x, const MKL_INT incx);
  • 运算

    计算实数向量的元素和,或者计算复数向量的实部以及虚部的和

    res=|Re(x1)|+|Im(x1)|+|Re(x2|+|Im(x2)|++|Re(xn)|+|Im(xn)|

  • 输入参数

    n : 向量的元素个数

    x : 数组,大小至少是 (1+(n1)abs(incx))

    incx : 指定索引向量 x 的增量

  • 返回值:向量所有元素的和

cblas_?axpy

  • 作用 : 计算向量-标量的积,然后加到结果上
  • 定义函数
void cblas_saxpy (const MKL_INT n, const float a, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);
void cblas_daxpy (const MKL_INT n, const double a, const double *x, const MKL_INT incx, double *y, const MKL_INT incy);
void cblas_caxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
void cblas_zaxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
  • 运算

向量与向量之间的操作

y:=ax+y

  • 输入参数

    n : 指定向量x,y的元素个数

    a : 标量a

    x : 数组,大小至少是(1+(n1)abs(incx))

    incx : 指定索引向量 x 的增量

    y : 数组,大小至少是 (1+(n1)abs(incy))

    incy : 指定索引向量 y 的增量

  • 返回值 : 最终更新得到的向量y

cblas_?copy

  • 作用 : 拷贝一个向量到另一个向量

  • 定义函数

    void cblas_scopy (const MKL_INT n, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);
    void cblas_dcopy (const MKL_INT n, const double *x, const MKL_INT incx, double *y, const MKL_INT incy);
    void cblas_ccopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
    void cblas_zcopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
  • 运算

    拷贝向量 y=x

  • 输入参数

    n : 指定向量x,y的元素个数

    x : 数组,大小至少是(1+(n1)abs(incx))

    incx : 指定索引向量 x 的增量

    y : 数组,大小至少是 (1+(n1)abs(incy))

    incy : 指定索引向量 y 的增量

  • 返回值 : 当n是正数的时候,向量 x 的拷贝被返回,否则参数不变。

cblas_?dot

  • 作用 : 计算向量-向量的点乘

  • 定义函数

    float cblas_sdot (const MKL_INT n, const float *x, const MKL_INT incx, const float *y, const MKL_INT incy);
    double cblas_ddot (const MKL_INT n, const double *x, const MKL_INT incx, const double *y, const MKL_INT incy);
  • 运算 :

    res=i=1nxiyi

  • 输入参数

    n,x,incx,y,incy 分别代表元素个数,数组 x ,数组x的索引增量,数组 y ,数组y的索引增量

  • 返回值 : 返回两个向量的点乘;如果 n<0 ,返回0

cblas_?sdot

  • 作用 : 计算双精度向量-向量的点乘

  • 定义函数

    float cblas_sdsdot (const MKL_INT n, const float sb, const float *sx, const MKL_INT incx, const float *sy, const MKL_INT incy);
    double cblas_dsdot (const MKL_INT n, const float *sx, const MKL_INT incx, const float *sy, const MKL_INT incy);
  • 运算

    ?sdot计算的是两个双精度向量的内积(点积),中间结果的累积是双精度的,但是sdsdot返回的结果是单精度的,使用dsdot可以输出双精度的结果。其中sdsdot为点积结果加一个标量值sb

  • 输入参数

    n : 输入向量x y 的维度

    sb : 内积的单精度缩放值(仅针对sdsdot)

    sx,sy : 数组,包含单精度输入向量

    incx,incy : 两个数组的索引增量

  • 返回值 : 当 n 为正的时候,返回两个数组的点乘(sdsdot结果加一个标量sb);若n0,对于sdsdot返回 sb ,对于dsdot返回0

cblas_?dotc

  • 作用 : 计算一个共轭向量与另一个向量的点积

  • 定义函数

    void cblas_cdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotc);
    void cblas_zdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotc);
  • 运算

    res=i=1nconjg(xi)yi

  • 输入参数

    n,x,incx,y,incy 分别代表元素个数,数组 x 及其索引增量,数组y及其增量

  • 输出 : 如果 n>0 ,输出共轭向量 x 与非共轭向量y的点乘,否则返回0

cblas_?dotu

  • 作用 : 计算复数域的向量-向量的点积

  • 定义函数

    void cblas_cdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotu);
    void cblas_zdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotu);
  • 运算

    res=i=1nxiyi

    其中 xi yi 分别是复数向量 x y的元素

  • 输入参数 : 同上

  • 输出参数 : 如果 n>0 ,返回点积,否则返回0

cblas_?nrm2

  • 作用 : 计算一个向量的欧几里得范数(Euclidean norm)

  • 定义函数

    float cblas_snrm2 (const MKL_INT n, const float *x, const MKL_INT incx);
    double cblas_dnrm2 (const MKL_INT n, const double *x, const MKL_INT incx);
    float cblas_scnrm2 (const MKL_INT n, const void *x, const MKL_INT incx);
    double cblas_dznrm2 (const MKL_INT n, const void *x, const MKL_INT incx);
  • 运算

    res=||x||

  • 输入参数 : 元素个数,数组,索引增量

  • 返回值 : 向量 x 的欧几里得范数

cblas_?rot

  • 作用 : 平面上绕点旋转

  • 定义函数

    void cblas_srot (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float c, const float s);
    void cblas_drot (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double c, const double s);
    void cblas_csrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy, const float c, const float s);
    void cblas_zdrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy, const double c, const double s);
  • 运算

    通俗写法

    [xi,yi]=[xi,yi][cssc]

    官方写法

    xi=cxi+syiyi=cyisxi

  • 输入参数 : 元素个数,两个向量,对应的索引增量, c,s 表示所绕点的坐标标量

  • 输出参数 : x 的每个元素被cx+sy代替, y 的每个元素被cysx代替

cblas_?rotg

  • 作用 : 计算Givens旋转参数

  • 定义函数

    void cblas_srotg (float *a, float *b, float *c, float *s);
    void cblas_drotg (double *a, double *b, double *c, double *s);
    void cblas_crotg (void *a, const void *b, float *c, void *s);
    void cblas_zrotg (void *a, const void *b, double *c, void *s);
  • 运算

    给定一个点的笛卡尔(Cartesian)坐标 (a,b) ,返回参数 c,s,r,z 对应Givens旋转, c,s 对应的是酉阵(unitary matrix),类似于

    [cssc][ab]=[r0]

    参数 z 这样定义 : 如果|a|>|b|,那么 z=s ,否则如果 c0 ,那么 z=1c ,否则 z=1

  • 输入参数 : a,b 分别提供点 p 的横x坐标和纵 y 坐标

  • 输出参数 : Givens的四个参数

cblas_?rotm

  • 作用 : 修正绕平面是一点的Givens旋转

  • 定义函数

    void cblas_srotm (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float *param);
    void cblas_drotm (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double *param);
  • 运算

    给定两个向量x,y,这些向量的每个元素都会被替代为

    [xiyi]=H[xiyi]

    其中 i=1n ,H是修正Givens旋转矩阵,值存储在 parm[1] parm[4]

  • 输入参数

    n,x,incx,y,incy, 分别表示元素个数,两个向量,对应增量索引

    param : 包含五个参数, param[0] 代表切换标志, param[14] 均包含 h11,h12,h21,h22 ,分别对应数组 H 的成分,依据标识符,可以得到如下数组H

    flag=1.0:H=[h11h21h12h22]flag=0.0:H=[1.0h21h121.0]flag=1.0:H=[h111.01.0h22]flag=2.0:H=[1.00.00.01.0]

    后三种情况,矩阵 H 中的0.1,1.0,0.0可以由标志指定,无需在向量中写出来

  • 输出 : x 的每一个向量被h11x[i]+h12y[i]替换, y 的每一个向量被h21x[i]+h22y[i]替换

cblas_?rotmg

  • 作用 : 计算修正Givens旋转的参数

  • 定义函数

    void cblas_srotmg (float *d1, float *d2, float *x1, const float y1, float *param);
    void cblas_drotmg (double *d1, double *d2, double *x1, const double y1, double *param);
  • 运算

    给定输入向量的笛卡尔坐标 (x1,y1) ,计算将结果向量的y置零时候,计算得到的Givens旋转矩阵 H

    [x10]=H[x1d1y1d2]

  • 输入参数

    d1 代表向量的 x 轴缩放因子,d2代表向量的y轴缩放因子, x1,y1 是输入向量的横纵坐标

  • 输出

    d1 是更新矩阵的第一对角元

    d2 是更新矩阵的第二对角元

    x1 是缩放之前旋转向量的x坐标

    param 同上cblas_?rotmg的输入 parma 一样

cblas_?scal

  • 作用 : 计算向量和标量的乘积

  • 定义函数

    void cblas_sscal (const MKL_INT n, const float a, float *x, const MKL_INT incx);
    void cblas_dscal (const MKL_INT n, const double a, double *x, const MKL_INT incx);
    void cblas_cscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx);
    void cblas_zscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx);
    void cblas_csscal (const MKL_INT n, const float a, void *x, const MKL_INT incx);
    void cblas_zdscal (const MKL_INT n, const double a, void *x, const MKL_INT incx);
  • 运算

    x=ax

  • 输入参数

    n 向量的元素个数,a标量, x 数组,incx向量x的索引增量

  • 输出 : 更新后的向量 x

cblas_?swap

  • 作用 : 交换向量值

  • 定义函数

    void cblas_sswap (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy);
    void cblas_dswap (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy);
    void cblas_cswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy);
    void cblas_zswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy);
  • 计算:交换向量x y ,互相代替元素值

  • 输入参数 : 正常的五个输入,元素个数,数组,增量索引

  • 输出 : 交换后的向量x,y

cblas_i?amax

  • 作用 : 找到绝对值最大的元素的索引

  • 定义函数

    CBLAS_INDEX cblas_isamax (const MKL_INT n, const float *x, const MKL_INT incx);
    CBLAS_INDEX cblas_idamax (const MKL_INT n, const double *x, const MKL_INT incx);
    CBLAS_INDEX cblas_icamax (const MKL_INT n, const void *x, const MKL_INT incx);    
    CBLAS_INDEX cblas_izamax (const MKL_INT n, const void *x, const MKL_INT incx);
  • 计算 : 给定向量 x ,函数i?amax返回实数域中绝对值最大的向量元素x[i]的位置,或者返回复数域 |Re(x[i])|+|Im(x[i])| 和的最大值

    如果 n 非正,则返回

    如果向量中有好几个位置的值等于最大元素,第一个位置将被返回

  • 输入参数 : n,x,incx分别代表向量元素个数,数组,索引增量

  • 返回值 : 返回最大值元素的位置,比如 x[index1] 具有最大的绝对值

cblas_i?amin

  • 作用 : 返回最小值的位置

  • 定义函数

    CBLAS_INDEX cblas_isamin (const MKL_INT n, const float *x, const MKL_INT incx);
    CBLAS_INDEX cblas_idamin (const MKL_INT n, const double *x, const MKL_INT incx);
    CBLAS_INDEX cblas_icamin (const MKL_INT n, const void *x, const MKL_INT incx);
    CBLAS_INDEX cblas_izamin (const MKL_INT n, const void *x, const MKL_INT incx);
  • 计算 : i?amin返回的是向量的最小绝对值的位置。与i?amax类似

  • 输入参数: 同i?amax

  • 返回值: 绝对值最小元素位置的索引,比如 x[index1] 具有最小的绝对值

cblas_?cabs1

  • 作用: 计算复数的绝对值,是一个辅助函数,用于辅助其它函数的实现

  • 定义函数

    float cblas_scabs1 (const void *z);
    double cblas_dcabs1 (const void *z);
  • 计算

    res=|Re(z)|+|Im(z)|

  • 输入: 标量 z

  • 返回值: 复数z的绝对值


http://chatgpt.dhexx.cn/article/Tj4j5F87.shtml

相关文章

mkl简介

一、概况 &#xff08;一&#xff09;下载 下载免费版本&#xff0c;注意保留serial number&#xff08;安装需要&#xff09; &#xff08;二&#xff09;安装 编辑silent.cfg 文件中的选项安装需要2G的空间&#xff0c;默认的tmp空间不足使用**–tmp_dir**指定 ./instal…

如何解决kaldi的依赖库mkl安装失败的问题

最近在学习如何使用kaldi进行语音识别。按照进程进行安装部署时发现Intel MKL库总是失败。 通过搜索大量的资料&#xff0c;但都发现不太适用。现在将失败的症状和解决方法分享一下&#xff0c;希望能给读者提供一些帮助。 通过执行 ./check_dependencies.sh 发现缺少Intel M…

oneKey mkl安装

1、oneKey mkl核心安装 进入官方下载地址&#xff0c;采用离线安装方式 1&#xff09;选择离线安装 2&#xff09;可以直接点击“download”下载安装包后再解压安装&#xff08;此种方式需要注册帐号&#xff0c;比较麻烦&#xff0c;介意选择下面的命令行安装&#xff09; …

Linux下MKL库的安装部署与使用,并利用cmake编译器调用MKL库去提升eigen库的计算速度

文章目录 前言一、MKL库的下载二、MKL库的安装与配置1.MKL库的安装与配置2.代码测试 总结 前言 在用C/C编写模型预测控制算法(MPC)的代码时候&#xff0c;由于预测步长和控制步长的设置较大&#xff0c;导致在利用eigen库进行矩阵计算的时候&#xff0c;矩阵n次幂计算时间过长&…

mysql 报1055错误_MySQL数据库报1055错误

有点坑啊&#xff0c;当初装MySQL数据库的时候没有整配置文件&#xff0c;结果MySQL报1055错误的时候&#xff0c;网上的解决办法都说如果需要永久生效的话&#xff0c;只能通过改配置文件实现&#xff0c;but&#xff0c;我没有配置文件&#xff0c;蜜汁尴尬啊 1、已安装的MyS…

mysql运行sql错误1055_sql数据库执行错误代码1055怎么解决?

展开全部 错误代码1055。不过看了Expression里面的原因描述,我基本知道怎么回事了。原因是因为62616964757a686964616fe59b9ee7ad9431333431373139mysql中对 group by 用法的规定。严格意义上说,就是group by之后。select 的字段只能是group by的字段。或者需要加聚合函数的。…

FOJ 1055

一&#xff0c;题目链接 http://acm.fzu.edu.cn/problem.php?pid1055 二&#xff0c;题目描述 三&#xff0c;题目分析 1.程序段的格式是已知的&#xff0c;一行为三个字符&#xff0c;且中间是赋值运算符&#xff0c;只需用一个数组记录字符是否 是已知的&#xff08;查表法…

MYSQL数据库报错 1055

MYSQL数据库报错 1055 今天在做毕业设计&#xff0c;当点开要查看的视图的时候&#xff0c;爆出了1055的错&#xff0c;该错误如下&#xff1a; 错误原因&#xff1a;在MySQL5.7之后&#xff0c;sql_mode中默认存在ONLY_FULL_GROUP_BY&#xff0c;SQL语句未通过ONLY_FULL_GRO…

leetcode1055

暴力查询即可&#xff0c;外面一层遍历target字符串&#xff0c;内层对source进行遍历&#xff0c;直到当前的内层遍历source中已无可匹配字符&#xff0c;在进行下一次source遍历&#xff0c;直到外层遍历结束。最终统计进行了几次内层遍历。 优化的方法&#xff1a;将内层遍历…

Mysql报错1055

Mysql group by报错 1055 [Err] 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘xm_xhd.al.dy_uid’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_…

MySQL 报错1055

一、问题描述 SELECT * FROM tbluser GROUP BY sex当我以这条语句进行数据库查询的时候&#xff0c;报了个错&#xff1a; > 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ceb.tbluser.uid which is not functiona…

mac mysql 1055_MySQL错误1055

问题描述:在MySQL数据库下,执行SQL插入语句报错。错误信息如下: 错误原因:在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。 ONLY_FULL_GROUP_BY:ONLY_FULL_GROUP_BY要求select语句中查询出来的列必须是明确的(…

MySQL 错误代码:1055 解决方案(推荐!!)

MySQL 错误代码:1055 解决办法 一、 MySQL版本二、 问题描述1. 问题描述2.ONLY_FULL_GROUP_BY-SQL示例 三、解决办法1.方法一2.方法二&#xff08;临时&#xff09;3.方法三&#xff08;永久&#xff09; 四、sql_mode常用值 一、 MySQL版本 MySQL版本&#xff1a;8.0.11 二、…

MySQL 出现1055错误 this is incompatible with sql mode=only full group by 的解决办法

文章目录 一、打开MySQL8.0 Command Line Client二、找到MySQL的my.ini文件路径三、修改my.ini里面的内容 前言 在学习过程中出现的问题&#xff1a;IDEA与Navicat出现不兼容的情况 会弹出1055的错误&#xff0c;这种错误通常在mysql 5.7以上的版本才会出现 1055 Expression #…

MySQL查询出现1055错误的解决方法

当SQL语句查询报1055错误时的解决方法 报错内容如下 报错原因 1.SQL语句中使用了group by&#xff0c;并且不需要分组的字段没有加上any_value()函数 2.MySQL数据库版本是大于5.7&#xff0c;报错信息中最后有一句sql_modeONLY_FULL_GROUP_BY&#xff0c;是因为MySQL数据库的…

1055 习题4-9-3 逆序输出正整数各位上数字

题目描述 输入一个不多于5位的正整数&#xff0c;按逆序输出各位上的数字&#xff0c;末尾换行。 注意&#xff1a;确保输入的正整数的位数不多于5。 输入 一个不多于5位的正整数。 输出 逆序输出各位上的数字&#xff0c;中间以空格分隔。 注意末尾的换行。 样例输入 2143 样…

IDEA破解后老是出现agent弹窗问题

第一步&#xff1a;在1这个路径下早到2这个文件 2.用解压软件提取2这个文件META-INF里面的important.txt放到上面1这个目录下&#xff08;这里使用的是7z解压&#xff09;

Intellij IDEA 破解方法和地址

IntelliJ IDEA是来自捷克的Jetbrains公司开发的Java开发工具(完爆Eclipse/MyEclipse)。有旗舰版和社区版两大版本&#xff0c;相对社区版而言旗舰版的功能更加丰富。官网提供了两个版本之间差异的详细比较。擅长企业级应用、移动应用以及Web应用开发。 支持MacOS,Windows7,Lin…

idea破解办法

在安装后启动的时候&#xff0c;Activate new license with选择License server&#xff0c;填上http://idea.iteblog.com/key.php&#xff0c;如图所示&#xff1a; 点击Activate&#xff0c;然后就搞定了。

Intellij idea破解以及运行优化

Intellij idea破解以及运行优化 idea 破解&#xff1a; 方式一&#xff1a;服务器破解&#xff0c;这种方式比较快速&#xff0c;但是很不稳定&#xff0c;所以不推荐 方式二&#xff1a;在校学生或者教师都可以免费申请&#xff0c;申请网址&#xff1a;https://www.jetbrain…