首页 > 数据库 >PostgreSQL 管理数据表(一)

PostgreSQL 管理数据表(一)

时间:2023-07-05 10:25:04浏览次数:56  
标签:PostgreSQL name 管理 约束 数据表 emp NULL id

创建表

在PostgreSQL中,使用CREATE TABLE语句创建一个新表:

CREATE TABLE table_name
(
    column_name data_type column_constraint,
    column_name data_type,
     ...,
    table_constraint
);

建表语句说明

  • 首先,table_name指定了新表的名称。
  • 括号内是字段的定义,column_name是字段的名称,data_type是它的类型,column_constraint是可选的字段约束;多个字段使用逗号进行分隔。
  • 最后,table_constraint是可选的表级约束

建表示例

CREATE TABLE departments
(
    department_id   INTEGER               NOT NULL PRIMARY KEY,
    department_name CHARACTER VARYING(30) NOT NULL
);

以上语句创建了一个新的部门表(departments)。它包含两个字段,部门编号(dept_id)是一个整数类型(INTEGER),字段的值不可以为空(NOT NULL),同时它还是这个表的主键(PRIMARY KEY);部门编号(dept_name)是一个可变长度的字符串,也不允许为空。

PostgreSQL提供了丰富的内置数据类型,同时还允许用户自定义数据类型。最常见的基本数据类型包括:

  • 字符类型,包括定长字符串CHAR(n),变长字符串VARCHAR(n),以及支持更大长度的字符串TEXT。
  • 数字类型,包括整数类型SMALLINT、INTEGER、BIGINT,精确数字NUMERIC (p, s),浮点数REAL、DOUBLE PRECISION。
  • 时间类型,包括日期DATE、时间TIME、时间戳TIMESTAMP。

PostgreSQL支持SQL标准中的所有字段约束和表约束。其中,字段约束包括:

  • NOT NULL,非空约束,该字段的值不能为空(NULL);
  • UNIQUE,唯一约束,该字段每一行的值不能重复。不过,PostgreSQL允许该字段存在多个NULL值,并且将它们看作不同的值。需要注意的是SQL标准只允许UNIQUE字段中存在一个NULL值;
  • PRIMARY KEY,主键约束,包含了NOT NULL约束和UNIQUE约束。如果主键只包含一个字段,可以通过列级约束进行定义(参考上面的示例);但是如果主键包含多个字段(复合主键)或者需要为主键指定一个自定义的名称,需要使用表级约束进行定义(参见下文示例);
  • REFERENCES,外键约束,字段中的值必需已经在另一个表中存在。外键用于定义两个表之间的参照完整性(referential integrity),例如,员工的部门编号字段必须是一个已经存在的部门;
  • CHECK,检查约束,插入或更新数据时检查数据是否满足某个条件。例如,产品的价格必需大于零;
  • DEFAULT,默认值,插入数据时,如果没有为这种列指定值,系统将会使用默认值代替;

表级约束和字段约束类似,只不过它是基于整个表定义的约束,还能够为约束指定自定义的名称。PostgreSQL支持的表级约束包括

  • UNIQUE(column1, ...),唯一约束,括号中的字段值或字段值的组合必须唯一。
  • PRIMARY KEY(column1, ...),主键约束,定义主键或者复合主键。
  • REFERENCES,定义外键约束。
  • CHECK,定义检查约束。

以下示例创建了员工表(employees)

CREATE TABLE employees
(
    employee_id    INTEGER               NOT NULL,
    first_name     CHARACTER VARYING(20),
    last_name      CHARACTER VARYING(25) NOT NULL,
    email          CHARACTER VARYING(25) NOT NULL,
    phone_number   CHARACTER VARYING(20),
    hire_date      DATE                  NOT NULL,
    salary         NUMERIC(8, 2),
    commission_pct NUMERIC(2, 2),
    manager_id     INTEGER,
    department_id  INTEGER,
    CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id),
    CONSTRAINT emp_salary_min CHECK (salary > 0),
    CONSTRAINT emp_email_uk UNIQUE (email),
    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments (department_id),
    CONSTRAINT emp_manager_fk FOREIGN KEY (manager_id) REFERENCES employees (employee_id)
);
员工表包含以下字段和约束:
  • employee_id,员工编号,整数类型,主键(通过表级约束为主键指定了名称 emp_emp_id_pk);
  • first_name,名字,字符串;
  • last_name,姓氏,字符串,不能为空;
  • email,电子邮箱,字符串,不能为空,必须唯一(emp_email_uk);
  • phone_number,电话号码,字符串;
  • hire_date,雇佣日期,日期类型,不能为空;
  • salary,薪水,数字类型,必须大于零(emp_salary_min);
  • commission_pct,佣金百分比,数字类型;
  • manager_id,经理编号,外键(通过外键emp_manager_fk引用员工表的员工编号);
  • department_id,部门编号,外键(通过外键emp_dept_fk引用部门表departments的编号department_id)
下图是这两个表的实体关系图

 除了自己定义表的结构之外,PostgreSQL还提供了另一个创建表的方法,就是通过一个查询的结果创建新表:

CREATE TABLE table_name AS query;
或
SELECT ...INTO new_table FROM ...;

例如,可以基于employees复制出两个新的表:

CREATE TABLE emp1 AS SELECT * FROM employees;
SELECT * INTO emp2 FROM employees;

模式搜索路径

在PostgreSQL中,表属于某个模式(schema)。当我们创建表时,更完整的语法应该是

CREATE TABLE schema_name.table_name...

访问表的时候也是一样。但是刚才在前面创建示例表的时候,并没有加上模式名称的限定。这里涉及到一个模式的搜索路径概念。现在先看一下当前的搜索路径

test=# show search_path;
   search_path   
-----------------
 "$user", public
(1 row)

搜索路径是一个逗号分隔的模式名称。当使用表的时候,PostgreSQL会依次在这些模式中进行查找,返回第一个匹配的表名;当创建一个新表时,如果没有指定模式名称,PostgreSQL会在第一个模式中进行创建。第一个模式默认为当前用户名,如果不存在该模式,使用后面的公共模式(public)

test=# select user;
   user   
----------
 postgres
(1 row)
test=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 hr     | wdh
 public | postgres

当前用户名为postgres,但是不存在名为postgres的模式,因此我们创建的表会位public模式中

test=# \d
            List of relations
 Schema |    Name     | Type  |  Owner   
--------+-------------+-------+----------
 public | departments | table | postgres
 public | employees   | table | postgres

可以通过SET命令修改默认的搜索路径:

test=# SET search_path TO hr,public;

此时,如果我们再创建新表而不指定模式名称时,默认会在模式hr中创建。除了表之外,其他的模式对象,例如索引、函数、类型等等,也遵循相同的原则。

标签:PostgreSQL,name,管理,约束,数据表,emp,NULL,id
From: https://www.cnblogs.com/wdh01/p/17231155.html

相关文章

  • PostgreSQL 管理数据表(三)
    删除约束删除约束通常需要知道它的名称,可以通过psql工具的\dtable_name命令查看表的约束。ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name[RESTRICT|CASCADE];RESTRICT是默认值,如果存在其他依赖于该约束的对象,需要使用CASCADE执行级联删除。例如,外键约束依赖......
  • DevExpress WPF Scheduler组件,快速构建性能优异的调度管理器!(下)
    在上文中(点击这里回顾>>),我们介绍了DevExpressWPFScheduler组件中的日历视图、时间轴视图等,在本文中我们将继续带大家了解Scheduler组件的UI/UX自定义等其他功能。DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能......
  • 浅析EasyCVR视频技术与AR实景智能管理平台在智慧厂区中的应用
    一、背景分析新型智慧厂区是运用人工智能、大数据、物联网和设备监控技术加强厂区安保和信息管理。通过先进技术,保障厂区生产运营安全,同时减少生产线上的人工干预、及时正确地采集各类生产数据,以及合理的生产计划编排与生产进度,并且整合各业务系统数据资源,构建一个高效智能、绿色......
  • python-contextlib上下文管理器
    pythoncontextlib上下文管理器python-contextlib上下文管理器两大作用:--可以以一种更加优雅的方式,操作(创建/获取/释放)资源,如文件操作、数据库连接;--可以以一种更加优雅的方式,处理异常;读取文件的一般流程#打开文件f=open('file.txt')try:forlineinf:......
  • postgresql大表分批次删除
    [root@localhost~]#cat/root/delete_big_table.sh#!/bin/bash#$1对应表名,$2对应主键列,$3对应一次删除多少行i=`psql-h127.0.0.1-Upostgres-dtenant_1011046-c"selectceil(count(1)/${3}::float)from${1}whereplatcreatetime<'2023-04-3023:59:59'......
  • 从零到壹-API研发管理心得分享
    ❤️作者主页:小虚竹PC端左侧加我微信,进社群,有送书等更多活动!文章目录零、前言一、API研发管理1.1、什么是API研发管理1.2、痛点1.3、解决方案二、搭建部署及不同角色的关注点介绍2.1、下载安装2.2、开发管理创建项目及从第三方导入apiapi变更通知2.3、测试管理编写测试用例批量测试......
  • [引]CCAA ITSMS 信息技术服务管理体系基础考试大纲
    CCAA-TR-111-01信息技术服务管理体系基础考试大纲_中国认证认可协会 http://www.ccaa.org.cn/ksdg/644.html申请注册信息技术服务管理体系审核员实习级别的人员,需通过“信息技术服务管理体系基础”科目考试。2.2考试方式“信息技术服务管理体系基础”科目考试为闭卷考试,考......
  • 用户管理页面布局
    1.观察前端项目写一个用户管理页面,做查询系统,新增2.查询部分2.1.打开Element官网,查看相关的组件2.2.在user.vue文件中删除“用户管理”,放一个卡片样式进去2.3.两端间距,改大一些,修改section.app-main2.4.搜索栏缩短,加上搜索图标和新增图标2.5.将新增按钮放......
  • 关于mysql存储引擎、管理和维护概述
    数据库的存储引擎是数据库的底层软件组件,数据库管理系统使用数据库引擎进行增删查改的操作。mysql的核心就是数据库引擎。mysql5.7支持的存储引擎有innoDBMyISAMMemory可以通过showengines。InnoDB存储引擎:1.InnoDB给mysql提供了具有提交,回滚,崩溃恢复的功能的事务能力的安......
  • 10个轻量级CMS网站内容管理系统
    这里推荐的10个简单轻量级的网站内容管理系统对于每一个Web设计师和Web开发人员来说,都是简单易用的,是一般小型网站的可选实现方案,10个CMS系统各有特色。WolfCMS   WolfCMSsimplifiescontentmanagementbyofferinganelegantuserinterface,flexibletemplatingper......