当使用复合主键时,插入的值可以相同吗?我给你们举个例子:
表的创建:
Create table test
(
testno number(5) not null,
testpaper varchar(2) not null,
time date
CONSTRAINT Pa_Pks PRIMARY KEY (testno, testpaper)
)然后是我想要插入的值:
Testno Testpaper Time
12345 22 14-JUL-2011
12345 23 15-JUL-2011
12345 22 16-JUL-2011如您所见,我的主键在插入过程中具有相同的值。我想这样做的原因是相同的测试号和试卷可以在不同的日期发生。
如果我想添加相同的值,但却将其标记为主键,我该如何做呢?
这应该是标准的和正确的方法:
Create table TEST
(
Testid number(1) not null,
testno number(5) not null,
testpaper varchar(2) not null,
time date
CONSTRAINT Pa_Pks PRIMARY KEY (Testid)
)感谢您的任何澄清。
发布于 2011-11-19 17:31:01
不,你不能这样做,主键必须是唯一的。但是,您可以做的是将Test Time添加为键的一部分。或者您可以使用另一个列名作为Id,这将是一个Auto Increment键。所以你的主键是ID (Auto Increment)。
在oracle中,如果您想要一个AutoIncrement密钥,那么您还必须编写序列和触发器。一个序列就是一系列的数字。触发器的目的是每当插入新行时递增编号,并将其存储在列id中。,并且您可能还想增加数字的大小。数字(1)对于主键来说可能不够大。(如果您希望Oracle有一个自动递增Id)或者Simple,您可以向主键添加时间。
标准取决于您的要求。这两种方法都是遵循的。
发布于 2011-11-21 18:27:54
如果time可以为空,那么它不能构成PRIMARY KEY的一部分,但它可以是e UNIQUE约束的一部分。请注意,键就是键,将键指定为“主”是任意的,并且不是强制的。
将Testid添加为代理键只有在您开始时有一个自然键时才会起作用。因此:
这两个密钥都是自然密钥:
Create table TEST
(
testno number(5) not null,
testpaper varchar(2) not null,
time date,
CONSTRAINT Pa_Uqs UNIQUE (testno, testpaper, time)
);或者是自然键加上代理键:
Create table TEST
(
Testid number(1) not null,
testno number(5) not null,
testpaper varchar(2) not null,
time date,
CONSTRAINT Pa_Pks PRIMARY KEY (Testid),
CONSTRAINT Pa_Uqs UNIQUE (testno, testpaper, time)
);https://stackoverflow.com/questions/8193115
复制相似问题