如何使用 sql developer 设置自动递增列

Posted

技术标签:

【中文标题】如何使用 sql developer 设置自动递增列【英文标题】:how to set auto increment column with sql developer 【发布时间】:2012-06-14 23:06:18 【问题描述】:

如何使用 Oracle SQL Developer 将列设置为自动递增?为什么表单被禁用?

注意:图片显示的是数据建模器,但问题和最佳答案谈论的是编辑现有数据库。

【问题讨论】:

看这个帖子很像***.com/questions/10613846/… 【参考方案1】:

如果您想让您的 PK 自动递增,您需要为该主键设置 ID 列属性。

    右键单击表格并选择“编辑”。 在“编辑”表格窗口中,选择“列”,然后选择您的 PK 列。 转到 ID 列选项卡并选择列序列作为类型​​。这会 创建触发器和序列,并将序列关联到 主键。

请看下图更好地理解。

//我的来源是:http://techatplay.wordpress.com/2013/11/22/oracle-sql-developer-create-auto-incrementing-primary-key/

【讨论】:

很好的答案。但是,我可以修改一下,查看“插入前检查列是否为空”复选框很重要,这可能不是您想要的。使用序列 ID 时,您通常不希望从其他地方填充它,(可能取决于,但一定要考虑片刻。) 很好的答案。非常适合我。 精彩的答案。谢谢你 。也算我的赞成票:)【参考方案2】:

不幸的是,oracle 不像 mysql 那样支持 auto_increment。你需要付出一些额外的努力才能做到这一点。

说这是你的桌子-

CREATE TABLE MYTABLE (
  ID NUMBER NOT NULL,
  NAME VARCHAR2(100)
  CONSTRAINT "PK1" PRIMARY KEY (ID)
);

您需要创建一个序列 -

CREATE SEQUENCE S_MYTABLE
START WITH 1
INCREMENT BY 1
CACHE 10;

还有一个触发器 -

CREATE OR REPLACE TRIGGER T_MYTABLE_ID
BEFORE INSERT
ON MYTABLE
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
  if(:new.ID is null) then
  SELECT S_MYTABLE.nextval
  INTO :new.ID
  FROM dual;
  end if;
END;
/

ALTER TRIGGER "T_MYTABLE_ID" ENABLE;

【讨论】:

自 2012 年以来,情况发生了变化。随着 Oracle Database 12c 的到来,您现在确实可以做到这一点。以下是现在的操作方法:thatjeffsmith.com/archive/2014/01/… 我更喜欢 Dan 的回答。有图片的那个。值得一千字。【参考方案3】:

您可以在 SQL Modeler 中进行自动增量。在列属性窗口中单击:常规,然后勾选自动增量框。之后将为您启用自动增量窗口。

【讨论】:

感谢您的帖子!请不要在您的帖子中使用签名/标语。您的用户框算作您的签名,您可以使用您的个人资料发布您喜欢的任何关于您自己的信息。 FAQ on signatures/taglines【参考方案4】:

@tom-studee 你是对的,可以在数据建模器中完成。

双击您的表格,然后转到列部分。在这里双击将具有自动增量的列。在一般部分有一个复选框“自动增量”,只需勾选即可。

之后你也可以去“自动增量”部分进行自定义。

当您保存它并要求数据建模器生成 SQL 脚本时,您将看到代表您的自增的序列和触发器。

【讨论】:

【参考方案5】:

更新:在 Oracle 12c 以后,我们可以选择创建自动增量字段,它比触发器和序列更好。

右键单击表格并选择“编辑”。 在“编辑”表格窗口中,选择“列”,然后选择您的 PK 列。 转到标识列选项卡并选择“生成为标识”作为类型,在起始和增量字段中输入 1。这会 使该列自动递增。

见下图

来自 SQL 语句

IDENTITY 列现在可用于 Oracle 12c:

 create table t1 (
     c1 NUMBER GENERATED by default on null as IDENTITY,
     c2 VARCHAR2(10)
     );

或指定起始值和增量值,同时防止任何插入标识列(始终生成)(同样,仅限 Oracle 12c+)

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

编辑:如果您遇到诸如“ORA-30673:要修改的列不是标识列”之类的错误,则需要创建新列并删除旧列。

【讨论】:

【参考方案6】:

我发现这篇文章看起来有点旧,但我想我会向大家更新我的新发现。

我在 Windows 上使用 Oracle SQL Developer 4.0.2.15。 我们的数据库是在 Windows 上运行的 Oracle 10g(版本 10.2.0.1)。

在 Oracle 中使列自动递增 -

    在“连接”选项卡中打开数据库连接 展开表格部分,右键单击要更改为自动递增列的表格,然后选择编辑... 选择“列”部分,然后选择要自动递增的列(主键列) 接下来,点击列列表下方的“标识列”部分,将类型从“无”更改为“列序列” 保留默认设置(或根据需要更改序列和触发器的名称),然后单击“确定”

您的 id 列(主键)现在将自动递增,但序列将从 1 开始。 如果您需要将 id 增加到某个点,则必须针对该序列运行一些 alter 语句。This post 提供了更多详细信息以及如何解决此问题。

我找到了解决方案here

【讨论】:

【参考方案7】:

Oracle 没有自动递增的列。您需要一个序列和一个触发器。这是一篇解释如何做到这一点的随机博客文章:http://www.lifeaftercoffee.com/2006/02/17/how-to-create-auto-increment-columns-in-oracle/

【讨论】:

【参考方案8】:

如何使用 Oracle SQL Developer 做到这一点: 在左窗格中的连接下,您将找到“序列”,右键单击并从上下文相关弹出窗口中选择创建新序列。填写详细信息:模式名称、序列名称、属性(以值开头、最小值、最大值、增量值等),然后单击确定。假设您有一个带有使用此 auto_increment 的键的表,在此表中插入时,只需在使用此属性的字段中提供“your_sequence_name.nextval”。 我想这应该有帮助! :)

【讨论】:

以上是关于如何使用 sql developer 设置自动递增列的主要内容,如果未能解决你的问题,请参考以下文章

如何让SELECT 查询结果额外增加自动递增序号sqlserver

PL/SQL Developer使用技巧(部分)

SQL - 检查列是不是自动递增

SQL java获取分配给自动递增主键的值[重复]

PL/SQL Developer软件自动提交事务的设置方法

SQL Server 2000中如何设置自增主键?