GBase 8c
其他
文章

GBase 8c 继承(三)

发表于2023-12-06 14:43:3635次浏览3个评论

一种创建一个未来将被用做子女的新表的方法是在CREATE TABLE中使用LIKE子句。这将创建一个和源表具有相同列的新表。如果源表上定义有任何CHECK约束,LIKE的INCLUDING CONSTRAINTS选项可以用来让新的子表也包含和父表相同的约束。

当有任何一个子表存在时,父表不能被删除。当子表的列或者检查约束继承于父表时,它们也不能被删除或修改。如果希望移除一个表和它的所有后代,一种简单的方法是使用CASCADE选项删除父表(见第 5.14 节)。

ALTER TABLE将会把列的数据定义或检查约束上的任何变化沿着继承层次向下传播。同样,删除被其他表依赖的列只能使用CASCADE选项。ALTER TABLE对于重名列的合并和拒绝遵循与CREATE TABLE同样的规则。

继承的查询仅在附表上执行访问权限检查。例如,在cities表上授予UPDATE权限也隐含着通过cities访问时在capitals表中更新行的权限。 这保留了数据(也)在父表中的样子。但是如果没有额外的授权,则不能直接更新capitals表。 此规则的两个例外是TRUNCATE 和 LOCK TABLE,总是检查子表的权限,不管它们是直接处理还是通过在父表上执行的那些命令递归处理。

以类似的方式,父表的行安全性策略(见第 5.8 节)适用于继承查询期间来自于子表的行。 只有当子表在查询中被明确提到时,其策略(如果有)才会被应用,在那种情况下,附着在其父表上的任何策略都会被忽略。

外部表(见第 5.12 节)也可以是继承层次 中的一部分,即可以作为父表也可以作为子表,就像常规表一样。如果 一个外部表是继承层次的一部分,那么任何不被该外部表支持的操作也 不被整个层次所支持。

评论

登录后才可以发表评论
崔哥发表于 7个月前
关塞年华早,楼台别望违。试衫著暖气,开镜觅春晖。燕入窥罗幕,蜂来上画衣。情催桃李艳,心寄管弦飞。妆洗朝相待,风花暝不归。梦魂何处入,寂寂掩重扉。
用户头像
levvel发表于 6个月前
太实用了!
用户头像
levvel发表于 5个月前
嗯,只能说不错!