位置: 编程技术 - 正文

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教程(三):表的继承和分区表详解

  • 加计扣除填不了
  • 服务类一般纳税人无进项
  • 缴个人所得税分录怎么写
  • 总公司和分公司可以在一个城市吗
  • 固定资产怎么确定是否减值
  • 市政绿化工程的施工方案
  • 收到代发工资的信息
  • 当月费用次月收到发票
  • 亏损 纳税
  • 甲公司存货采用实际成本法核算
  • 2021年旅游免费
  • 发票领用簿怎么领发票
  • 外购货物准予抵扣进项税额26万元,货物已验收入库
  • 股息红利纳税地点
  • 外币投入的资本
  • 租车补贴记入工资的会计处理怎么做?
  • 行政单位的会计要素
  • 消费税增值税如何调整?
  • 中标服务费直接按开票金额付款吗
  • 手写发票税率
  • 资产负债率怎么计算
  • 政府补贴冲减资产原值
  • 什么情况增值税专用发票不能抵扣
  • 个体户如何办税
  • 累计折旧的计提和处理的分录
  • 购买税控设备,享受何种优惠政策
  • 华为鸿蒙怎么看手机型号
  • 带息票据贴现如何计算
  • 预付工程款如何计提坏账
  • 运输公司转包业务怎么开票
  • win10专业版下载教程
  • php语言之面向对象编程 educoder
  • 怎么修改wifi密码视频教程
  • 可以转增资本的有哪些科目
  • php require include
  • 挂账多年的往来账怎么处理
  • 设置pin是什么意思
  • 贷款的减值会计怎么做账
  • phpunit
  • 用jsp实现用户登录验证
  • 投资收益主要来源于
  • 发票查询密码区空白怎么回事
  • 主营业务收入未收到钱
  • 公司收到个人汇款怎么开发票
  • 计提坏帐包含其他收入吗
  • sql server 18486
  • 怎么计算利润的百分比
  • 个人提供的劳务费要开发票,但是薪资不需要开发票
  • 未分配利润与利润表的勾稽关系
  • 小企业固定资产入账标准
  • 暂估成本以后也没有票回来了
  • 甲方代付农民工工资谁报个税
  • 企业信息页
  • 三方抵账协议做什么科目
  • mysql 连续日期
  • win8装不了itunes
  • linux系统对硬件要求高吗
  • fedora14虚拟机安装教程
  • debian 使用
  • win7系统鼠标右键无法弹出菜单
  • raid主要使用三种技术
  • gwsloader.exe是什么意思
  • win8系统开机启动项怎么设置
  • win7系统打开文件会闪退
  • windows 8
  • linux tee命令详解
  • linux中的vi编辑器一般有哪三个模式
  • 编辑器ui
  • Python+Wordpress制作小说站
  • js for循环给数组赋值
  • 如何判断安卓手机
  • 如何python
  • 保险公司代收2.8万
  • 深圳如何打印个人参保证明
  • 材料费增值税发票几个点
  • 生产变压器设备
  • 车船税完税证明开具如何开具
  • 村纪检书记主要工作
  • 源泉扣缴通俗
  • 国家税务总局176号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设