postgresql笔记013—省缺值

数据定义中的省缺值

一个字段可以赋予省缺值。如果新创建了一个数据行,而又写字段的数值没有声明,那么这些字段将被填充为他们各自的省缺值。
一条数据修改命令也可以明确地要求把一个字段设置为它的省缺值,而不需要事先知道这个省缺值是什么。

如果没有明确声明省缺值,那么省缺值是NULL。这么做通常是合理的,因为NULL表是未知。

在一个表定义里,省缺值是在字段数据类型后面列出的。
案例:

create table products(
	product_no integer,
	name text,
	price numeric default 20.00
);

省缺值可以是一个表达式 它会在插入省缺值的时候计算。一个常见的例子是一个timestamp字段可能有省缺值 current_timestamp, 它表示插入行的时刻。另外一个常见的例子是为每一行生成一个序列号。
在postgresql中,其实现方式:

create table products(
	product_no integer default nextval('products_product_no_seq'),
	...
);

这里的nextval()从一个序列对象提供后继的数值。这种做法非常普遍,以至于我们有一个专门的缩写用于此目的:

create table products(
	product_no serial,
	...
);

拓展:

序列号类型

smallserial,serial 和bigserial类型不是真正的类型,只是为在表中创建唯一标识做的概念上的便利。
类其他一些数据库中的auto_increment属性。
案例:

create table tablename(
	column serial
);

等价于声明下面几个语句

create sequence tablename_colname_seq;
create table tablename(
	colname integer not null default nextval('tablename_colname_seq')
);
alter sequence tablename_colname_seq owned by tablename.colname;

因此,我们就常见了一个整数字段,并且把它的省缺数值安排为从一个序列发生器读取。应用了一个not null约束以确保 null 不会被插入。
在大多数情况下,我们可能还会附加一个unique 或者primary key约束避免以外的插入重复的数值,但是这个不是自动的。
最后,将序列发生器从属于那个字段,这样当该字段或者表被删除的时候也一并删除它。

要在serial字段中插入序列中的下一个数值,主要是要注意serial字段应该赋予省缺值。
我们可以通过在insert语句中把该字段排除在字段列表之外来实现,也可以通过使用default关键字来实现。

类型名serial和serial4是等效的,两者都创建integer字段。类型名bigserial和serial8也一样,只不过他创建一个bigint字段。如果你预估在表的生存期中使用的表示数目可能超过2的31次方个,那么你应该使用bigserial。 类型名smallserial和seria2是一样,只不过它创建一个smallint字段。
一个serial类型常见的序列在所属的字段被删除的时候自动删除。我们可以只删除徐磊而不删除字段,不过这将删除该字段的省缺值表达式。

好的,我可以和你分享一些关于 PostgreSQL 的学习笔记。 1. PostgreSQL 是什么? PostgreSQL 是一种开源的关系型数据库管理系统,它支持 SQL 语言和 ACID 事务处理,并且具有丰富的特性和扩展性,可用于大型企业应用、Web 应用和嵌入式应用。 2. PostgreSQL 的特点 PostgreSQL 具有以下特点: - 开源免费 - 支持 ACID 事务处理 - 支持 SQL 语言 - 支持复杂查询和数据类型 - 支持存储过程和触发器 - 可以扩展和定制 - 可以跨平台运行 3. PostgreSQL 的安装 在 Windows 平台下,可以从官网下载 Windows 安装程序进行安装。在 Linux 平台下,可以使用包管理器安装,例如 Ubuntu 可以使用以下命令进行安装: ``` sudo apt-get install postgresql ``` 4. PostgreSQL 的基本操作 创建数据库: ``` CREATE DATABASE databasename; ``` 创建表: ``` CREATE TABLE tablename ( column1 datatype, column2 datatype, column3 datatype, .... ); ``` 插入数据: ``` INSERT INTO tablename (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 查询数据: ``` SELECT column1, column2, ... FROM tablename WHERE condition; ``` 更新数据: ``` UPDATE tablename SET column1 = value1, column2 = value2, ... WHERE condition; ``` 删除数据: ``` DELETE FROM tablename WHERE condition; ``` 5. PostgreSQL 的扩展 PostgreSQL 可以通过扩展来增强其功能,例如: - PostGIS:空间数据处理扩展 - PL/Python:Python 语言扩展 - pgAdmin:可视化管理工具 - pgpool-II:连接池和负载均衡工具 以上就是一些关于 PostgreSQL 的基本学习笔记,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值