Mysql确定更新是否找到行(即使未更改)

Mysql确定更新是否找到行(即使未更改),mysql,sql,Mysql,Sql,我希望能够返回更新后找到的行数,即使行没有更改。我本以为可以使用row_count(),但是,它返回实际更改的行数。例如,如果我对一行执行更新,而该行存在但没有更改,则row_count()返回0。如果行不存在,它也可以返回0。我特别感兴趣的是更新使用唯一键,因此更新0行或1行 有没有一种简单的方法可以在更新后获取找到的行数 下面的一些答案描述了如何在使用php或java时做到这一点,但如何在存储过程本身中做到这一点(换句话说,如果不使用java和php)在 MYSQLI\u CLIENT\u找

我希望能够返回更新后找到的行数,即使行没有更改。我本以为可以使用row_count(),但是,它返回实际更改的行数。例如,如果我对一行执行更新,而该行存在但没有更改,则row_count()返回0。如果行不存在,它也可以返回0。我特别感兴趣的是更新使用唯一键,因此更新0行或1行

有没有一种简单的方法可以在更新后获取找到的行数

下面的一些答案描述了如何在使用php或java时做到这一点,但如何在存储过程本身中做到这一点(换句话说,如果不使用java和php)

MYSQLI\u CLIENT\u找到的行数
返回
匹配行数,而不是受影响行数

对于java

根据JDBC规范,executeUpdate()或execute()后跟
getUpdateCount()将返回匹配的、未更新的行数

对于Java中的存储过程调用,可以使用

public static void executeUpdateStoredProcedure(Connection con) {
    try {
          CallableStatement cstmt = con.prepareCall("{calldbo.UpdateTestTable(?, ?)}");
          cstmt.setString(1, "A");
          cstmt.setInt(2, 100);
          cstmt.execute();
          int count = cstmt.getUpdateCount();
          cstmt.close();

          System.out.println("ROWS AFFECTED: " + count);
    }
    catch (Exception e) {
          e.printStackTrace();
    }
}
可在

MYSQLI\u CLIENT\u找到的行数
返回
匹配行数,而不是受影响行数

对于java

根据JDBC规范,executeUpdate()或execute()后跟
getUpdateCount()将返回匹配的、未更新的行数

对于Java中的存储过程调用,可以使用

public static void executeUpdateStoredProcedure(Connection con) {
    try {
          CallableStatement cstmt = con.prepareCall("{calldbo.UpdateTestTable(?, ?)}");
          cstmt.setString(1, "A");
          cstmt.setInt(2, 100);
          cstmt.execute();
          int count = cstmt.getUpdateCount();
          cstmt.close();

          System.out.println("ROWS AFFECTED: " + count);
    }
    catch (Exception e) {
          e.printStackTrace();
    }
}
可在

MYSQLI\u CLIENT\u找到的行数
返回
匹配行数,而不是受影响行数

对于java

根据JDBC规范,executeUpdate()或execute()后跟
getUpdateCount()将返回匹配的、未更新的行数

对于Java中的存储过程调用,可以使用

public static void executeUpdateStoredProcedure(Connection con) {
    try {
          CallableStatement cstmt = con.prepareCall("{calldbo.UpdateTestTable(?, ?)}");
          cstmt.setString(1, "A");
          cstmt.setInt(2, 100);
          cstmt.execute();
          int count = cstmt.getUpdateCount();
          cstmt.close();

          System.out.println("ROWS AFFECTED: " + count);
    }
    catch (Exception e) {
          e.printStackTrace();
    }
}
可在

MYSQLI\u CLIENT\u找到的行数
返回
匹配行数,而不是受影响行数

对于java

根据JDBC规范,executeUpdate()或execute()后跟
getUpdateCount()将返回匹配的、未更新的行数

对于Java中的存储过程调用,可以使用

public static void executeUpdateStoredProcedure(Connection con) {
    try {
          CallableStatement cstmt = con.prepareCall("{calldbo.UpdateTestTable(?, ?)}");
          cstmt.setString(1, "A");
          cstmt.setInt(2, 100);
          cstmt.execute();
          int count = cstmt.getUpdateCount();
          cstmt.close();

          System.out.println("ROWS AFFECTED: " + count);
    }
    catch (Exception e) {
          e.printStackTrace();
    }
}

我非常确定以下内容将返回一个值为的变量:

update t
    set col = if(@rn := coalesce(@rn, 0) + 1, newval, newval)
    where . . .;

无论值是否更改,
if()
函数都需要在更新之前进行求值。

我非常确定以下内容将返回一个带值的变量:

update t
    set col = if(@rn := coalesce(@rn, 0) + 1, newval, newval)
    where . . .;

无论值是否更改,
if()
函数都需要在更新之前进行求值。

我非常确定以下内容将返回一个带值的变量:

update t
    set col = if(@rn := coalesce(@rn, 0) + 1, newval, newval)
    where . . .;

无论值是否更改,
if()
函数都需要在更新之前进行求值。

我非常确定以下内容将返回一个带值的变量:

update t
    set col = if(@rn := coalesce(@rn, 0) + 1, newval, newval)
    where . . .;


无论值是否更改,
if()
函数都需要在更新之前进行评估。

为什么不在更新之前运行查询,并计算与条件匹配的行数?在之前运行查询应该在mysql中起作用,但我希望避免运行额外的查询。另外,如果autocommit为true,则可以在更新之前删除该行,因此需要启动事务,然后查询将阻止后续更新。为什么不在更新之前运行查询并计算符合条件的行数?在更新之前运行查询应该在mysql中起作用,但我想避免运行额外的查询。另外,如果autocommit为true,则可以在更新之前删除该行,因此需要启动事务,然后查询将阻止后续更新。为什么不在更新之前运行查询并计算符合条件的行数?在更新之前运行查询应该在mysql中起作用,但我想避免运行额外的查询。另外,如果autocommit为true,则可以在更新之前删除该行,因此需要启动事务,然后查询将阻止后续更新。为什么不在更新之前运行查询并计算符合条件的行数?在更新之前运行查询应该在mysql中起作用,但我想避免运行额外的查询。另外,如果autocommit为true,那么可以在更新之前删除该行,因此需要启动事务,然后查询将阻止后续更新。据我所知,如果列的新旧值相同,MySQL不会在物理上更改任何内容。我不认为“隐藏”表达式后面的值可以解决这个问题。据我所知,如果列的新旧值相同,MySQL不会在物理上改变任何东西。我不认为“隐藏”表达式后面的值可以解决这个问题。据我所知,如果列的新旧值相同,MySQL不会在物理上改变任何东西。我不认为“隐藏”表达式后面的值可以解决这个问题。据我所知,如果列的新旧值相同,MySQL不会在物理上改变任何东西。我不认为“隐藏”表达式后面的值可以解决这个问题。我不使用Php。您希望在存储过程中或使用JavaJDBC执行此操作。我想知道它在封面下做了什么?是的,你对java的看法是正确的。我刚测试过。我仍在想如何在存储过程中实现这一点。我对它进行了升级检查,但我仍在等待了解如何在存储过程中实现这一点。换句话说,在存储过程中执行更新后调用select row_count(),我不使用Php。想这样做吗