标签: increment

使用SQL Server 2008中的MAX + 1整数避免并发问题...制作自己的IDENTITY值

我需要在SQL Server 2008列中增加一个整数.

听起来我应该使用一个IDENTITY列,但我需要为每个客户增加单独的计数器.想想一个电子商务网站,每个客户都会从1开始获取自己的递增订单号.这些值必须是唯一的(每个客户).

例如,

Customer1  (Order #s 1,2,3,4,5...)
Customer2  (Order #s 1,2,3,4,5...)
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我需要手动完成SQL identity函数的工作,因为客户数量是无限的,我需要order #每个客户的计数器.

我很自在地做:

BEGIN TRANSACTION
  SELECT @NewOrderNumber = MAX(OrderNumber)+1 From Orders where CustomerID=@ID
  INSERT INTO ORDERS VALUES (@NewOrderNumber, other order columns here)
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

我的问题是锁定和并发问题,并确保一个独特的价值.看来我们需要锁定TABLOCKX.但这是一个高容量的数据库,Orders每次我需要执行一个SELECT MAX+1进程并插入一个新的订单记录时,我不能只锁定整个表.

但是,如果我不锁定整个表格,那么我可能无法为该客户获得唯一的价值.由于我们的一些订单输入是通过多线程Windows进程批量完成的,因此有两个操作可能同时要为同一客户插入新订单.

那么什么锁定方法或技术将避免死锁,仍然让我维持PER客户的唯一递增订单数量?

sql identity locking increment max

18
推荐指数
3
解决办法
2万
查看次数

为什么INC和DEC指令*不影响进位标志(CF)?

为什么x86指令INC(递增)和DEC(递减)不影响CFFLAGSREGISTER中的(进位标志)?

x86 assembly flags increment decrement

18
推荐指数
2
解决办法
1万
查看次数

javascript中++和+ = 1之间的差异

有人可以解释为什么以下函数会给出不同的结果.第一个似乎不起作用,但第二个确实有效.我很困惑,因为我认为+ = 1而且++做了同样的事情.

(我不打算实际使用这段代码,只是为了证明这一点).

/*function 1*/
function incrementIfZero1(base,element) {

    if (element == 0) {
        return base++;
    }
    else
    {
        return base;
    }
};


/*function 2*/
function incrementIfZero2(base,element) {

    if (element == 0) {
        return base+=1;
    }
    else
    {
        return base;
    }
};

incrementIfZero1(1,0) /* -> 1*/
incrementIfZero2(1,0) /* -> 2*/
Run Code Online (Sandbox Code Playgroud)

很感谢任何形式的帮助.

谢谢,

知更鸟

[编辑:]

谢谢你的回复,现在有道理了.我也尝试了以下语句,结果与函数1相同:

return (base++)
Run Code Online (Sandbox Code Playgroud)

我现在感到惊讶的是,这并没有给出与函数2相同的结果 - 我希望括号在返回之前"强制"它被评估.知道为什么不是这样吗?

javascript increment

18
推荐指数
4
解决办法
1万
查看次数

评估顺序和未定义的行为

在C++ 11标准的上下文中(不再有序列点的概念,如您所知),我想了解如何定义两个最简单的示例.

int i = 0;

i = i++;   // #0

i = ++i;   // #1
Run Code Online (Sandbox Code Playgroud)

SO上有两个主题可以解释C++ 11环境中的这些示例.这里据说#0调用UB并且#1定义明确.这里有人说,这两个例子是不确定的.这种模棱两可让我很困惑.我已经三次读过这个结构良好的参考文献,但这个主题似乎对我来说太复杂了.

.

让我们分析一下这个例子#0:i = i++;.

相应的报价是:

  • 内置后增量和后减量运算符的值计算在其副作用之前进行排序.

  • 内置赋值运算符和所有内置复合赋值运算符的副作用(左参数的修改)在左右参数的值计算(但不是副作用)之后排序,并在之前排序赋值表达式的值计算(即,在返回对修改对象的引用之前)

  • 如果相对于同一标量对象的另一个副作用,标量对象的副作用未被排序,则行为未定义.

当我得到它时,赋值运算符的副作用没有按其左右参数的副作用排序.因此,赋值运算符的副作用没有按副作用排序i++.所以#0调用一个UB.

.

让我们分析一下这个例子#1:i = ++i;.

相应的报价是:

  • 内置preincrement和predecrement运算符的副作用在其值计算之前被排序(由于定义为复合赋值的隐式规则)

  • 内置赋值运算符和所有内置复合赋值运算符的副作用(左参数的修改)在左右参数的值计算(但不是副作用)之后排序,并在之前排序赋值表达式的值计算(即,在返回对修改对象的引用之前)

  • 如果相对于同一标量对象的另一个副作用,标量对象的副作用未被排序,则行为未定义.

我看不出,这个例子是怎样的#0.对于我而言,这似乎是一个UB,原因与此相同#0.分配的副作用没有按照副作用排序++i.它似乎是一个UB.上面讨论的主题说它定义明确.为什么?

.

问题:如何应用引用规则来确定示例的UB.一个尽可能简单的解释将不胜感激.谢谢!

c++ increment sequence undefined-behavior c++11

18
推荐指数
2
解决办法
914
查看次数

mysql update increment int字段为null

我有一个非常大的表,有两个INT列,默认为null.这是一个问题,因为它们是INT字段,如果它们最初设置为0,在许多情况下会有所帮助.

所以我的问题是,有没有一种方法可以更新和增加(+1)这些字段,而它们是这样的(默认值为null)?BTW ..到目前为止我没有运气,似乎增量仅在默认值= 0时有效

..or是我唯一的选择,将默认值从null更改为无

mysql null increment

17
推荐指数
1
解决办法
8957
查看次数

函数的增量被+ =覆盖

在三元运算符中调用的方法递增变量并返回布尔值.当函数返回false时,将还原该值.我期望变量为1但是变为0.为什么?

public class Main {
    public int a=0;//variable whose value is to be increased in function
    boolean function(){
        a++;
        return false;
    }
    public static void main(String argv[]){
        Main m=new Main();
        m.a+=(m.function()?1:0);
        System.out.println(m.a);//expected output to be 1 but got a 0 !!!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

java increment variable-assignment ternary

17
推荐指数
2
解决办法
784
查看次数

在laravel中增加列

有没有办法在laravel中增加多个列?

让我们说:

DB::table('my_table')
->where('rowID', 1)
->increment('column1', 2)
->increment('column2', 10)
->increment('column3', 13)
->increment('column4', 5);
Run Code Online (Sandbox Code Playgroud)

但结果是:

Call to a member function increment() on integer

我只想找到一种使用laravel中给定函数执行此操作的有效方法.谢谢.任何建议都可以.

php mysql increment laravel

16
推荐指数
5
解决办法
2万
查看次数

在For循环增量中使用if else

我在Java中有一个问题:

给定一个字符串,返回由索引0,1,4,5,8,9处的字符组成的字符串...

我知道如何解决它,但是我想知道我是否可以使用if-elsefor循环增量本身,例如:

for (int i=0; i < str.length(); if (i%4==0) i++, else i+=3){
    result += str.charAt(i);
}
Run Code Online (Sandbox Code Playgroud)

我们可以这样做吗?

java for-loop if-statement increment

15
推荐指数
3
解决办法
4037
查看次数

使用正则表达式搜索并替换以增加 Visual Studio Code 中的数字

我目前正在制作一个大型 svg 精灵。不同的图像始终相距 2000 像素。

我所拥有的是:

<g transform="translate(0,0)">
<g transform="translate(0,2000)">
<g transform="translate(0,4000)">
Run Code Online (Sandbox Code Playgroud)

在正则表达式想要这个之后,只需将 2000 添加到第二个数字上:

<g transform="translate(0,2000)">
<g transform="translate(0,4000)">
<g transform="translate(0,6000)">
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是,一些新图像必须放在文档的顶部,这意味着我需要更改所有数字,而且它们相当多。

我正在考虑使用正则表达式,甚至发现它可以在 VS Code 的搜索栏中使用。问题是我从未使用过任何正则表达式,我有点困惑。

有人能给我一个解决方案并解释一下将所有样本数增加 2000 吗?我希望我之后能理解它,这样我就可以涉足这个话题了。我也很高兴只提供一般教程或我的特定用例的链接。

非常感谢 :)

regex search replace increment visual-studio-code

15
推荐指数
1
解决办法
2万
查看次数

++ i C#和C++中的运算符差异

我有以下用C++和C#编写的代码

 int i=0;
 ++i = 11;
Run Code Online (Sandbox Code Playgroud)

在此C#编译器带来错误之后

The left-hand side of an assignment must be a variable, property or indexer
Run Code Online (Sandbox Code Playgroud)

但C++编译器生成此代码没有错误,我得到了11值的结果i.这种差异的原因是什么?

c# c++ int increment language-specifications

14
推荐指数
3
解决办法
1074
查看次数