我正在做一个Sql赋值,我需要创建一些表。作业要求:
确保为每个表的PK定义NOT NULL约束
我不明白。当我们将密钥定义为主键时,我们为什么要单独编写NOT NULL
?不定义密钥为PRIMARY KEY
本身意味着不是空且唯一吗?
请解释一下!
修改(从下面复制):
CREATE TABLE Faculty(
FacNo char(11) not null,
FacFirstName varchar(30) not null,
FacLastName varchar(30) not null,
FacCity varchar(30) not null,
FacState char(2) not null,
FacZipCode char(10) not null,
FacRank char(4),
FacHireDate date,
FacSalary decimal(10,2),
FacSupervisor char(11),
FacDept char(6),
CONSTRAINT FacultyPK PRIMARY KEY (FacNo));
这是对的吗? FACNO
列不为空,而且它也是主键。
答案 0 :(得分:1)
我想你的导师要求这样做的原因是为了确保你写出明确表达你意图的DDL。信任null自动转换为非null无助于DDL的可读性,因此我要求编写所有DDL,以便create table语句显示所有列的预期可为空性。
答案 1 :(得分:0)
问题已解决,请使用以下查询
CREATE TABLE Faculty(
FacNo char(11) not null,
FacFirstName varchar(30) not null,
FacLastName varchar(30) not null,
FacCity varchar(30) not null,
FacState char(2) not null,
FacZipCode char(10) not null,
FacRank char(4),
FacHireDate date,
FacSalary decimal(10,2),
FacSupervisor char(11),
FacDept char(6),
CONSTRAINT FacultyPK PRIMARY KEY (FacNo) );
答案 2 :(得分:0)
http://www.techonthenet.com/oracle/primary_keys.php
在Oracle中,主键是单个字段或字段组合 唯一定义记录的。没有属于的字段 主键可以包含空值。一张桌子只能有一张 主键。
为表格设置PK
时,即使您将列指定为可为空,该列也会设置为NOT NULL
-- Create table
create table t_test_pk(
col1 varchar2(5) null
);
SQL> desc t_test_pk
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
COL1 VARCHAR2(5) Y
所以...列可以为空
然后我们为表格设置PK:
SQL> alter table t_test_pk add constraint pk_1 primary key (COL1);
Table altered
并尝试将null插入
SQL> insert into t_test_pk values (null);
insert into t_test_pk values (null)
ORA-01400: cannot insert NULL into ("T_TEST_PK"."COL1")
事情发生了变化!检入SqlPlus - 该列不可为空 - 并得到错误...我们无法在列中插入null,因为它在PK中使用
SQL> desc t_test_pk;
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
COL1 VARCHAR2(5)
好的......尝试将其设置为可以为空的
SQL> alter table t_test_pk modify col1 null;
alter table t_test_pk modify col1 null
ORA-01451: column to be modified to NULL cannot be modified to NULL