PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表

5.5. 修改表

5.5.1. 增加列5.5.2. 移除列5.5.3. 增加约束5.5.4. 移除约束5.5.5. 更改列的默认值5.5.6. 修改列的数据类型5.5.7. 重命名列5.5.8. 重命名表

当我们已经创建了一个表并意识到犯了一个错误或者应用需求发生改变时,我们可以移除表并重新创建它。但如果表中已经被填充数据或者被其他数据库对象引用(例如有一个外键约束),这种做法就显得很不方便。因此,PostgreSQL提供了一族命令来对已有的表进行修改。注意这和修改表中所包含的数据是不同的,这里要做的是对表的定义或者说结构进行修改。

利用这些命令,我们可以:

  • 增加列

  • 移除列

  • 增加约束

  • 移除约束

  • 修改默认值

  • 修改列数据类型

  • 重命名列

  • 重命名表

所有这些动作都由ALTER TABLE命令执行,其参考页面中包含更详细的信息。

5.5.1. 增加列

要增加一个列,可以使用这样的命令:

ALTER TABLE products ADD COLUMN description text;

新列将被默认值所填充(如果没有指定DEFAULT子句,则会填充空值)。

也可以同时为列定义约束,语法:

ALTER TABLE products ADD COLUMN description text CHECK (description <> '');

事实上CREATE TABLE中关于一列的描述都可以应用在这里。记住不管怎样,默认值必须满足给定的约束,否则ADD将会失败。也可以先将新列正确地填充好,然后再增加约束(见后文)。

提示

增加一个带默认值的列需要更新表中的每一行(来存储新列值)。然而,如果不指定默认值,PostgreSQL可以避免物理更新。因此如果我们准备向列中填充的值大多是非默认值,最好是增加列的时候不指定默认值,增加列后用UPDATE填充正确的数据并且增加所需要的默认值约束。

5.5.2. 移除列

为了移除一个列,使用如下的命令:

ALTER TABLE products DROP COLUMN description;

列中的数据将会消失。涉及到该列的表约束也会被移除。然而,如果该列被另一个表的外键所引用,PostgreSQL不会安静地移除该约束。我们可以通过增加CASCADE来授权移除任何依赖于被删除列的所有东西:

ALTER TABLE products DROP COLUMN description CASCADE;

关于这个操作背后的一般性机制请见第 5.13 节。

5.5.3. 增加约束

为了增加一个约束,可以使用表约束的语法,例如:

ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

要增加一个不能写成表约束的非空约束,可使用语法:

ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

该约束会立即被检查,所以表中的数据必须在约束被增加之前就已经符合约束。

5.5.4. 移除约束

为了移除一个约束首先需要知道它的名称。如果在创建时已经给它指定了名称,那么事情就变得很容易。否则约束的名称是由系统生成的,我们必须先找出这个名称。psql的命令\d 表名将会对此有所帮助,其他接口也会提供方法来查看表的细节。因此命令是:

ALTER TABLE products DROP CONSTRAINT some_name;

(如果处理的是自动生成的约束名称,如$2,别忘了用双引号使它变成一个合法的标识符。)

和移除一个列相似,如果需要移除一个被某些别的东西依赖的约束,也需要加上CASCADE。一个例子是一个外键约束依赖于被引用列上的一个唯一或者主键约束。

这对除了非空约束之外的所有约束类型都一样有效。为了移除一个非空约束可以用:

ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;

(回忆一下,非空约束是没有名称的,所以不能用第一种方式。)

5.5.5. 更改列的默认值

要为一个列设置一个新默认值,使用命令:

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;

注意这不会影响任何表中已经存在的行,它只是为未来的INSERT命令改变了默认值。

要移除任何默认值,使用:

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;

这等同于将默认值设置为空值。相应的,试图删除一个未被定义的默认值并不会引发错误,因为默认值已经被隐式地设置为空值。

5.5.6. 修改列的数据类型

为了将一个列转换为一种不同的数据类型,使用如下命令:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

只有当列中的每一个项都能通过一个隐式造型转换为新的类型时该操作才能成功。如果需要一种更复杂的转换,应该加上一个USING子句来指定应该如何把旧值转换为新值。

PostgreSQL将尝试把列的默认值转换为新类型,其他涉及到该列的任何约束也是一样。但是这些转换可能失败或者产生奇特的结果。因此最好在修改类型之前先删除该列上所有的约束,然后在修改完类型后重新加上相应修改过的约束。

5.5.7. 重命名列

要重命名一个列:

ALTER TABLE products RENAME COLUMN product_no TO product_number;

5.5.8. 重命名表

要重命名一个表:

ALTER TABLE products RENAME TO items;
本文转自PostgreSQL中文社区,原文链接:5.5. 修改表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Uptime-Kuma 一个轻量的开源监控工具

点击蓝字 关注我们你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;有用的工具&#xff0c;不要忘记关注。今天给大家介绍一个开源的监控工具 Uptime Kuma, 主要用来监控 Web 以及网络, 和 Prometheus 相比, 它是轻量的, Uptime Kuma 是基于…

怎么查看mysql正在运行的语句_MySQL如何查询当前正在运行的SQL语句

通过status命令&#xff0c;查看Slow queries这一项&#xff0c;如果值长时间>0,说明有查询执行时间过长以下为引用的内容&#xff1a;mysql> status;--------------mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)Connection id: 53Current database: (n…

SpringBoot实战之SpringBoot自动配置原理

SpringBoot 自动配置主要通过 EnableAutoConfiguration, Conditional, EnableConfigurationProperties 或者 ConfigurationProperties 等几个注解来进行自动配置完成的。EnableAutoConfiguration 开启自动配置&#xff0c;主要作用就是调用 Spring-Core 包里的 loadFactoryName…

Install OpenCV-Python in Ubuntu

之前安装python版opencv&#xff0c;需要下载whl文件&#xff0c;进行安装&#xff0c;这是在window环境下的&#xff1a;安装opencv_python,下载whl包安装系统python下的opencv 今天发现一个简单的方法。Install OpenCV-Python in UbuntuInstall package python-opencv with f…

如何健康地跑步?

最近某司高管跑步 28 公里后猝死&#xff0c;被各大媒体报道&#xff0c;每次这种悲剧发生&#xff0c;而且还跟跑步扯上关系&#xff0c;总是让人心痛。通过报道了解到&#xff0c;这位高管酷爱跑马拉松&#xff0c;身体素质和运动能力肯定是强于普通人的&#xff0c;但还是遭…

项目共享协调机制

API&#xff0c;协调前端与后端开发的连接点。 面临几个问题 1. API更新不及时&#xff0c;导致前端开发的接口没有及时更新而出现各种问题。 2. 文档描述得不准确 3. 没有统一的标准。 我们可以使用swagger editor&#xff0c; swagger ui。第一是编辑器&#xff0c;第二个是展…

vs2008C1902程序数据库管理不匹配

大清早打开vs2008,出现这么诡异的错&#xff0c; 删了一个dll的就好了。如图

mysql user表 空_mysql 忘记密码,重置密码,mysql.user表为空的解决办法

一、用户表有用户&#xff0c;直接修改密码ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)修改mysql配置文件my.cnf&#xff1a;vim /etc/my.cnf在[mysqld]中添加skip-grant-tables重启mysql服务&#xff0c;用空密码直接登录&#xff0c;查…

链式封装与调用

var CheckObject function(){}; CheckObject.prototype function(){checkName:function(){// codereturn this;},checkEmail:function(){// code return this;},checkPassword:function(){// codereturn this;} } //使用 var Check new CheckObject() Check.checkName().che…

全新升级的AOP框架Dora.Interception[3]: 基于特性标注的拦截器注册方式

在Dora.Interception中按照约定方式定义的拦截器可以采用多种方式注册到目标方法上。本篇文章介绍最常用的基于“特性标注”的拦截器注册方式&#xff0c;下一篇会介绍另一种基于&#xff08;Lambda&#xff09;表达式的注册方式&#xff1a;全新升级的AOP框架Dora.Interceptio…

在惨遭勒索病毒攻击之后,微软呼吁重新制定“数字日内瓦公约”

基于美国安全局泄露文档开发的病毒程序成为上周的主要新闻&#xff0c;该病毒导致全世界大量的Windows电脑瘫痪。WannaCry勒索病毒在150个国家有20万个受害者&#xff0c;包括英国的医院、西班牙的基础设施部门和俄罗斯的内政部。Renault在受到攻击之后关闭了几家在法国境内的工…

【代码审计】PHP代码审计---基础记录

PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议&#xff0c;支持的种类有以下12种。 * file:// — 访问本地文件系统 * http:// — 访问 HTTP(s) 网址 * ftp:// — 访问 FTP(s) URLs * php:// — 访问各个输入/输出流&#xff08;I/O streams&#xff09; * zlib:// — 压…

全新升级的AOP框架Dora.Interception[4]: 基于表达式的拦截器注册

基于特性标注的拦截器注册方式仅限于将拦截器应用到自己定义的类型上&#xff0c;对于第三方提供的类型就无能为力了。对于Dora.Interception来说&#xff0c;拦截器注册本质上建立拦截器与一个或者多个目标方法之间的映射&#xff0c;所以最笨的方式就是利用反射的方式得到表示…

mysql8.0.12插件_MySQL8.0.12 安装及配置

MySQL8.0.12 安装及配置发布时间&#xff1a;2018-08-07 10:39,浏览次数&#xff1a;274, 标签&#xff1a;MySQL一.安装1.从网上下载MySQL8.0.12版本&#xff0c;下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/2. 下载完成后解压我解压的路径是&#xff1a;D:\J…

python模块之hashlib

hashlib模块实现了多种安全哈希和信息摘要算法的通用接口&#xff0c;包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5 注意点&#xff1a;1. adler32及crc32哈希由zlib模块提供2. 某些算法已知存在哈希碰撞弱点 哈希算法 每个hash算法都有一个同…

记一次阿里电面经历

昨天下午&#xff08;3/19&#xff09;三点多钟&#xff0c;接到了一个杭州的电话&#xff0c;是阿里的。问我是否方便聊聊。我说我在上课&#xff0c;四点下课。然后他就四点多钟的时候又打了一次过来。项目经历上来就问我有无大型项目的经历。不好意思&#xff0c;我说无。。…

C语言程序设计第三次作业

&#xff08;一&#xff09;改错题 计算f(x)的值&#xff1a;输入实数x&#xff0c;计算并输出下列分段函数f(x)的值&#xff0c;输出时保留1位小数。 输入输出样例1&#xff1a;   Enterr x: 10.0   f(10.0) 0.1 输入输出样例2&#xff1a;   Enter x: 234   f(234.0…

mysql数据库项目化教程郑小蓉_MySQL数据库项目化教程(高等职业教育“十三五”规划教材(软件技术专业))...

《MySQL数据库项目化教程/高等职业教育十三五规划教材(软件技术专业)》是一本介绍MySQL数据库基础知识的入门教材&#xff0c;采用项目驱动方式循序渐进地介绍MySQL各个模块的知识。主要内容包括&#xff1a;Windows下MySQL的安装&#xff0c;MySQL服务的启动与停止&#xff0c…

WPF-09 ManualResetEventSlim信号量

业务场景如下&#xff1a;WPF应用程序后台有个定时任务在接收PLC硬件数据(该线程接收完数据之后, 会重新启动一个新线程继续接收.....)&#xff0c;当应用程序关闭时, 我们得确保接收PLC硬件数据的线程完成之后,再关闭应用程序&#xff0c;否则会造成数据丢失。上面的业务场景是…

【bzoj3033】太鼓达人 DFS欧拉图

题目描述 给出一个整数K&#xff0c;求一个最大的M&#xff0c;使得存在一个每个位置都是0或1的圈&#xff0c;圈上所有连续K位构成的二进制数两两不同。输出最大的M以及这种情况下字典序最小的方案。 输入 一个整数K。 输出 一个整数M和一个二进制串&#xff0c;由一个空格分隔…