数据定义 数据类型 布尔类型
到现在为止,我们致力于研究PostgreSQL的工具和数据操作。虽然我们在本书老早的地方就建立了一个数据库,我们只是肤浅地了解了建表和PostgreSQL中的数据类型。我们通过
使用主键和定义很少的几个不允许NULL值的列来简单定义我们的表。
在数据库中,我们最关注的就是数据的质量。针对数据执行非常严格的规则,通过数据库强制限制在最低级别,是我们可以用于保持数据一直的最好措施之一。这也是真正的数据
库区别于简单的索引文件、电子表格等的功能之一。
在本章,我们将更深入地学习PostgreSQL中的数据类型以及如何操作它们。然后我们将学习如何管理表,包括如何使用约束,这使我们能够大大加强在添加数据到数据库中的表或
从数据库中的表中删除数据时的规则。下一步,我们将简单学习视图。最后,我们将更深层次地学习外键约束并在建立我们更新版本的示例数据库时使用它们。我们将建立bpfinal
数据库,我们将在之后的章节中使用这个示例数据库。
在本章,我们将覆盖以下主题:
数据类型
数据操作
表管理
视图
外键约束
数据类型
在最基本的层面上,PostgreSQL支持以下类型的数据:
布尔
字符
数字
时间(基于时钟)
PostgreSQL扩展类型
二进制大对象(BLOB)
在这里,我们将学习它们每一个类型,除了非常少用的BLOB。如果你对BLOB类型感兴趣,可以在附录F查看怎么使用它。
布尔数据类型
布尔类型可能是最简单的类型。它只可以存储两个值,true和false,以及在值未知的时候,存储NULL。定义一个布尔类型的列的官方类型名为boolean,但它经常被缩写为简单的
bool。
当数据被插入表的布尔类型的列中时,PostgreSQL能非常灵活地解释将翻译成true和false的值。表8-1提供了一个可以接收的值的列表以及它们对应的值。除了NULL,其他的任何
值都将被拒绝。和SQL关键字一样,它们也是不区分大小写的;例如’TRUE’也将被翻译成布尔类型的ture。
表8-1 指定布尔值的方法
翻译为true 翻译为false
’1′ ’0′
‘yes’ ‘no’
‘y’ ‘n’
‘true’ ‘false’
‘t’ ‘f’
注:当PostgreSQL显示布尔类型列的内容是,它只会显示t,f和一个空格,分别代表true,false和NULL,而不管你设置这个列的值为什么(’true’,’y’,’t’等等)。因为
PostgreSQL值存储这些可能状态中的一个,不是存储你实际设置的这个列的值,而仅仅是翻译后的值。
尝试:使用布尔值
让我们建立一个简单的拥有bool列的表,然后用一些值做实验。与其用我们的bpsimple数据库使用我们的“真实”数据做测试,不然建立一个叫test的数据库。如果你使用了第三
章中的示例,你应该已经建立了这个数据库了,只需要连接到它。如果没有,你可以像下面这样建立并连接到它:
现在,我们建立一个叫testtype的表,拥有一个变长的字符串的列和一个布尔的列,插入一些数据,然后看看PostgreSQL存储了什么。以下是我们简短的psql会话:
让我们检查以确认数据被插入了:
test=> SELECT * FROM testtype;
valused | boolres
———+———
TRUE | t
1 | t
t | t
no | f
f | f
Nul |
FALSE | f
(7 rows)
test=>
解析
我们建立了一个有两个列的表testtype。第一个列保存一个字符串,第二个保存一个布尔值。我们然后插入数据到表中,每次都将第一个值设置为字符串,用以提示我们插入的值
,第二个为相同的值,但是将被存储为布尔值。我们还插入一个NULL,来展示PostgreSQL(不像至少一个商业数据库)允许在boolean类型中存储NULL。然后我们取出这些数据,这显示了PostgreSQL如何翻译每一个我们传入的作为true,false或者NULL的值。
本文转自: http://www.mysqlops.com/2012/05/06/postgresql-data-type-1.html