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

PostgreSQL 管理数据表(三)

时间:2023-07-05 10:24:31浏览次数:40  
标签:product PostgreSQL name 管理 price 数据表 products TABLE ALTER

删除约束

删除约束通常需要知道它的名称,可以通过psql工具的\d table_name命令查看表的约束。

ALTER TABLE table_name DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ];

RESTRICT是默认值,如果存在其他依赖于该约束的对象,需要使用CASCADE执行级联删除。例如,外键约束依赖于被引用字段上的唯一约束或主键约束。

删除产品表name字段上的唯一约束 

test=#  ALTER TABLE products DROP CONSTRAINT products_name_uk;
ALTER TABLE
test=# \d products;
                  Table "hr.products"
   Column   |  Type   | Collation | Nullable | Default 
------------+---------+-----------+----------+---------
 product_no | integer |           | not null | 
 name       | text    |           | not null | 
 price      | numeric |           |          | 
Indexes:
    "products_pkey" PRIMARY KEY, btree (product_no)
Check constraints:
    "products_price_min" CHECK (price > 0::numeric)

删除非空约束也需要使用单独的语法:

ALTER TABLE table_name ALTER COLUMN column_name DROP NOT NULL;

以下语句将会删除产品表name 字段上的非空约束:

test=# ALTER TABLE products ALTER COLUMN name DROP NOT NULL;
ALTER TABLE
test=# \d products;
                  Table "hr.products"
   Column   |  Type   | Collation | Nullable | Default 
------------+---------+-----------+----------+---------
 product_no | integer |           | not null | 
 name       | text    |           |          | 
 price      | numeric |           |          | 
Indexes:
    "products_pkey" PRIMARY KEY, btree (product_no)
Check constraints:
    "products_price_min" CHECK (price > 0::numeric)

修改字段默认值

如果想要为某个字段设置或者修改默认值,可以使用以下语句:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT value;

我们将为产品表的价格设置一个默认值

test=# ALTER TABLE products ALTER COLUMN price SET DEFAULT 8.88;
ALTER TABLE
test=# \d products;
                  Table "hr.products"
   Column   |  Type   | Collation | Nullable | Default 
------------+---------+-----------+----------+---------
 product_no | integer |           | not null | 
 name       | text    |           |          | 
 price      | numeric |           |          | 8.88
Indexes:
    "products_pkey" PRIMARY KEY, btree (product_no)
Check constraints:
    "products_price_min" CHECK (price > 0::numeric)

同样,可以删除已有的默认值:

ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;

以下语句可以删除产品表中的价格默认值:

test=# ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
ALTER TABLE
test=# \d products;
                  Table "hr.products"
   Column   |  Type   | Collation | Nullable | Default 
------------+---------+-----------+----------+---------
 product_no | integer |           | not null | 
 name       | text    |           |          | 
 price      | numeric |           |          | 
Indexes:
    "products_pkey" PRIMARY KEY, btree (product_no)
Check constraints:
    "products_price_min" CHECK (price > 0::numeric)

删除字段的默认值相当于将它设置为空值(NULL)。

修改字段数据类型

通常来说,可以将字段的数据类型修改为兼容的类型。

ALTER TABLE table_name ALTER COLUMN column_name TYPE new_data_type;

以下语句将产品表的price字段的类型修改为numeric(10,2):

test=# ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
ALTER TABLE
test=# \d products;
                     Table "hr.products"
   Column   |     Type      | Collation | Nullable | Default 
------------+---------------+-----------+----------+---------
 product_no | integer       |           | not null | 
 name       | text          |           |          | 
 price      | numeric(10,2) |           |          | 
Indexes:
    "products_pkey" PRIMARY KEY, btree (product_no)
Check constraints:
    "products_price_min" CHECK (price > 0::numeric)

因为已有的数据能够隐式转换为新的数据类型,上面的语句能够执行成功。如果无法执行隐式转换(例如将字符串‘1’转换为数字1),可以使用USING执行显式转换

ALTER TABLE table_name ALTER COLUMN column_name TYPE new_data_type USING expression;

我们先为产品表增加一个字符串类型的字段level,然后将其修改为整数类型。

test=# ALTER TABLE products ADD COLUMN level VARCHAR(10);
ALTER TABLE
test=# ALTER TABLE products ALTER COLUMN level TYPE INTEGER;
ERROR:  column "level" cannot be cast automatically to type integer
HINT:  You might need to specify "USING level::integer".
test=# ALTER  TABLE  products  ALTER  COLUMN  level  TYPE  INTEGER  USING level::integer;
ALTER TABLE

重命名字段

使用以下语句可以修改表中字段的名称

ALTER TABLE table_nameRENAME COLUMN column_name TO new_column_name;

将产品表的字段product_no 改名为product_number:

test=# ALTER TABLE products RENAME COLUMN product_no TO product_number;
test=# \d products
                       Table "hr.products"
     Column     |     Type      | Collation | Nullable | Default 
----------------+---------------+-----------+----------+---------
 product_number | integer       |           | not null | 
 name           | text          |           |          | 
 price          | numeric(10,2) |           |          | 
 level          | integer       |           |          | 
Indexes:
    "products_pkey" PRIMARY KEY, btree (product_number)
Check constraints:
    "products_price_min" CHECK (price > 0::numeric)

重命名表

如果需要修改表的名称,可以使用以下语句:

ALTER TABLE table_name RENAME TO new_name;

例如,将产品表的名称改为items的命令如下

ALTER TABLE productsRENAME TO items;

删除表

删除表可以使用DROP TABLE语句

DROP TABLE [ IF EXISTS ] name [ CASCADE | RESTRICT ];

其中,name表示要删除的表;如果使用了IF EXISTS,删除一个不存在的表不会产生错误,而是显示一个信息。以下语句将会删除表emp1:

DROP TABLE emp1;

如果被删除的表存在依赖于它的视图或外键约束,需要指定CASCADE选项执行级联删除。

标签:product,PostgreSQL,name,管理,price,数据表,products,TABLE,ALTER
From: https://www.cnblogs.com/wdh01/p/17231432.html

相关文章

  • 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......
  • 瓴羊QuickBI,让企业更加清晰地管理和呈现数据
    在信息科技时代,许多企业已经认识到商业信息将成为公司的核心资产之一。要获取商业信息,离不开专业的数据分析,这也使得像瓴羊QuickBI这样的商业智能BI工具成为企业进入信息化时代后的必备工具。在当今市场环境下,企业面临全面的竞争。除了对产品、服务、价格等外在能力进行比较之外,企......