当前位置: 首页 > 面试题库 >

SQL表中主键ID之间的间隙

汪甫
2023-03-14
问题内容

我有一张桌子,它是:

CREATE SEQUENCE id_seq;
CREATE TABLE public."UserInfo"
(
  id bigint NOT NULL DEFAULT nextval('id_seq'),
  phone text,
  password text,
  name text,
  surname text,
  middle_name text,
  email text,
  company text,
  title text,
  image_id text,
  CONSTRAINT "UserInfo_pkey" PRIMARY KEY (id),
  CONSTRAINT "UserInfo_image_id_key" UNIQUE (image_id),
  CONSTRAINT "UserInfo_phone_key" UNIQUE (phone)
)
WITH (
  OIDS=FALSE
);
ALTER SEQUENCE id_seq OWNED BY public."UserInfo".id;
ALTER TABLE public."UserInfo"
  OWNER TO postgres;

当我提出错误的要求时,例如要为唯一列输入相同的值。“ id”正在增加…这是错误的id请求;

ERROR:  null value in column "id" violates not-null constraint
DETAIL:  Failing row contains (null, 9921455867, mg123209, name, surname, , namesurname@xxx.com, Company Name, Title Of Person, 123asd).
********** Error **********

这是我的表结果;

1;"1234477867";"qweff";"Name";"Surname";"''";"namesurname@qwe.com";"Company";"Title";"qwer1234"
4;"5466477868";"1235dsf";"Name";"Surname";"''";"banesyrna@pwqe.com";"Company";"Title";"qwer1235"
6;"5051377828";"asd123";"Name";"Surname";"''";"qweg@sdcv.com";"Company";"Title";"qwesr1235"

请帮助我如何解决此问题,我想订购1,2,3.。顺序的..


问题答案:

这就是序列的工作方式。

重要提示:为避免阻塞从同一序列中获取数字的并发事务,绝不会回退nextval操作。也就是说,一旦获取了值,就将其视为已使用且不会再次返回。即使周围的事务稍后中止,或者调用查询最终不使用该值,也是如此。

正如评论中指出的那样,序列中的间隔没有任何危害。如果出于某种原因删除表中的某些行,则会在主键值中创建间隙,并且通常不会为将它们重置为顺序而烦恼。

如果您坚持创建无间隙序列,请阅读此文章:http :
//www.varlena.com/GeneralBits/130.php并为慢速插入做好准备。



 类似资料:
  • 问题内容: 我在一本书中遇到了以下SQL: 我想知道为什么在同一张表中需要一个PRIMARY和UNIQUE KEY?我想,这个问题的根源在于,PRIMARY和UNIQUE键之间有什么区别? 问题答案: 关系模型说,一个键和另一个键之间没有本质区别。也就是说,当一个关系具有多个候选键时,没有理论上的理由声明 该 键比 该 键更重要。从本质上讲,这意味着没有理论上的理由将一个键标识 为主键 ,而将所有

  • 本文向大家介绍主键和唯一键之间的区别,包括了主键和唯一键之间的区别的使用技巧和注意事项,需要的朋友参考一下 主键和唯一键都用于从表中获取记录。这些键还用于创建表之间的关系。主键和唯一键都用于唯一标识表中的记录。一个表只能有一个主键,而唯一键在一个表或关系中可以是多个。 以下是主键和唯一键之间的重要区别。 序号 键 首要的关键 唯一键 1 定义 主键用于唯一标识关系中的所有记录。 唯一键还用于唯一标

  • 本文向大家介绍主键和候选键之间的区别,包括了主键和候选键之间的区别的使用技巧和注意事项,需要的朋友参考一下 主键和候选键都用于从表中获取记录。这些键还用于创建表之间的关系。主键和候选键都用于唯一标识表中的记录。 以下是主键和候选键之间的重要区别。 序号 键 首要的关键 候选键 1 定义 主键是唯一且非空的键,可唯一标识表中的记录。一个表只能有一个主键。 候选键也是唯一标识表中记录的唯一键,但是一个

  • 我创建了两个表,如下所示: 这个剧本成功地完成了。但是,我在插入数据时遇到问题: 我在父表中执行了以下两个insert语句: 我打算使用这个period for特性来捕获记录的更改历史,作为闪回的替代方法。但是,这是否意味着在这种情况下我不应该使用主键? 提前道谢!

  • 问题内容: 我正在尝试使用JPA / Hibernate设置以下表: 可能有很多用户,每个用户最多只能有一个验证码,也可能没有。 这是我的课程: 我创建一个用户,然后尝试使用以下代码添加验证代码: 当我尝试运行它时,我收到org.hibernate.PersistentObjectException:分离的实体传递给持久化:用户 我还尝试在Validation类中使用以下代码: 当我创建验证码时,

  • 本文向大家介绍数据库中主键和外键之间的区别,包括了数据库中主键和外键之间的区别的使用技巧和注意事项,需要的朋友参考一下 在关系数据库中,键是维护两个表之间的关系或从表中唯一标识数据的最重要元素。主键用于唯一地标识数据,因此两行不能具有相同的主键。不能为空。 另一方面,外键用于维护两个表之间的关系。一个表的主表充当另一个表中的伪造键。表中的外键强制引用完整性。该表中可以有多个。 序号 键 首要的关键