zoukankan      html  css  js  c++  java
  • 表的继承

    建父表

    CREATE TABLE persons
    (
    name text,
    age int,
    sex BOOLEAN
    );
    
    

    建子表

    CREATE TABLE students (
    class_no INT
    ) INHERITS (persons);
    

    插入数据

    • 向子表插入数据
    insert into students values('张三', 15,true,1);
    insert into students values('李四', 15,false,2);
    
    • 向父表插入数据
    insert into persons values('王五',18,true)
    

    查询数据

    • 查询父表
    select * from persons;
    

    结果

    • 查询子表
    select * from students;
    

    结果

    • 只查询父表中的数据(使用关键字only)
    select * from only persons;
    

    结果

    其他注意事项

    • 父表的检查约束与非空约束会从遗传到子表中,但是其他类型的约束(唯一、主键、外键)则不会被子表继承;
    • 一个子表可以从多个父表继承,此时他会用用所有父表的字段总和,并且子表中定义的字段也会还在
    • 如果同名字段出现在一个表继承的多个父表中,那么这些字段就会“融合”,因此,子表中就之后有一个这样的字段
      • 但是融合的条件是父表中的同名字段类型必须相同,否则会抛出一个错误;
      • 融合的字段会拥有父表中该字段的所有检查约束;
      • 并且如果某个父表字段存在非空约束,那么融合后的字段也必须是非空的;
    • 采用select、update、delete等命令访问或操作一张父表时, 也会同时操作相应的子表;
    • 而使用alter table命令修改一张父表的结构定义时,大多时候也会修改子表的结构定义;
    • reindex、vacuum命令不会影响到子表
    • 唯一约束、外键的使用域也不会扩大到子表上

    多说一句

    继承特性的一个严重的局限性是索引(包括唯一约束)和外键约束只施用于单个表,而不包括它们的继承的子表。这一点不管对引用表还是被引用表都是事实,因此在上面的例子里,如果我们声明cities.name为UNIQUE或者是一个PRIMARY KEY,那么也不会阻止capitals表拥有重复了名字的cities数据行。 并且这些重复的行缺省时在查询cities表的时候会显示出来。实际上,缺省时capitals将完全没有唯一约束,因此可能包含带有同名的多个行。你应该给capitals增加唯一约束,但是这样做也不会避免与cities的重复。类似,如果我们声明cities.name REFERENCES某些其它的表,这个约束不会自动广播到capitals。在这种条件下,你可以通过手工给capitals 增加同样的REFERENCES约束来做到这点。

    参考:
    http://www.cnblogs.com/stephen-liu74/archive/2012/04/27/2291814.html

  • 相关阅读:
    百度地图API(二)
    Android开发--页面切换
    Android开发--Socket通信
    android开发--okhttp
    android开发--下载图片
    Android--Handler
    android开发--多线程
    android开发--Application
    android开发--ormlite
    android开发--数据库(更新或者降低版本)
  • 原文地址:https://www.cnblogs.com/yldf/p/11900063.html
Copyright © 2011-2022 走看看