开发者

Oracle Primary Keys

Can you retriev a data record in oracle using only a portion of a composite primary key?

example PK = Col1 + Col2 + Col3

SE开发者_如何学运维LECT * 
  FROM table 
 WHERE Col1 = 'SomeDate'


You can pose that query, but it may not give you a single record unless you have a unique constraint on that column. Though if you did, I'm not sure why you'd have the composite primary key.


Sure, but because it's a composite primary key, the query is not guaranteed to return a unique or empty result. There is only guaranteed to be one unique combination of Col1+Col2+Col3; there could thus be many columns with the same Col1, unless as Jody says you have specified an additional unique constraint on the one column.


Yes, you can, and it's perfectly normal. You do it all the time with many-to-many tables.

Here is a table with a composite primary key.

create table student_grade(
  course_id  varchar2(6) not null
 ,student_id varchar2(12) not null
 ,grade number            not null
 ,primary key(student_id, course_id)
);

...with some test data:

COURSE STUDENT_ID        GRADE
------ ------------ ----------
DB101  Ronnis               70
DB102  Ronnis               70
DB103  Ronnis               70
DB101  user627093           70

Selecting on parts of the key would be completely normal.

select *
  from student_grade
 where course_id = 'DB101';

COURSE STUDENT_ID        GRADE
------ ------------ ----------
DB101  Ronnis               70
DB101  user627093           70

However, note that you may never ever rely on a query on subset of a key to return a single record. Sooner or later that query will return more than one row, and any logic that depends on it will break.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜