标签: auto-increment

你可以在MySql中使用自动增量而不是主键

我使用GUID作为我所有其他表的主键,但我有一个需要增加数字的要求.我尝试使用自动增量在表中创建一个字段,但MySql抱怨它需要是主键.

我的应用程序使用MySql 5,nhibernate作为ORM.

我想到的可能的解决方案是:

  • 将主键更改为自动增量字段,但仍将Id作为GUID,以便我的应用程序的其余部分保持一致.

  • 使用GUID和自动增量字段创建复合键.

我现在的想法是倾向于复合的关键想法.

编辑:行ID(主键)是当前的GUID.我想添加一个自动增量的INT字段,以便它是人类可读的.我只是不想放弃使用GUID作为主键的应用程序中的当前标准.

mysql sql nhibernate primary-key auto-increment

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

MySQL current_insert_id()?(不是last_insert_id())

我正在插入一个带有char列的行,用于基于(除其他外)行的自动id之外的哈希.

我知道我可以插入它,获取insert_id,计算哈希值并更新它.

有没有人知道在单个查询中执行此操作的方法?插入时需要插入行insert_id.那是完全不可能的,还是有类似current_insert_id()的东西......

谢谢!

mysql insert-id auto-increment

3
推荐指数
1
解决办法
3399
查看次数

自动增量语法错误

Sybase手册和大量示例声称我可以写:

   create table run_log (
     run_id        integer not null default autoincrement
   );
Run Code Online (Sandbox Code Playgroud)

但Sybase 15表示存在语法错误 default

syntax auto-increment sybase-ase

3
推荐指数
1
解决办法
6663
查看次数

SQL - 将密钥并发插入表中

可能是一个微不足道的问题,但我希望得到最好的解决方案.

问题:

我有两个或更多工作人员将密钥插入一个或多个表.当两个或多个工作人员试图同时将同一个密钥插入其中一个密钥表时,就会出现问题.典型的问题.

  1. 如果存在密钥,则Worker A读取表(SELECT).没有钥匙.
  2. 如果存在键,则Worker B读取表(SELECT).没有钥匙.
  3. 工人A插入密钥.
  4. 工人B插入密钥.
  5. 工人A承诺.
  6. 工人B承诺.由于违反了唯一约束,因此抛出异常

关键表是简单的对.第一列是自动递增整数,第二列是varchar键.

这种并发问题的最佳解决方案是什么?我认为这是一个常见的问题.一种可靠的方法是处理抛出的异常,但不知何故我不相信这是解决这个问题的最佳方法.

我使用的数据库是Firebird 2.5

编辑:

一些额外的信息,以使事情清楚.

  1. 客户端同步不是一种好方法,因为插入来自不同的进程(工作者).而且有一天我可以让工人穿过不同的机器,所以即使是互斥也是不行的.
  2. 这种表的主键和第一列是自动增量字段.没问题.varchar字段是问题,因为它是客户端插入的东西.

典型的这种表是用户表.例如:

1  2056
2  1044
3  1896
4  5966
...

每个工作人员检查用户"xxxx"是否存在,如果不存在则插入.

编辑2:

仅供参考,如果有人会走相同的路线.IB/FB返回错误代码对(我正在使用InterBase Express组件).检查重复值违规是这样的:

except
  on E: EIBInterBaseError do
  begin
    if (E.SQLCode = -803) and (E.IBErrorCode = 335544349) then
    begin
      FKeysConnection.IBT.Rollback;
      EnteredKeys := False;
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

sql delphi concurrency firebird auto-increment

3
推荐指数
1
解决办法
2002
查看次数

如何从mysql中的值以外的值开始自动增加列值?

我有一个现有的mysql表,其id列定义为primary,并且auto-increment设置为true.现在,我想知道我是否可以将自动增量设置为从预定义值开始,例如5678,而不是从1开始.

我还想知道我是否可以设置自动递增的步骤,比如每个新记录插入增加15(而不是默认增量值1).

注意 - 我使用phpmyadmin来玩数据库,我有很多表但只有一个数据库.

谢谢.

php mysql default auto-increment

3
推荐指数
1
解决办法
2556
查看次数

重新索引MySQL INT主键并重置AUTO_INCREMENT

所以我有一个MySQL数据库,我正在使用PHP网站.在几周的发展过程中,我留下了类似的东西:

Table: users

id  | name
-----------
  12| Bob
  34| Jen
 155| John
 154| Kyle
Run Code Online (Sandbox Code Playgroud)

除此之外,还有数百条记录,而且数以千计.

我正在寻找一个脚本,我可以运行将键重命名为最低值(保留各自的行),然后重置AUTO_INCREMENT为下一个id

期望的输出是:

Table: users

id  | name
-----------
   1| Bob
   2| Jen
   3| Kyle
   4| John
Run Code Online (Sandbox Code Playgroud)

ALTER TABLE users AUTO_INCREMENT = 5;

(通知KyleJohn)

我意识到我必须修复任何引用它的东西users.id.

有没有人知道在MySQL或PHP脚本中这样做的方法?

php mysql database auto-increment

3
推荐指数
1
解决办法
1284
查看次数

即使插入因错误而失败,MySQL自动增量值也会增加

当我从用户那里收到数据时,我每次都会验证输入的格式(PHP).我唯一无法验证(或者我不想)的是约束(例如外键)违规.我让DML引发错误并且数据库驱动程序抛出异常.在捕获它之后,我只是通过MySQL的错误代码打印出一些错误消息.

问题是,即使插入失败,我看到autoincrement序列仍然增长,增加.我怎么能防止这种情况?

mysql sql auto-increment

3
推荐指数
1
解决办法
2594
查看次数

具有多个自动增量列的Mysql表

我有一个具有以下结构的表:

 id |  number |  text
----------------------
  1 |    1    |  test
Run Code Online (Sandbox Code Playgroud)

其中,id是我的主键,具有自动增量值.我想将数字作为自动增量值.是否可以在一个表中包含多个自动增量列?

mysql auto-increment

3
推荐指数
1
解决办法
8566
查看次数

使用子查询mysql在同一个表中更改auto_increment

我正在使用mysql.我有一个带auto_increment计数器集的数据库表.现在因为要求我需要离开100个ID并从101开始移动所有现有记录,所以当前id 1将变为101,id 2将变为102,依此类推.

我能够将记录移动到101,但问题是如何将auto_increment计数器更改为max(id)+1.

这里的主要约束是我需要在单个sql语句中执行它.我无法使用@counter保存该值并在以后使用它.

我尝试使用以下查询

ALTER TABLE role AUTO_INCREMENT = (SELECT rd.counter FROM (SELECT (MAX(id) + 1) AS counter FROM role r) rd);
Run Code Online (Sandbox Code Playgroud)

但它没有用.

mysql auto-increment

3
推荐指数
1
解决办法
1705
查看次数

Bash:每次运行该脚本时,都会从脚本中增加一个变量

我希望每次运行该脚本时,脚本中的变量都会递增.像这样的东西:

#!/bin/bash    
n=0   #the variable that I want to be incremented
next_n=$[$n+1]
sed -i "2s/.*/n=$next_n/" ${0}
echo $n
Run Code Online (Sandbox Code Playgroud)

我会完成这项工作,但如果我在设置变量的行之前将其他行添加到脚本中并且忘记更新该行,那就不太好了sed -i "2s/.*/n=$next_n/" ${0}.

另外,我更喜欢不使用另一个保存变量值的文件.

其他一些想法?

bash increment auto-increment

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