学习时时刻刻都在继续--小得reference

 

 上篇文章“一个外键引发的错误---ORA-2449有关drop表空间错误解决实例 ”解决一个由外键引发的问题。  这个外键就是references了,有关的数据库的数据字典表是constraints系列表(dba_constraints, user_constraints, dba_cons_columns等相关表), 不过这个dba_constraints表里并去全是references,references也是一个constraints的类型,在表里constraint_type为R的便是我们这里给你讲到的references了。

 

这个reference自己以前没有好好研究过,处理上个问题的时候,仅仅是用到了这几个数据字典表而已。 其实这里要知道的不仅仅是数据字典的内容,我在写上个文章的时候,把自己的故障排除过程记下来的过程中,就深思到references里的几个问题。 也被其整蛊了一番,不过在文档的帮助下,还是解决了,看来oracle的学习时时刻刻都在进行呀。

 

下面我们就看看这个references, 先看数据字典,主要的数据字典表是

dba_constraints这个表,

里面的主要字段

 

Name              Type         Nullable Default Comments                                                                    

----------------- ------------ -------- ------- --------------------------------------------------------------------------- 

OWNER             VARCHAR2(30)                  Owner of the table                                                          

CONSTRAINT_NAME   VARCHAR2(30)                  Name associated with constraint definition                                  

CONSTRAINT_TYPE   VARCHAR2(1)  Y                Type of constraint definition                                               

TABLE_NAME        VARCHAR2(30)                  Name associated with table with constraint definition  

 

R_OWNER           VARCHAR2(30) Y                Owner of table used in referential constraint                               

R_CONSTRAINT_NAME VARCHAR2(30) Y                Name of unique constraint definition for referenced table      

 

LAST_CHANGE       DATE         Y                The date when this column was last enabled or disabled                      

INDEX_OWNER       VARCHAR2(30) Y                The owner of the index used by this constraint                              

INDEX_NAME        VARCHAR2(30) Y                The index used by this constraint                                        

 

 

 

TYPE为R的就是我们的References

 

 

实验为先

SQL> conn test1/test1

SQL> create table test_1_to_test1 (id int);

SQL> alter table test_1_to_test1 add constraint PK_test1_id primary key (id);

SQL>select constraint_name, constraint_type from dba_constraints a where a.constraint_name = 'PK_TEST1_ID';

 

 

CONSTRAINT_NAME                CONSTRAINT_TYPE

------------------------------ ---------------

PK_TEST1_ID                    P

 

这里是P表示是Primary key

 

 

SQL> create table test_1_to_test2 (id int primary key, pid int, constraint FK_te

st_1_id foreign key (pid) references test_1_to_test1(id));

表已创建。

 

 

 

 

SQL>  select constraint_name, constraint_type from dba_constraints a where a.owner = 'TEST1' and a.table_name = 'TEST_1_TO_TEST2';

 

CONSTRAINT_NAME                CONSTRAINT_TYPE

------------------------------ ---------------

SYS_C0010957                   P

FK_TEST_1_ID                   R

 

 

这里下面的就是我们添加的references,上面是我们oracle指定的PK的constraint name,我们在建pk的时候美誉给名字,由Oracle代劳了。

 

 

能不 能跨用户的使用references叻,这个是我再处理上面的问题里,面对的一个选择,答案是肯定的

 

我在上个文章里写sql后,回来仔细看了看sql发现我当时考虑掉了,跨用户的reference的关系,我们来看看如何跨用户的用reference,当然也许这样的数据库设计不合理,不过我们讨论的仅是片面的reference的知识点。

 

我在test_1用户里建了一个表 test1 其中 id是主键, 那么我现在在tetst1这个用户下做一个表引用到这个字符, 命令和普通的一样

SQL> alter table test_1_to_test1 add (pid int);

表已更改。

 

 

SQL> alter table test_1_to_test1 add constraint FK_test1_id2 foreign key (pid) r

eferences test_1.test_1(id);

alter table test_1_to_test1 add constraint FK_test1_id2 foreign key (pid) refere

nces test_1.test_1(id)

 

            *

第 1 行出现错误:

ORA-01031: 权限不足

 

 

不行,但是由于时间有限,所以马上用sys登录上去

 

SQL> alter table test1.test_1_to_test1 add constraint FK_test1_id2 foreign key (pid) references test_1.test_1(id);

 

alter table test1.test_1_to_test1 add constraint FK_test1_id2 foreign key (pid) references test_1.test_1(id) 

ORA-01031: 权限不足

 

 

依然权限不足

 

根据以往的经验,直接赋对象权限试试。

SQL> conn test_1/test_1

SQL>grant references on test_1 to test1;

然后可以了。

 

试试references any table提示错误选项。 看到这个只能是对象权限,没有系统权限。

 

为什么sys也不能操作了,以前在plsql里create table里碰到过,只能是对User有效,而不能作用在Role上的, 这里这个refer也是如此。

 

时间有限,所以在现场也就只是完成目标而已,没有详细的研究, 这里到此也仅仅是研究了其中grant和数据字典部分,

 

特别在这里给大家看到了不同schema里对象的reference的方式和需要注意的,

 

由于时间有限,这里仅仅提到这里,不过更多的需要大家自己去探索探索,用上篇文章提到的,如果把学习转换成探索的成分,你是不是跟喜欢上了Oracle呀。

 

至此, 如果朋友探讨这个过程中有遇到疑问,都可以发信给我。 愿意和大家一起分享Oracle的奥秘。

 

 

 




 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
大数据在社交产品中的应用现状和特点如下: 1. 应用现状:目前,主流的社交产品,如微信、微博、Facebook、Twitter等,都在大数据方面进行了广泛的应用。这些社交产品通过收集用户的数据,包括用户的个人信息、兴趣爱好、社交关系、行为数据等,利用大数据技术对这些数据进行分析和挖掘,从而为用户提供更加个性化的服务和推荐。 2. 特点:大数据在社交产品中的应用具有以下特点: (1)个性化服务:社交产品通过分析用户的数据,可以为用户提供更加个性化的服务和推荐,如好友推荐、内容推荐等。 (2)实时性:社交产品是实时性的,用户的行为数据和社交关系都是时时刻刻在变化的。大数据技术可以实时地对这些数据进行分析和挖掘,为社交产品提供实时的服务和推荐。 (3)协同过滤:社交产品中的协同过滤算法能够根据用户的历史行为和社交关系,为用户推荐感兴趣的内容和好友。 (4)广告精准投放:社交产品通过分析用户的数据,可以为广告主提供更加精准的广告投放,提高广告的转化率和效果。 (5)用户画像分析:社交产品可以通过收集用户的数据,对用户进行画像分析,了解用户的需求和喜好,从而为用户提供更加个性化的服务和推荐。 总之,大数据在社交产品中的应用越来越广泛,这些应用不仅提高了社交产品的用户体验,还为企业和政府提供了更加精准的决策支持和营销推广。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值