位置: 编程技术 - 正文

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

  • 高新技术企业享受15%税率优惠的条件
  • 研发费用成本化和费用化
  • 所得税费用在利润表中应在税金及附加项目中填列
  • 税务登记财务负责人可以是法人吗
  • 长期股权投资超过50%
  • 关联方往来款项余额
  • 固定资产原值减少账务处理
  • 出口退税操作明细表格
  • 城镇土地使用税减免税政策
  • 开具红字增值税专用发票是什么意思
  • 土地闲置费可以税前扣除吗
  • 公司从事房地产有什么好名字
  • 退税差额怎么做账
  • 环保费用计入哪个科目
  • 高杠杆资金是什么意思
  • 饮料厂税率
  • 水费差额征税税率
  • 佳能2900打印机加碳粉教程
  • 支付宝安全控件是什么
  • 土地增值税清算收入如何确定
  • php 字符串函数
  • 代理业务资产的意思
  • vue登录页面点击登录进入首页
  • 收到现金股利或债券利息时会计分录
  • php 输出
  • 融资租赁业务增资扩股
  • 抵扣认证发票统计确认后可以退回吗?
  • ajax调用
  • javaweb入门简单小项目
  • html的标签大全
  • thinkphp 分页
  • init 6命令
  • php源码破解
  • python uiautomator2的点击操作
  • 高新技术企业相关税收政策
  • 劳务费发票为什么必须每月开
  • access创建一个表
  • 企业合并财务报表论文
  • 企业所得税成本核定
  • sqlserver2005安装后怎么打开
  • 财务费用账户属于什么账户
  • 资产负债表可以反映的具体信息有
  • 房地产企业成本结转
  • 其他综合收益的来源
  • 公司对员工的罚款用途
  • 餐饮企业餐具计入什么科目
  • 长期股权投资应计提减值准备的金额
  • 营改增后建筑劳务分包开票一般几个点
  • 利息保障倍数多少算正常
  • 可转换债券的转换比率计算公式
  • 汇算清缴亏损弥补不能自动带出该怎么办
  • 现金和银行存款的区别
  • 微信扣除手续费超过多少免费
  • 政府补助的分类及会计处理方法
  • 商业资本金
  • MySQL5.7 windows二进制安装教程
  • mysql优化实战
  • 在centOS 7安装mysql 5.7的详细教程
  • linux的日志文件
  • cmos密码是什么
  • windows windows.old
  • MacOS X Yosemite升级后postgresql启动报错的解决办法
  • linux chkdsk
  • win7旗舰版怎么改成专业版
  • centos更新yum update
  • rds是啥
  • windows8触屏功能
  • bzip2 bunzip2 bzcat参数使用
  • win7修改用户密码命令
  • 彻底理解样本方差为何除以n-1
  • javascript语言入门教程
  • sqlserver 服务器
  • django应用开发实战
  • 我置顶你也只顶你
  • linux装python环境
  • 怎么在移动官网上复机
  • 目前光伏太阳能组件产量最高的国家是( )
  • 专票购买方是对方公司吗
  • 如何打印个人所得税的税单
  • 昆山国税局上班时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设