美文网首页
PostgreSQL基础知识--表的约束,修改与权限

PostgreSQL基础知识--表的约束,修改与权限

作者: Amy1234567 | 来源:发表于2021-04-22 14:44 被阅读0次

    一,表的约束

    1. 检查约束

    是表中最为常见的约束类型,它允许你声明在某个字段里的数值必须满足一个布尔表达式。

    my test my test

    为检查约束指定名称

    my test

    2. 非空约束

    即约束的字段不能插入空值,或者将以有数据更新为空值

    3. 唯一性约束

    即指定的字段不能插入重复值,或者是将某一记录的值更新为当前表中的已有值

    my test

    为表中的多个字段定义联合唯一性

    my test

    为唯一性约束命名

    my test

    在插入数据时,空值(NULL)之间被视为不相等的数据,因此对于某一唯一性字段,可以多次插入空值。然而需要注意的是,这一规则并不是被所有数据库都遵守,因此在进行数据库移植时可能会造成一定的麻烦。

    my test my test my test

    二,主键和外键

    1. 主键约束: 只是唯一约束和非空约束的组合

    my test

    和唯一性约束一样,主键可以同时作用于多个字段,形成联合主键

    my test

    2. 外键约束

    外键约束声明一个字段(或者一组字段)的数值必须匹配另外一个表中某些行出现的数值。我们把这个行为称作两个相关表之间的参考完整性。

    (1). 外键为另一个表的主键:

    my test my test

    外键的字段可以插入null

    my test

    例1:

    my test

    例2:

    my test

    例3:

    my test

    例4:

    my test

    例5:

    my test

    例6:

    my test

    例7:

    my test

    总结:

    单个外键, 只能对应另一个表的主键,或者唯一性约束字段

    联合外键, 只能对应另一个表的联合主键,并且联合外键的字段数量和联合主键的字段数量必须保持一致。

    (2). 当删除被引用行或者更新被引用列时,对于引用表或引用列,不同的action有不同的行为。

    可用的action如下:

    NO ACTION

    如果违反外键约束会产生一个错误。如果约束被延迟,那么到事务结束检查约束时如果仍然因为存在一个引用行而违反外键约束,则仍会产生错误。这是默认值。其他的动作action都不能被延迟。

    RESTRICT

    违反外键约束会产生一个错误。

    CASCADE

    级联删除或更新。分别删除一个引用行或者更新一个引用列的值。

    SET NULL

    设置引用列(referencing column(s))的值为null

    SET DEFAULT

    设置引用列为其缺省值。如果缺省值不是null,那么仍然需要被引用表中有一条记录的被引用字段的值与之匹配,否则操作会失败。

    my test

    准备数据:

    my test

    on delete restrict: 被引用的行禁止删除;

    my test

    on update restrict: 被引用的行禁止更新;

    my test my test

    on update cascade: 被引用行更新时,引用行自动更新;

    my test my test my test

    on delete cascade: 被引用行删除时,引用行也一起删除;

    my test my test

    二,表的修改

    1. 增加字段

    my test

    2. 删除字段

    my test

    如果该表为引用表,该字段为被引用字段,那么上面的删除操作将会失败。

    my test

    想要删除被引用字段的同时,级联的删除其所有引用字段。

    my test

    关联表的外键被删除

    my test

    3. 增加约束

    my test my test

    4. 删除约束

    my test

    对于隐式自动命名的约束,可以通过psql的\d tablename来获取该约束的名字。

    my test my test

    5. 改变字段的缺省值

    my test

    6. 修改字段的数据类型

    只有在字段里现有的每个项都可以用一个隐含的类型转换,转换成新的类型时才可能。比如当前的数据都是整型,而转换的目标类型为numeric或varchar,这样的转换一般都能成功。

    与此同时,postgreSQL还试图将字段的缺省值(如果存在)转换成新的类型,还有涉及该字段的任何约束。但是这些转换可能失败,或者可能生成奇怪的结果。在修改某字段类型之前,最好删除约束,然后再修改过添加上去。

    将integer类型修改为numeric

    my test

    将integer类型修改为varchar

    my test my test my test

    7. 修改字段名

    my test

    8. 修改表名

    my test

    三,权限

    只有表的所有者才能修改或者删除表的权限。要赋予一个权限,我们使用GRANT命令,要撤销一个权限,使用REVOKE命令。需要指出的是,PUBLIC是特殊“用户”。可以用于将权限赋予系统中的每一个用户。在声明权限的位置写ALL,则将所有的与对象类型相关的权限都赋予出去。

    my test

    最初,只有对象所有者(或者超级用户)可以赋予或者撤销对象的权限。但是,我们可以赋予一个"with grant option"权限,这样就可以给接受权限的人以“授予该权限给其他人”的权限。如果授予选项后来被撤销,那么所有那些从这个接受者接受了权限的用户(直接或者通过级连的授权)都会失去该权限。

    文章内容来自:https://www.cnblogs.com/orangeform/archive/2012/04/23/2290803.html

    相关文章

      网友评论

          本文标题:PostgreSQL基础知识--表的约束,修改与权限

          本文链接:https://www.haomeiwen.com/subject/tbhzlltx.html