标签: auto-increment

如何从SQLServer SELECT语句返回新的IDENTITY列值?

我正在插入带有自动增量键字段的SQLServer表.(我相信这在SQLServer中称为IDENTITY列.)

在Oracle中,我可以使用RETURNING关键字为我的INSERT语句提供一个结果集,就像SELECT查询一样,它将返回生成的值:

INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;
Run Code Online (Sandbox Code Playgroud)

如何在SQLServer中完成此操作?

额外奖励:好的,到目前为止答案很好,但如果可能的话,如何将其写入单一陈述?:)

sql t-sql sql-server identity auto-increment

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

在PostgreSQL中生成自动递增主键的可接受方法是什么?

没有序列和触发器,没有简单的方法可以做到这一点吗?我有平均的SQL技能,我想使用pl/sql(PostgreSQL)的行业标准方法.我基本上是从Spring Security转换这个示例表:

create table group_members (
    id bigint generated by default as identity(start with 0) primary key,
    username varchar(50) not null,
    group_id bigint not null,
    constraint fk_group_members_group foreign key(group_id) references groups(id));
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

CREATE TABLE auth_group_members (
    id NUMBER,
    username VARCHAR(50) NOT NULL,
    group_id NUMBER NOT NULL,
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id)
);
Run Code Online (Sandbox Code Playgroud)

postgresql auto-increment

10
推荐指数
1
解决办法
2990
查看次数

压缩或重新编号所有表的ID,并将序列重置为max(id)?

运行了很长时间后,我在id字段中得到越来越多的漏洞.一些表的id是int32,id序列达到了它的最大值.一些Java源代码是只读的,因此我不能简单地将id列类型更改为int32to long,这会破坏API.

我想重新编号.这可能不是一个好的做法,但好或坏并不关心这个问题.我想重新编号,特别是那些很长的ID,如"61789238","548273826529524324".我不知道它们为什么这么长,但更短的ID也更容易手动处理.

但由于引用和约束,手动压缩ID并不容易.

PostgreSQL本身是否支持ID重新编号?或者是否有任何插件或维护工具?

也许我可以写一些存储过程?那将是非常好的,所以我可以每年安排一次.

postgresql identity auto-increment compact-database

10
推荐指数
2
解决办法
4178
查看次数

mysql自动增量是否可以安全地用作userID?

我正在网站上工作,允许人们在线创建个人资料.我想知道使用MySQL AUTO_INCREMENTed ID作为我的用户ID 是否是正确的选择.还要记住,有一天我可能不得不跨多个服务器复制数据库?

例如,你会在Twitter或Facebook这样的网站上对userIds使用这种方法吗?


我之前尝试用PHP生成userIds.我使用过这样的东西:

function generateID() {
      $possible = "1234567890";
      $code = "";
      $characters = mt_rand(7,14);
      $i = 0;
      while ($i < $characters) { 
            $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
            $i++;
      }
      return $code;
}
Run Code Online (Sandbox Code Playgroud)

这给出了我需要的值类型,但是我总是必须从DB检查该ID是否还不存在.

有没有更好的方法?

mysql userid auto-increment

10
推荐指数
2
解决办法
3494
查看次数

增加构造函数中的唯一ID号

我正在使用C#中的一个对象,我需要对象的每个实例都有一个唯一的id.我对此的解决方案只是放置一个成员变量,我在类中和我将拥有的构造函数中调用idCount:

objectID = idCount;
idCount++;
Run Code Online (Sandbox Code Playgroud)

我认为这可以解决我的问题,但似乎idCount永远不会增加,即使构造函数被多次调用.例如,如果idCount = 1,则所有对象的objectID仍为1.为什么idCount ++不起作用?

任何帮助,将不胜感激.抱歉,如果我的解释不充分,我不确定如何解释它.

c# constructor auto-increment

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

在H2数据库中,auto_increment字段增加32?

我有这个简单的表(仅用于测试):

create table table 
(
key int not null primary key auto_increment,
name varchar(30)
);
Run Code Online (Sandbox Code Playgroud)

然后我执行以下请求:

insert into table values ( null , 'one');// key=1
insert into table values ( null , 'two');// key=2
Run Code Online (Sandbox Code Playgroud)

在这个阶段一切顺利,然后关闭H2控制台并重新打开它并重新执行此请求:

insert into table values ( null , 'three');// key=33
Run Code Online (Sandbox Code Playgroud)

最后,这是所有结果:

在此输入图像描述

我不知道如何解决这个问题,如果这是一个真正的问题...等待作者的回复......

h2 auto-increment

10
推荐指数
1
解决办法
7669
查看次数

可以在MySQL的BEFORE TRIGGER中安全地使用AUTO_INCREMENT

Instagram的Postgres为Sharding实现自定义ID的方法很棒,但我需要在MySQL中实现.

所以,我转换了这个博客底部的方法,在这里:http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram

MySQL版本:

CREATE TRIGGER shard_insert BEFORE INSERT ON tablename
FOR EACH ROW BEGIN

DECLARE seq_id BIGINT;
DECLARE now_millis BIGINT;
DECLARE our_epoch BIGINT DEFAULT 1314220021721;
DECLARE shard_id INT DEFAULT 1;

SET now_millis = (SELECT UNIX_TIMESTAMP(NOW(3)) * 1000);
SET seq_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = "dbname" AND TABLE_NAME = "tablename");
SET NEW.id = (SELECT ((now_millis - our_epoch) << 23) | (shard_id << 10) | (SELECT MOD(seq_id, 1024)));
END
Run Code Online (Sandbox Code Playgroud)

该表看起来大致如下:

CREATE TABLE tablename (
    id BIGINT …
Run Code Online (Sandbox Code Playgroud)

mysql triggers sharding auto-increment instagram

10
推荐指数
1
解决办法
1218
查看次数

每组值自定义SERIAL/autoincrement

我正在尝试建立一个排序的博客系统,我遇到了一个小问题.

简单地说,我的article表中有3列:

id SERIAL,
category VARCHAR FK,
category_id INT
Run Code Online (Sandbox Code Playgroud)

id column显然是PK,它被用作所有文章的全局标识符.

category 列很好..类别.

category_id用作UNIQUE类别中的ID,因此目前存在UNIQUE(category, category_id)约束.

不过,我也想为category_id自动递增.

我想要它,以便每次我执行像这样的查询

INSERT INTO article(category) VALUES ('stackoverflow');
Run Code Online (Sandbox Code Playgroud)

我希望category_id根据最新category_id的"stackoverflow"类别自动填充列.

在我的逻辑代码中实现这一点非常容易.我只选择最新的num并插入+1,但这涉及两个单独的查询.我正在寻找一个可以在一个查询中完成所有这些的SQL解决方案.

sql postgresql database-design auto-increment

10
推荐指数
2
解决办法
5450
查看次数

使用javascript自动增加firebase中的值

您好我正在开发一些firebase项目,我可以通过javascript将我的数据保存到firebase数据库中.但我无法弄明白我的数据库自动增加子值(我的孩子值是duyuru,你可以在下面看到详细信息).我在下面分享我的代码,你可以给我一些解决这个问题的提示.

  <script>

      // Initialize Firebase
      var config = {
        apiKey: "sample1",
        authDomain: "sample2",
        databaseURL: "sample3",
        storageBucket: "sample4",
      };


      firebase.initializeApp(config);
      var database = firebase.database();

     firebase.initializeApp(config);
  var database = firebase.database();

  function writeUserData(userId, name, email, imageUrl) {
  var kategori1 =  document.getElementById("kategori").value;
  var duyuru1 = document.getElementById("duyuru").value;
  var name1 = document.getElementById("name").value;
  var email1 = document.getElementById("email").value;
  var imageUrl1 = document.getElementById("imageUrl").value;





  firebase.database().ref(kategori1 +"/" + duyuru1).set({
    username: name1,
    email: email1,
    profile_picture : imageUrl1
  });
}

    </script>
Run Code Online (Sandbox Code Playgroud)

而外面是这样的

{
    "duyuru1": {
        "email": "kjfdlkl",
        "profile_picture": "dsfsd",
        "username": "meraha"
    }
} …
Run Code Online (Sandbox Code Playgroud)

javascript auto-increment firebase firebase-realtime-database

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

PostgreSQL按另一个列值的范围自动递增列

在 PostgreSQL 中,我们可以将列定义为SERIAL,以便通过插入查询自动递增它。

这种自动增量可以通过范围到另一个列值来实现吗?

我将用下面的例子解释我的问题。

在多租户 SaaS 应用程序中,可能存在这样的情况:我们可能需要item_id为每个用户帐户增加一列(例如项目表中的列)。

示例:项目表

项目 ID | 帐户ID

100 | 100 1

101 | 101 1

102 | 102 1

100 | 100 2

对于表格格式错误表示抱歉。我希望您了解基本结构。

在上面的示例中,一旦新帐户(例如帐户 2)创建了新项目,item_id序列计数就应再次从头开始,即 100。

如果帐户1中的用户删除item_id102并创建新的项目记录,则应item_id设置为103,依此类推。

我试图找到解决方案,但无法使用谷歌搜索获得指针。因此,任何帮助将不胜感激!

PS:我知道这可以从后端代码处理,但我更想知道数据库是否有解决方案。

postgresql auto-increment

10
推荐指数
1
解决办法
2282
查看次数