数据表的字段约束:主键、外键、唯一

一、主键:标记数据唯一非空,一个表最多只能有一个主键。

CREATE TABLE products (

    product_no integer PRIMARY KEY, --主键约束,保证唯一且非空。
    -- 或者 product_no integer UNIQUE NOT NULL,

    name text,

    price numeric

);

二、外键: 标记数据依赖其他表。

-- 和主表关系,一般是多对一关系。

CREATE TABLE orders (

    order_id integer PRIMARY KEY,

    -- 订单表的外键————参照引用了产品表的主键,这样 product_no 也拥有唯一非空特征的了。

    -- orders 实体表(或称目标表、引用表、从表、子表)中的 product_no 字段数据,对应着  
    -- products 参照表(或称来源表、被引用表、主表、父表)中的 product_no 数据,那么:
    
    -- 1. 不可能创建包含不存在于来源表(产品表)中的 product_no 值(非空)的订单。
    -- 2. 当前orders 实体表有使用来源表数据,来源表则不许删除此 product_no,以约束数据完整性。    
    -- 3. 通俗地说,有父项值才能有子项值;有子项值时限制删除、更新父项值。

    product_no integer REFERENCES products (product_no) ON DELETE NO ACTION ON UPDATE NO ACTION, 


    quantity integer

);

三、唯一约束:标记数据不重复,可以有任意数量的唯一和非空约束。

CREATE TABLE products (

    product_no integer,

    --产品名称具有唯一性,即不重复。

    name text UNIQUE,

    price numeric

);

四、外键约束+唯一约束,创建表映射关系:

 一个Hibernate创建表关联约束的例子:

// Hibernate: param 主表建立唯一约束
    
    alter table param 
       add constraint UK_57qbh4dmhu9uqd46oc65lvx5j unique (param_1)


// Hibernate: season 从表建立外键
    
    alter table season 
       add constraint FKbl4vs03v96gemvp8gfjv7qmr 
       foreign key (season) 
       references param (param_1)

 如果创建实体表 FK外键时,实体表已经有的数据不在参照表中,那到将会报错。


五、外键约束限制:(父表删除或更新操作时,父表和子表的操作类型) 

类型ON DELETEON UPDATE说明
restrict
(约束)
当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。不处理
no action意思同restrict,即如果存在从数据,不允许删除主数据。意思同restric,即如果存在从数据,不允许更新主数据不处理
cascade
(级联)
当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录也处理
set null当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。设Null
set
default
设置引用列为其缺省值。如果缺省值不是null,那么仍然需要被引用表中有一条记录的被引用字段的值与之匹配否则操作会失败。
默认值

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值