位置: 编程技术 - 正文

PostgreSQL教程(一):数据表详解

编辑:rootadmin

推荐整理分享PostgreSQL教程(一):数据表详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

一、表的定义:

对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。现在就让我们从这里起步吧。 1. 创建表: 2. 删除表: 3. 创建带有缺省值的表: 输出为: 4. 约束: 检查约束是表中最为常见的约束类型,它允许你声明在某个字段里的数值必须满足一个布尔表达式。不仅如此,我们也可以声明表级别的检查约束。 下面的约束是非空约束,即约束的字段不能插入空值,或者是将已有数据更新为空值。 如果一个字段中存在多个约束,在定义时可以不用考虑约束的声明顺序。 唯一性约束,即指定的字段不能插入重复值,或者是将某一记录的值更新为当前表中的已有值。 为表中的多个字段定义联合唯一性。 为唯一性约束命名。 在插入数据时,空值(NULL)之间被视为不相等的数据,因此对于某一唯一性字段,可以多次插入空值。然而需要注意的是,这一规则并不是被所有数据库都遵守,因此在进行数据库移植时可能会造成一定的麻烦。 5. 主键和外键: 从技术上来讲,主键约束只是唯一约束和非空约束的组合。 和唯一性约束一样,主键可以同时作用于多个字段,形成联合主键: 外键约束声明一个字段(或者一组字段)的数值必须匹配另外一个表中某些行出现的数值。 我们把这个行为称做两个相关表之间的参考完整性。 当多个表之间存在了主外键的参考性约束关系时,如果想删除被应用表(主键表)中的某行记录,由于该行记录的主键字段值可能正在被其引用表(外键表)中某条记录所关联,所以删除操作将会失败。如果想完成此操作,一个显而易见的方法是先删除引用表中和该记录关联的行,之后再删除被引用表中的该行记录。然而需要说明的是,PostgreSQL为我们提供了更为方便的方式完成此类操作。 限制和级联删除是两种最常见的选项。RESTRICT 禁止删除被引用的行。 NO ACTION 的意思是如果在检查约束的时候,如果还存在任何引用行,则抛出错误; 如果你不声明任何东西,那么它就是缺省的行为。(这两个选择的实际区别是,NO ACTION 允许约束检查推迟到事务的晚些时候,而 RESTRICT 不行。) CASCADE声明在删除一个被引用的行的时候,引用它的行也会被自动删除掉。 在外键字段上的动作还有两个选项: SET NULL 和 SET DEFAULT。 这样会导致在被引用行删除的时候,引用它们的字段分别设置为空或者缺省值。 请注意这些选项并不能让你逃脱被观察和约束的境地。比如,如果一个动作声明 SET DEFAULT,但是缺省值并不能满足外键,那么动作就会失败。类似ON DELETE,还有ON UPDATE 选项,它是在被引用字段修改(更新)的时候调用的。可用的动作是一样的。

二、系统字段:

PostgreSQL教程(一):数据表详解

PostgreSQL的每个数据表中都包含几个隐含定义的系统字段。因此,这些名字不能用于用户定义的字段名。这些系统字段的功能有些类似于Oracle中的rownum和rowid等。 oid: 行的对象标识符(对象ID)。这个字段只有在创建表的时候使用了WITH OIDS,或者是设置了配置参数default_with_oids时出现。这个字段的类型是oid(和字段同名)。 tableoid: 包含本行的表的OID。这个字段对那些从继承层次中选取的查询特别有用,因为如果没有它的话,我们就很难说明一行来自哪个独立的表。tableoid可以和pg_class的oid字段连接起来获取表名字。 xmin: 插入该行版本的事务的标识(事务ID)。 cmin: 在插入事务内部的命令标识(从零开始)。 xmax: 删除事务的标识(事务ID),如果不是被删除的行版本,那么是零。 cmax: 在删除事务内部的命令标识符,或者是零。 ctid: 一个行版本在它所处的表内的物理位置。请注意,尽管ctid可以用于非常快速地定位行版本,但每次VACUUM FULL之后,一个行的ctid都会被更新或者移动。因此ctid是不能作为长期的行标识符的。 OID是位的量,是在同一个集群内通用的计数器上赋值的。对于一个大型或者长时间使用的数据库,这个计数器是有可能重叠的。因此,假设OID是唯一的是非常错误的,除非你自己采取了措施来保证它们是唯一的。如果你需要标识表中的行,我们强烈建议使用序列号生成器。 三、表的修改:

1. 增加字段: 新增的字段对于表中已经存在的行而言最初将先填充所给出的缺省值(如果你没有声明DEFAULT子句,那么缺省是空值)。 在新增字段时,可以同时给该字段指定约束。 2. 删除字段: 如果该表为被引用表,该字段为被引用字段,那么上面的删除操作将会失败。如果要想在删除被引用字段的同时级联的删除其所有引用字段,可以采用下面的语法形式。 3. 增加约束: 4. 删除约束: 对于显示命名的约束,可以根据其名称直接删除,对于隐式自动命名的约束,可以通过psql的d tablename来获取该约束的名字。和删除字段一样,如果你想删除有着被依赖关系地约束,你需要用CASCADE。一个例子是某个外键约束依赖被引用字段上的唯一约束或者主键约束。如: 和其他约束不同的是,非空约束没有名字,因此只能通过下面的方式删除: 5. 改变字段的缺省值: 在为已有字段添加缺省值时,不会影响任何表中现有的数据行, 它只是为将来INSERT命令改变缺省值。 下面为删除缺省值: 6. 修改字段的数据类型: 只有在字段里现有的每个项都可以用一个隐含的类型转换转换成新的类型时才可能成功。比如当前的数据都是整型,而转换的目标类型为numeric或varchar,这样的转换一般都可以成功。与此同时,PostgreSQL还将试图把字段的缺省值(如果存在)转换成新的类型, 还有涉及该字段的任何约束。但是这些转换可能失败,或者可能生成奇怪的结果。 在修改某字段类型之前,你最好删除那些约束,然后再把自己手工修改过的添加上去。 7. 修改字段名: 8. 修改表名: 四、权限:

只有表的所有者才能修改或者删除表的权限。要赋予一个权限,我们使用GRANT命令,要撤销一个权限,使用REVOKE命令。 需要指出的是,PUBLIC是特殊"用户"可以用于将权限赋予系统中的每一个用户。在声明权限的位置写ALL则将所有的与该对象类型相关的权限都赋予出去。 最初,只有对象所有者(或者超级用户)可以赋予或者撤销对象的权限。但是,我们可以赋予一个"with grant option"权限,这样就给接受权限的人以授予该权限给其它人的权限。如果授予选项后来被撤销,那么所有那些从这个接受者接受了权限的用户(直接或者通过级连的授权)都将失去该权限。

这里需要特别说明的是,该博客中的大部分案例和段落均取自于PostgreSQL中文文档,如转载本系列博客,请同样注明该出处。

PostgreSQL教程(三):表的继承和分区表详解 一、表的继承:这个概念对于很多已经熟悉其他数据库编程的开发人员而言会多少有些陌生,然而它的实现方式和设计原理却是简单易懂,现在就让我

PostgreSQL教程(二):模式Schema详解 一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的

PostgreSQL教程(四):数据类型详解 一、数值类型:下面是PostgreSQL所支持的数值类型的列表和简单说明:1.整数类型:类型smallint、integer和bigint存储各种范围的全部是数字的数,也就是没

标签: PostgreSQL教程(一):数据表详解

本文链接地址:https://www.jiuchutong.com/biancheng/312237.html 转载请保留说明!

上一篇:Postgresql ALTER语句常用操作小结

下一篇:PostgreSQL教程(三):表的继承和分区表详解

  • 证券交易印花税税率是多少
  • 预缴企业所得税计税依据
  • 电费为什么计入成本费用
  • 社保可以抵扣什么税
  • 网上社保增减员操作流程
  • 调研费包括哪些科目
  • 食堂支付的现金怎么入账
  • 小企业货币资金1710元正常吗
  • 公司净资产如何查询
  • 以股权入股要交税吗?
  • 事业单位经营结余为负数的原因
  • 上海房产税如何退税
  • 特殊行业会计公司排名
  • 现金流量表的填制方法和构成
  • 公司为员工负担个税怎么做账
  • 我的初级备考经历怎么写
  • 垃圾处理站利润
  • 是否所有电池产品都需在进口环节缴纳消费税?
  • 免税农产品购进怎么做账
  • 安全生产费开工前支付
  • 收到投资分红怎么做账务处理?
  • 铁路货物运输代理
  • 分公司收到总公司利润分录怎么写
  • 补缴增值税怎么做账
  • 网线超五类好还是六类好
  • windows server 2016 配置web网页
  • 原材料明细账有记税吗
  • 写一个php访问数据库并读取数据的脚本
  • vue中computed和watch区别
  • 常用激活函数及其导数
  • php array_fill
  • 应交税费应交增值税销项税额
  • phpcms怎么用
  • 固定资产转为投资性房地产属于会计政策变更
  • 净现值与原始投资额现值
  • 房地产企业的开发成本和开发费用有什么区
  • 对方不给开发票做账可以直接出费用吗?
  • 建筑公司包含哪些业务
  • 座谈会费用报销明细怎么填写
  • 删除python包
  • python字符串方法总结
  • 主营业务成本应交税费
  • 金蝶利润表没有信用减值损失
  • 简述银行存款对应的业务
  • 建筑工程维修费占总费用多少
  • 疫情期间提涨薪合适吗
  • 一般纳税人外地预缴税率
  • 土地增值税是什么税种类型
  • 背书转让的操作
  • 工作失误扣工资
  • 上年度固定资产费用化了,财报怎么算
  • 什么是盈余公积和资本公积
  • 收到第三方补助怎么做账
  • 商品销售企业成本包括
  • 其他应付款是否能大于收入
  • 存货报废会计账务处理
  • 支付给职工以及为职工支付的现金增加
  • 用企业管理器创建一个备份设备
  • linux/mac安装mysql忘记密码的解决办法
  • mysql 元组
  • ubuntu怎样
  • linuxvi编辑器三种模式
  • lsass exe
  • win7出现蓝屏如何解决
  • win10raw预览
  • xp的开始菜单
  • 苹果MaC系统查找微信储存文件
  • win8如何到桌面
  • win10提醒功能
  • js内置对象方法有哪些
  • android性能指标
  • 深入解读我本是高山
  • python数字运算规则
  • jq filter过滤
  • javascript面向对象精要pdf
  • android获取屏幕内容
  • 重庆办理4050社保需要什么材料
  • 2022年安徽城镇非私营单位平均工资
  • 陕西省税务局袁小平简介
  • 防疫物资开票免税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设