PostgreSQL教程(四):数据类型的详细解释

PostgreSQL教程(四):数据类型的详细解释
1。数值类型

以下是名单和数字类型支持PostgreSQL的简单描述:
1。整数类型:

SmallInt类型,整数,和bigint店在所有范围,数字的号码,没有分数。试图存储值超出范围将导致错误。常见的类型是整型的,因为它提供了最佳的平衡点之间的范围内,存储空间性能。SmallInt通常只有当磁盘空间紧张的应用。bigint是只有整数的范围是不够的,因为前者(整数)快得多。

2。任意精度值:

类型数字可以存储高达1000位的精度和精确计算,因此它非常适合于货币数量和其他需求的精确数量,但是,数字类型的算术运算要比整数类型或浮点数类型要慢得多。

数字字段的最大精度和最大比例是可配置的。为了声明类型数字字段,可以使用以下语法:

复制代码代码如下所示:

数值(精度,刻度)
例如,数字23.5141的精度为6,刻度为4。

在PostgreSQL的当前版本,decimal和numeric是等价的。
三.浮点数类型:

实数据类型和双数据类型是不精确的、牺牲的数字类型,不准确意味着某些值不能准确转换成内部格式并以近似形式存储,因此在存储后打印数据可能会显示一些丢失。
4。串行(序列号)类型:

串行和bigserial类型并不是真正的类型,但只有表中设置一个独特的身份概念的方便。

复制代码代码如下所示:

创建表(表名

ColName系列

);
相当于

复制代码代码如下所示:

创建序列tablename_colname_seq;

创建表的语句(

默认的nextval('tablename_colname_seq ColName整数的)不为空

);
在这种方式中,我们创建一个整型字段并安排其默认值从一个序列发生器得到的价值。一个非空约束应用于保证空值不插入。在大多数情况下,您可能还需要附加一个唯一或主键约束,避免无意中插入重复的值,但这不会自动发生。所以如果你想要一个序列字段有一个独特的约束或主键,你必须声明它的现在,就像任何其他数据类型。

还需要进一步解释说,一个序列的序列类型创建时,它将自动删除字段被删除,但它不会在其他情况下删除。因此,如果你想使用相同的序列发生器的几个领域同时提供数据,你应该建立在独立的对象这样的序列发生器。

二、字符类型:

以下是清单和支持PostgreSQL的字符类型的简单描述:
SQL中定义了两个基本字符类型,varchar(n)和char(n),其中n是一个正整数。两类型可以存储多达N个字符的字符串,试图储存更长的字符串到这些类型的领域将产生一个错误,除非超出长度的字符是空白的,在这种情况下,的将截断字符串的最大长度。如果没有长度的宣言,字符等于char,varchar(1),可以接受任意长度的字符串。

复制代码代码如下所示:

考试= >创建表的数据(first_col varchar(2));

创建表

考试= >插入数据值('333 ');-插入字符串的长度超过其字段定义的长度,所以错误报告

错误:类型字符变化值太长(2)

在插入字符串中,超出字段定义长度的部分是空格,因此可以插入空格,但空格字符被截断。

考试= >插入的数据值(分33秒);

插入01

考试= > SELECT * FROM TestTable表;

first_col



三十三

(1行)
需要注意的是,如果我们将该值转换为char重要(N)或varchar(n),超长的值将被截断为N而不是把错误的字符。

复制代码代码如下所示:

考试= >选择1234::varchar(2);

varchar



十二

(1行)
最后需要注意的是,有三种类型之间没有性能上的差异,但只有当存储容量增加时,char类型使用。虽然在其他数据库系统中,char(n)具有一定的性能优势,但不是在PostgreSQL。在大多数情况下,应该使用文本或varchar。
三,日期/时间类型:

以下是列表和简单的描述的日期/时间的PostgreSQL支持的类型:
1。日期/时间输入

任何日期或时间的文本输入都需要由一个引号组成,就像一个文本字符串。

1)。戴特:

以下是合法日期格式的列表:
2)。时间:

以下是时间格式的合法列表:
3)。时间戳:

该时间戳类型有效的输入包括一个日期和时间的连接,其后是一个可选的时间。因此,无论是1999-01-08 04:05:06和1999-01-08 04:05:06 - 8是有效的值。
2。例子:

1)。插入数据之前检查的datestyle系统变量的值:

复制代码代码如下所示:

考试= >显示datestyle;

datestyle



ISO,YMD

(1行)
2)。创建包含日期、时间和时间戳类型的示例表:

复制代码代码如下所示:

考试= >创建表的数据(ID的整数,date_col日期,time_col时间,timestamp_col时间戳);

创建表
3)。插入数据:

复制代码代码如下所示:

考试= >插入数据(ID,date_col)值(1,日01 / 02 / 03);——datestyle为宜

插入01

考试= >选择ID,date_col从数据;

我date_col |

---- + ------------

1 | 2001-02-03

(1行)
考试= >设置datestyle = MDY;



考试= >插入数据(ID,date_col)值(2,日01 / 02 / 03);——datestyle为MDY

插入01

考试= >选择ID,date_col从数据;

我date_col |

---- + ------------

1 | 2001-02-03

2 | 2003-01-02

考试= >插入数据(ID,time_col)值(3,时间'10:20:00 ');插入时间。

插入01

考试= >选择ID,从哪里time_col数据不为空time_col;

我time_col |

---- + ----------

3 | 10:20:00

(1行)

考试= >插入数据(ID,timestamp_col)值(4,日01 / 02 / 03);

插入01

考试= >插入数据(ID,timestamp_col)值(5,时间戳01 / 02 / 03 10:20:00);

插入01

考试= >选择ID,从哪里timestamp_col数据不为空timestamp_col;

我timestamp_col |

---- + ---------------------

4 | 2003-01-02 00:00:00

5 | 2003-01-02 10:20:00

(2行)
四。布尔型:

PostgreSQL支持标准SQL布尔数据类型,布尔只能有两个状态:真(true)或假(false)。这种类型占用1字节。

值的有效文本值是:

复制代码代码如下所示:

真的

T

真正的

Y

是的

1
并为false

复制代码代码如下所示:

错误的

F

'假'

N



0
请参见使用方式如下:

复制代码代码如下所示:

考试= >创建表的数据(一个布尔值,文本);

创建表

考试= >插入数据值(真的,'sic EST);

插入01

考试= >插入数据值(假,无科技);

插入01

考试= > SELECT * FROM TestTable表;

B |

--- + ---------

T | SiC EST

F非EST |

(2行)

考试= >选择*从数据的地方;

B |

--- + ---------

T | SiC EST

(1行)

考试= > SELECT * FROM TestTable表在=真;

B |

--- + ---------

T | SiC EST

(1行)
五。位串类型:

一个字符串是一个系列的1和0,它们可以用于存储和显示的位掩码。我们有两种类型的SQL类型:点位(N)和位变(n);n是正整数,比特的数据类型必须精确匹配长度N;这是错误的去商店或长或短的数据类型不同的数据点,最长的N最长的变异;更长的字符串将被拒绝。写一点没有长度相当于点(1),和位变无长度相当于没有长度限制。

这种类型,提醒的最后一件事是,如果我们明确地将字符串值点(n),其右侧将截断或零点右边直到N位,并没有将出现错误。同样,如果我们明确地将字符串值点不同(n),如果超过n位,那么就将被截断。看下面的具体运用:

复制代码代码如下所示:

考试= >创建表的数据(一个点(3),B点不同(5));

创建表

考试= >插入的数据值(B '101,B分);

插入01

考试= >插入的数据值(b 10',B '101);

错误:位串长度2与类型位不匹配(3)

考试= >插入的数据值(b 10':点(3),B '101);

插入01

考试= > SELECT * FROM TestTable表;

B |

----- + -----

101 | 00

100 | 101

(2行)

考试= >选择B会'::点(3);





一百一十

(1行)
六。阵列:

1。数组类型声明:

1)。创建字段包含数组类型表。

复制代码代码如下所示:

创建表(sal_emp

名称文本,

pay_by_quarter整数{ },也可以定义为整数或整数数组{ 4 } { 4 }

);
2)。插入数组数据:

复制代码代码如下所示:

考试= #插入sal_emp值(比尔、{ 11000, 12000, 13000,14000 });

插入01

考试= #插入sal_emp值('carol,数组{ 21000, 22000, 23000,24000 });

插入01

考试= # SELECT * FROM sal_emp;

名称pay_by_quarter |

-------- + ---------------------------

比尔11000120001300014000 | { }

凯罗尔21000220002300024000 | { }

(2行)
2。访问数组:

像其他语言,PostgreSQL是数字数组下标(写在方括号的方式)的访问,只有从阵列PostgreSQL N 1开始的结束。

复制代码代码如下所示:

考试= #选择pay_by_quarter { 3 }从sal_emp;

pay_by_quarter

----

一万三千

二十三万

(2行)

考试= #选择的名字从sal_emp哪里pay_by_quarter { 1 } pay_by_quarter { 2 };

名称



比尔

颂歌

(2行)
访问数组范围的功能还提供了在PostgreSQL,即降低{脚数组界限:脚的上界。

复制代码代码如下所示:

考试= #选择名字,pay_by_quarter { }从sal_emp 1:3;

名称pay_by_quarter |

-------- + ---------------------

比尔{ 110001200013000 } |

凯罗尔{ 210002200023000 } |

(2行)
三.修改数组:

1)。而不是所有数组值:

复制代码代码如下所示:

更新sal_emp集pay_by_quarter =数组{ 25000250002700027000 } name = 'carol ';好。

考试= #更新sal_emp集pay_by_quarter ={ 31000320003300034000 }name = 'carol;

更新1

考试= # SELECT * FROM sal_emp;

名称pay_by_quarter |

-------- + ---------------------------

比尔11000120001300014000 | { }

凯罗尔31000320003300034000 | { }

(2行)
2)。更新数组中的元素:

复制代码代码如下所示:

考试= #更新sal_emp集pay_by_quarter { 4 } = 15000 =比尔的名字;

更新1

考试= # SELECT * FROM sal_emp;

名称pay_by_quarter |

-------- + ---------------------------

凯罗尔31000320003300034000 | { }

比尔11000120001300015000 | { }

(2行)
3)。更新范围内的元素数组:

复制代码代码如下所示:

考试= #更新sal_emp集pay_by_quarter { } = 1:2{ 3700037000 }name = 'carol;

更新1

考试= # SELECT * FROM sal_emp;

名称pay_by_quarter |

-------- + ---------------------------

比尔11000120001300015000 | { }

凯罗尔37000370003300034000 | { }

(2行)
4)。扩展数组的直接赋值:

复制代码代码如下所示:

考试= #更新sal_emp集pay_by_quarter { 5 } = 45000 =比尔的名字;

更新1

考试= # SELECT * FROM sal_emp;

名称pay_by_quarter |

-------- + ---------------------------------

凯罗尔37000370003300034000 | { }

比尔1100012000130001500045000 | { }

(2行)
4。在数组检索中:

1)。最简单直接的方法

复制代码代码如下所示:

SELECT * FROM sal_emp哪里pay_by_quarter { 1 } = 10000

pay_by_quarter { 2 } = 10000

pay_by_quarter { 3 } = 10000

pay_by_quarter { 4 } = 10000;
2)。更有效的方法:

复制代码代码如下所示:

SELECT * FROM sal_emp 10000 =任何(pay_by_quarter);--任何数组元素等于10000,有条件的地方将设立。

SELECT * FROM sal_emp 10000 =所有(pay_by_quarter);-在条件唯一确定的只有数组中的所有元素都等于10000。
七。复合型:

在PostgreSQL,复合型的C语言结构的相似性。它也可以被看作是甲骨文中的记录类型,但它仍然感觉到复合类型。这个命名是比较合适的。它实际上只是一个字段名称列表和它们的数据类型复杂types.postgresql允许使用简单的数据类型,例如,表的字段可以被声明为一个复合型。

1。复合类型声明:

这里有两个简单的声明:

复制代码代码如下所示:

创建类型复杂(如

R双,

我的双

);

创造型inventory_item(如

名称文本,

supplier_id整数,

价格数字

);
与声明数据表相比,在添加声明类型时,需要使用关键字,并且在声明类型时不能定义约束。我们来看看如何在表中指定复合类型字段,例如:

复制代码代码如下所示:

创建表(on_hand

项目inventory_item,

数的整数

);
最后,当你创建一个表,它会自动创建一个表的复合型,具有相同名称的表,该表表明复合型。
2。复合型值输入:

我们可以使用文本常量表示复合类型值,也就是说,在圆括号中包围字段值并用逗号分隔。如果值本身包含逗号或括号,则会用双引号括起来。上述inventory_item复合式输入如下:

复制代码代码如下所示:

(模糊骰子
如果所需类型中的某个字段为null,则仅在其相应位置不输入,如以下输入中的字段值为null,

复制代码代码如下所示:

(模糊骰子
如果只需要一个空字符串而不是null,那么就写一对双引号,比如:

复制代码代码如下所示:


在许多情况下,PostgreSQL建议行表达式构建复合型值的使用。这种方式比较简单,不考虑更多的识别字符,如:

复制代码代码如下所示:

行('fuzzy骰子,42,1.99)

行(,42,空)
注意:对于行表达式,如果字段中的字段数大于1,则关键字行可以省略,因此可以将上述表单简化为:

复制代码代码如下所示:

('fuzzy骰子,42,1.99)

(42,空)
三.访问复合类型:

在复合类型中访问字段和访问数据表中的字段在表单上非常相似,只是为了区分两者。当PostgreSQL设置领域进入复合型、型部分需要括号包围,从而避免混乱。

复制代码代码如下所示:

选择(项目)名称从on_hand哪里(项目)价格>9.99;
如果查询中还需要表名,则表名和类型名称需要括在括号中,如:

复制代码代码如下所示:

选择(on_hand。项目)。名字来自哪里on_hand(on_hand。项目价格>9.99);
4。修改复合类型:

请看下面的例子:

复制代码代码如下所示:

-直接插入由行表达式完成的复合数据类型。

插入on_hand(项)值(行(模糊骰子

在更新操作中,它也可以通过行表达式完成。

更新on_hand设置项目=行(模糊骰子

-在更新复合类型中的字段时,不能在设置后出现的字段名称周围添加圆括号。

但是,当在等号右边的表达式中引用同一个字段时,需要括号。

更新on_hand集item.price =(项目)。价格在数= 0 + 1;

-可以直接在复合类型中插入字段。

插入on_hand(item.supplier_id,项目价格)值(100,2.2);
这个博客是在PostgreSQL官方文件数据类型章节简单概括。我们之所以使用这个博客不仅是为了系统学习,而且是为了将来的快速访问。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部