• 【PostgreSQL】列添加默认值、约束


    默认值

    建表时,可以为一个字段指定默认值。若已指定默认值的列新插入了一行,但设定了默认值的字段数值没有声明,那么这些字段将被自动填充为它们各自的默认值。

    create table student (no int,name varchar (20),age int default 15) ;
    
    • 1
    create table blog(
    id int,
    title text, 
    created_date timestamp default now()
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    约束

    约束种类

    • 检查约束
    • 非空约束
    • 唯一约束
    • 主键
    • 外键

    检查约束

    使用该约束时:在设置某个字段里的数值时必须使这个约束的表达式值为真。
    分的有 字段约束 和 表约束 :
    字段约束示例:

    CREATE TABLE persons (
    name varchar(40),
    age int CHECK (age >= 0 and age <=150),
    sex boolean
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    表约束示例:

    CREATE TABLE books (
    book_no integer,
    name text,
    price numeric CHECK (price > 0),
    discounted_price numeric CHECK (discounted_price > 0),
    CHECK (price > discounted_price)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:在大多数的数据库中,字段约束也可以写成表约束,但反过来很可能不行,因为系统会假设字段约束只引用它所从属的字段,上面的表约束可以写为这样:

    CREATE TABLE books (
    book_no integer,
    name text ,
    price numeric,
    discounted_price numeric,
    CHECK (price > 0)
    CHECK (discounted_price > 0) ,
    CHECK (price > discounted_price)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    或者是这样:

    CREATE TABLE books (
    book_no integer,
    name text,
    price
    numeric,
    discounted_price numeric,
    CHECK (price > 0 and discounted_price > 0 and price > discounted_price)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    可以给字段约束或者表约束添加名称,为了在插入数据报错时看错误信息更清晰,如下面的 CONSTRAINT valia_discount ,valia_discount就是该条约束的名称

    CREATE TABLE books (
    book_no integer,
    name
    text,
    price numeric,
    di scounted_price numeric,
    CHECK (price > 0)
    CHECK (discounted_price > 0),
    CONSTRAINT valia_discount CHECK (price > discounted_price)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    非空约束

    非空约束只是简单地声明一个字段必须不能为NULL。
    一个非空约束总是被写成一个字段约束。非空约束在功能上等效于创建一个检查约束。
    一个字段可以有多个约束。只要-一个接着-一个写就可以了,它们的顺序无所谓:

    CREATE TABLE books (
    book_no integer NOT NULL,
    name text,
    price numeric NOT NULL CHECK (price >0)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    唯一约束

    唯一约束保证在一个字段或一组字段里的数据相较于表中其他行的数据是唯一的。语法是:

    CREATE TABLE books (
    book_no integer UNIQUE,
    name text,
    price numeric
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面是字段约束,下面这个则是表约束:

    CREATE TABLE books(
    book_no integer,
    name text,
    price numeric,
    UNIQUE (book_no)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    外键约束

    外键约束是表之间关系的一种约束,用于约束本表中一个字段或多个字段的数值必须出
    现在另一个表的一个字段或多个字段中。这种约束也可以称为两个相关表之间的参照完整性
    约束。
    如“学生表”与“班级表”之间的关系,一个学生一定是某个班级的学生:

    CREATE TABLE class (
    class_no int primary key,
    class_name varchar (40)
    );
    
    • 1
    • 2
    • 3
    • 4
    CREATE TABLE student (
    student_no int primary key,
    student_name varchar (40) ,
    age int,
    class_no int REFERENCES class(class_no)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    加外键约束就是 REFERENCES class(class_ no) 其中REFERENCES代表外键约束,class是有关系的父表名,class_no是关联的父表对应的字段。

  • 相关阅读:
    行为模式-责任链模式
    torch - FloatTensor标签(boolean)数值转换(1/0)
    猿创征文 |【STM32】I2C协议完成温湿度检测
    Thrift协议详解
    《web课程设计》基于HTML+CSS+JavaScript典的中医药大学网(11个页面)
    如何对用户输入进行校验
    嵌入式摄像头,获取视频要通过进程通讯?
    react简单封装antd的树形下拉框
    租用服务器后需要注意什么
    【微服务】SpringBoot+Dubbo+ZooKeeper 实战
  • 原文地址:https://blog.csdn.net/TheChany/article/details/126161800