• 从头开始学习数据库及ADO.NET之PostgreSql字段约束——竹子整理


    约束数据表列执行的规则。这些是用来防止无效的数据被输入到数据库中..这确保数据库中的数据的准确性和可靠性。

    约束可以是列级或表级。仅适用于表级约束被应用到整个表的列级约束。为列定义的数据类型,本身是一种约束。例如,一列DATE类型的限制列为有效的日期格式。

    以下是常用的限制,可在PostgreSQL。 www.yiibai.com

    • NOT NULL Constraint: 确保列不能有NULL值。 yiibai.com

    • UNIQUE Constraint: 确保所有列中的值是不同的。

    • PRIMARY Key: 唯一标识数据库表中的各行/记录。

    • FOREIGN Key: 约束基于其他表于的列的数据。

    • CHECK Constraint: CHECK约束,确保一列中的所有值满足一定条件。

    • EXCLUSION Constraint: 排除约束,确保指定的列(S)或表达式(次)使用指定运算(​​次),但并非所有这些比较,如果任意两行进行比较将返回TRUE。

    NOT NULL 约束

    默认情况下,列可以保存NULL值。如果不希望一列具有NULL值,那么需要在此列指定NULL约束定义。 NOT NULL约束总是写成一列约束。

    NULL并不相同,因为没有数据,而是它代表着未知的数据。

    例子:

    例如,下面PostgreSQL的语句创建一个新的表称为COMPANY1,增加了五列,其中三个ID和姓名和年龄,指定不接受NULL值:

    CREATE TABLE COMPANY1(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    ); www.yiibai.com 

    UNIQUE 约束

    唯一约束防止两个记录在一个特定的列具有相同的值。在COMPANY 表中,例如,可能要防止两个或两个以上的人具有相同的年龄。

    实例:

    例如,下面PostgreSQL的语句创建一个新的表称为COMPANY3,增加了五列。这里AGE列设置为唯一性,所以不能有两个同年龄记录:

    CREATE TABLE COMPANY3(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL UNIQUE,
       ADDRESS        CHAR(50),
       SALARY         REAL    DEFAULT 50000.00
    );  

    PRIMARY KEY 约束

    数据库表中的PRIMARY KEY约束唯一标识每条记录。可以有多个UNIQUE的列,但在一个表中只有一个主键。在设计数据库表的主键是重要的。主键是唯一的ID。

    我们用他们来引用表中的行。主键成为其他表的外键,在创建表之间的关系。由于“长期存在编码监督”,在SQLite中可以是NULL的主键。这是与其他数据库的情况下 yiibai.com

    主键是唯一标识数据库表中的各行/记录表中的一个字段。主键必须包含唯一值。主键列不能有NULL值。

    一个表只能有一个主键,它可以由一个或多个字段。当多个字段作为主键,它们被称为复合键。

    如果一个表有任何字段上定义一个主键,那么不能有两个具有相同值该字段的记录。

    实例:

    我们已经看到了各种上面的例子,已经创建了COMAPNY4,ID作为主键的表:

    CREATE TABLE COMPANY4(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    ); yiibai.com 

    FOREIGN KEY 约束

    外键约束指定一列(或一组列)中的值的值必须符合另一个表中出现的一些行。我们说这是维持两个相关的表之间的引用完整性。它们被称为外键,因为约束是外部的,也就是说表的外部。有时也被称为外键引用的关键。

    实例

    例如,下面的PostgreSQL的语句创建一个新的表称为COMPANY5,增加了五列。

    CREATE TABLE COMPANY6(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    ); www.yiibai.com 

    例如,下面的PostgreSQL的语句创建一个新的表名为DEPARTMENT1,增加了三列。列EMP_ID是外键引用表的ID字段COMPANY6。  www.yiibai.com

    CREATE TABLE DEPARTMENT1(
       ID INT PRIMARY KEY      NOT NULL,
       DEPT           CHAR(50) NOT NULL,
       EMP_ID         INT      references COMPANY6(ID)
    );  

    CHECK 约束

    检查约束允许的条件进入创纪录的检查值。如果条件值为false,记录违反了约束,并没有写进入到表。

    实例:

    例如,下面的PostgreSQL的语句创建一个新的表称为COMPANY5,增加了五列。在这里,我们添加了一个检查SALARY列,所以不能有任何的工资零:

    CREATE TABLE COMPANY5(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL    CHECK(SALARY > 0)
    );  

    EXCLUSION 约束

    排阻限制确保在使用指定的运算符的指定列或表达式进行比较,如果任何两行,这些操作符的比较中的至少一个将返回false或null。

    例子

    例如,下面的PostgreSQL的语句创建一个新的表称为COMPANY7,增加了五列。在这里,我们添加EXCLUDE约束:

    CREATE TABLE COMPANY7(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT ,
       AGE            INT   ,
       ADDRESS        CHAR(50),
       SALARY         REAL,
       EXCLUDE USING gist
       (NAME WITH =,
       AGE WITH <>)
    );  

    这里使用的要点是建立和使用强制执行的索引类型。 www.yiibai.com

    需要来执行命令CREATE EXTENSION btree_gist,这将安装btree_gist的扩展,它定义在普通的标量数据类型排斥约束。 

    正如我们所执行的年龄一样,让我们来看看这个插入到表中的记录: www.yiibai.com

     INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
     INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
     INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 );  

    对于插入语句,记录添加到的COMPANY7表中。对于第三个INSERT语句显示了以下错误:

    ERROR:  duplicate key value violates unique constraint "company7_pkey"
    DETAIL:  Key (id)=(3) already exists.
      

    删除约束:

    要删除一个约束,需要知道它的名字。如果名字知道这是很容易删除。否则,需要找出系统生成的名称。 psql的命令d表名可以帮助这里的一般语法是:

    ALTER TABLE table_name DROP CONSTRAINT some_name; yiibai.com 
  • 相关阅读:
    FCC---Learn How Bezier Curves Work---定义坐标轴点的值,影响斜率,改变速度。具体调试换值既可以体会
    FCC---Change Animation Timing with Keywords--两个小球从A都B,相同循环时间 duration, 不同的速度 speed
    FCC---Animate Multiple Elements at Variable Rates---还可以改循环时间,达到不同律动频率的效果
    FCC---Animate Elements at Variable Rates----一闪一闪亮晶晶,不同的闪动节奏
    FCC---Make a CSS Heartbeat using an Infinite Animation Count----超级好看的心跳,粉色的
    FCC---Animate Elements Continually Using an Infinite Animation Count---设置animation-iteration-count的次数为无限,让小球一直跳动
    FCC---Create Visual Direction by Fading an Element from Left to Right---一个带好看背景色的圆形图案,从左到右移动,透明度opacity渐变为0.1,背景色渐渐消失的效果
    FCC---Create Movement Using CSS Animation---设计一个盒子上下左右移动,结合animation, @keyframe, position (上下左右的offset)
    FCC---Use CSS Animation to Change the Hover State of a Button---鼠标移过,背景色变色,用0.5s的动画制作
    Python入门必学知识,30万年薪Python工程师带你学
  • 原文地址:https://www.cnblogs.com/joeymary/p/5275930.html
Copyright © 2020-2023  润新知