Mysql 用于按1更新多列的sql查询

Mysql 用于按1更新多列的sql查询,mysql,Mysql,我想为范围内的某些列(唯一)行的值增加1,并运行此命令 update policy set ORDERNUMBER = ORDERNUMBER +1 where ORDERNUMBER between 3 and 5 但它会抛出重复输入错误。但如果查询完全运行,则不会出现重复 ORDERNUMBER 1 2 3 4 5 我想在询问后回答: ORDERNUMBER 1 2 4 5 6 尝试切换5和3,使其显示: update policy set ORDERNUMBER = ORDERNUM

我想为范围内的某些列(唯一)行的值增加1,并运行此命令

update policy set ORDERNUMBER = ORDERNUMBER +1 where ORDERNUMBER between 3 and 5
但它会抛出重复输入错误。但如果查询完全运行,则不会出现重复

ORDERNUMBER
1
2
3
4
5
我想在询问后回答:

ORDERNUMBER
1
2
4
5
6

尝试切换5和3,使其显示:

update policy set ORDERNUMBER = ORDERNUMBER +1 where ORDERNUMBER between 3 and 5
更新:
ORDERNUMBER似乎具有唯一的约束。不能简单地向其中添加一行,因为这样它将与另一行具有相同的值。使用这样的查询无法轻松完成此操作。

正如Pete所说,使用uniqe constaint列无法完成此操作,因此请删除或禁用它,而不是创建自己的查询;在我的场景中,我会这样处理:

 try {
            $dbObject = Connection::getConnection();
            $request = $dbObject->dbh->prepare($sqlForOrderNum);
            $request->execute();
            $currentorder = $request->fetchColumn();
            if ($currentorder >= $policyObject->getOrdernumber())
                $sql = "update policy set ORDERNUMBER = ORDERNUMBER +1 where ORDERNUMBER BETWEEN " . $policyObject->getOrdernumber() . " and $currentorder-1" . $sql;
            else
                $sql = "update policy set ORDERNUMBER = ORDERNUMBER -1 where ORDERNUMBER BETWEEN  $currentorder+1 and " . $policyObject->getOrdernumber() . $sql;
            $request = $dbObject->dbh->prepare($sql);
            $request->bindParam(':id', $policyid, PDO::PARAM_INT);
            $request->bindParam(':policyname', $policyObject->getPolicyName(), PDO::PARAM_STR);
            $request->bindParam(':remark', $policyObject->getRemark(), PDO::PARAM_STR);
            $request->bindParam(':access', $policyObject->getAccess(), PDO::PARAM_STR);
            $request->bindParam(':enablelog', $policyObject->getEnableLog(), PDO::PARAM_STR);

5和3之间没有任何东西。但是有3到5之间的数字。我现在明白了,但是列是唯一的,所以只剩下一个点。。实现这一点的简单方法:)插入策略(ORDERNUMBER)值(NULL);按订单号限制1从策略订单中删除;然后认为重复enry错误导致唯一常数:)ordernumber为唯一重复enty错误。它与Interween查询相同,但列具有常量