gpt4 book ai didi

oracle - 如何在oracle上添加主键约束?

转载 作者:行者123 更新时间:2023-12-03 23:37:59 24 4
gpt4 key购买 nike

CREATE TABLE buses(Bus_no NUMBER(11) NOT NULL ,Bus_name Varchar2(20),Type VARCHAR2(20),Total_seats Number(11),Avail_seats Number(11));
ALTER TABLE buses
ADD CONSTRAINT PK_BUSES UNIQUE(Bus_no);

这是我需要创建的表 .. 这应该是输出:
Name                       Null?    Type
----------------------------------------- -------- ----------------------------
BUS_NO NOT NULL NUMBER(11)
BUS_NAME VARCHAR2(20)
TYPE VARCHAR2(20)
TOTAL_SEATS NUMBER(11)
AVAIL_SEATS NUMBER(11)

CONSTRAINT_NAME
------------------------------
PK_BUSES

但是,我收到了这条额外的 SYS-C00403053 行以及我的输出表,请帮助删除它。
CONSTRAINT_NAME
------------------------------
SYS_C00403053
PK_BUSES

最佳答案

您尚未添加主键,而是添加了唯一约束。虽然唯一约束和非空约束实际上是相同的,但它们实际上与实际的主键不同。

正如@GurwinderSingh 所说,SYS_C00403053是系统生成的非空约束名称。命名非空约束是可能的,但不寻常:

-- just to clean up what you have in the question, remove the unique constraint
ALTER TABLE buses DROP CONSTRAINT PK_BUSES;

ALTER TABLE buses MODIFY Bus_no NULL;

ALTER TABLE buses MODIFY Bus_no CONSTRAINT BUS_NO_NOT_NULL NOT NULL;

desc buses

Name Null? Type
----------- -------- ------------
BUS_NO NOT NULL NUMBER(11)
BUS_NAME VARCHAR2(20)
TYPE VARCHAR2(20)
TOTAL_SEATS NUMBER(11)
AVAIL_SEATS NUMBER(11)

select constraint_name, constraint_type, search_condition
from user_constraints where table_name = 'BUSES';

CONSTRAINT_NAME C SEARCH_CONDITION
------------------------------ - --------------------------------------------------------------------------------
BUS_NO_NOT_NULL C "BUS_NO" IS NOT NULL

但是无论如何你想要一个主键,你可以删除单独的非空检查,因为它是由(正确的)主键暗示的:
ALTER TABLE buses MODIFY Bus_no NULL;

ALTER TABLE buses ADD CONSTRAINT PK_BUSES PRIMARY KEY (Bus_no);

desc buses

Name Null? Type
----------- -------- ------------
BUS_NO NOT NULL NUMBER(11)
BUS_NAME VARCHAR2(20)
TYPE VARCHAR2(20)
TOTAL_SEATS NUMBER(11)
AVAIL_SEATS NUMBER(11)

select constraint_name, constraint_type, search_condition
from user_constraints where table_name = 'BUSES';

CONSTRAINT_NAME C SEARCH_CONDITION
------------------------------ - --------------------------------------------------------------------------------
PK_BUSES P

您现在只能看到列出的主键约束,但该列仍被标记为不可为空,如果您尝试插入空值,则会出现相同的错误:
insert into buses (bus_no) values (null);

ORA-01400: cannot insert NULL into ("MY_SCHEMA"."BUSES"."BUS_NO")

关于oracle - 如何在oracle上添加主键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com