Wil*_*son 3 null oracle database-design identity unique-constraint
我想创建一个ID
默认情况下自动生成唯一 ID 号的列。
用户不会通过INSERT
语句插入行,而是使用开箱即用的应用程序(使用属性编辑环境)创建行。
我听说可以通过创建Oracle IDENTITY 列来实现自动生成的 ID
(提示:要在链接页面中查找相关部分,请搜索此文本:)Use this clause to specify an identity column.
。
因此,我已成功创建了一个带有IDENTITY
列的表:
CREATE TABLE A_TEST_TABLE (ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY);
Run Code Online (Sandbox Code Playgroud)
但是,我看到该字段不是 nullabe:
SELECT ID FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'A_TEST_TABLE'
NULLABLE = N
Run Code Online (Sandbox Code Playgroud)
这是一个问题,因为我的应用程序试图“帮用户一个忙”。如果字段不可为空,应用程序会自动插入一个零作为虚拟值。这会覆盖自动生成的 ID(这当然不是我想要的)。我猜测这样做是为了避免在提交空值时从数据库收到错误消息。
为了避免我的应用程序出现此问题,是否可以将字段设为 nullabe?
当我阅读文档时,它说:
如果您指定 ON NULL,那么当后续的 INSERT 语句尝试分配计算结果为 NULL 的值时,Oracle 数据库使用序列生成器为该列分配一个值。
这是否意味着IDENTITY
字段可以为空?如果是这样,如何?
我承认我不知道自己在做什么。我什至不认为我最终会想要一个可以为空的 ID 字段。我只是想弄清楚这一切,但我失败了。
您可以将该列设为 NULLable,但不能将其设为 IDENTITY 列;相反,创建一个序列和一个INSERT
触发器,用于设置序列中的 ID 值。在 12.1 版之前,IDENTITY 列不可用,使用序列是解决方法。
归档时间: |
|
查看次数: |
335 次 |
最近记录: |