PostgreSQL数据库修改sql表的方法汇总
一,修改表
PostgreSQL 提供了一族命令用于修改现有表。
可以实现:
增加字段,
删除字段,
增加约束,
删除约束,
修改默认值,
重命名字段,
重命名表。
这些操作可以用:ALTER TABLE命令执行的。
1,增加字段
要增加一个字段,使用这条命令:
ALTER TABLE products ADD COLUMN description text;
新增的字段对于表中已经存在的行而言最初将先填充空值。
你也可以同时在该字段上定义约束,使用通常的语法:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
一个新字段不能用非空约束,因为最初的时候该字段必须包含空值。 但是你可以稍后增加一个非空约束。同样,你也不能在一个新字段 上定义默认值。根据 SQL 标准的说明,这样需要对现存行的新 字段填充默认值,而这个特性还没有实现。但是你可以稍后调整 字段预设。
2,删除字段
除一个字段:
ALTER TABLE products DROP COLUMN description;
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;
这个约束将立即进行检查,所以表在加入约束之前必须符合约束条件。
4,删除约束
要删除一个约束,你需要知道它的名字。如果你给了它一个名字, 那么事情就好办了。
否则系统会分配一个生成的名字,这样你就需要 把它找出来了。psql 的命令 \d tablename 在这儿可以帮忙﹔
其它接口可能也提供了检查表的细节的方法。
命令:
ALTER TABLE products DROP CONSTRAINT some_name;
除了非空约束外,所有约束类型都这么用。要删除非空类型,用
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(要记得非空约束没有名字。)
5,改变默认值
要给一个字段设定默认值,使用一个象下面这样的命令:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
要删除默认值,用
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
这样相当于把预设设定为空,至少在 PostgreSQL里是这样的。
如果删除一个还没有定义的默认值不算错误,因为预设隐含就是空值。
6,给字段改名字
重命名一个字段:
ALTER TABLE products RENAME COLUMN product_no TO product_number;
7,给表改名字
To rename a table:
ALTER TABLE products RENAME TO items;
8, postgresql 9.0以后更改字段长度会重写表,如果表比较大,那么表会加锁,需要很长时间,这里介绍一种方法通过修改pg_attribute.atttypmod字段修改长度,不需要重写表
假如表中atttypemod为6,变长类型头信息占去4个字节,这里6-4=2就是我们字段的长度。
查看修改如下:
select atttypmod from pg_attribute where attrelid='hall_info'::regclass and attname='holiday';
update pg_attribute set atttypmod=19 where attrelid='hall_info'::regclass and attname='holiday'; (hall_info:表名,holiday:字段名,该字段长度改为:15)
注:创建一个作为外键的字段company_id
首先: alter table dtb_order add column company_id int default 0;
再: alter table dtb_order add foreign key(company_id) references dtb_transinfo;
实际项目中经常会遇到要修改表结构的需求, 现在总结下postgres中修改表结构
比如, 现在有个表,
CREATE TABLE test
(
id bigint NOT NULL,
name character varying,
CONSTRAINT pk_test PRIMARY KEY (id) -------这个个约束(constraint), 主键约束
)
WITH (
OIDS=FALSE
);
ALTER TABLE pets
OWNER TO postgres;
1. 增加列, 修改主键
之前表有2个字段, id和name, id是主键, 现在有需求增加一个index, 并且需求是主键改为id和index, sql语句如下
alter table test add column test_index smallint not null default 0; -----------增加一个列 test_index
alter table test drop constraint pk_test; ----------------删除之前的主键约束
alter table test add constraint pk_test PRIMARY_KEY(id, test_index); ------------重新增加一个主键
PostgreSQL数据库修改sql表的方法汇总相关推荐
- EFCore实现数据库水平分表的方法
EFCore实现数据库水平分表的方法 水平分表 代码运行环境 实现方法 代码 实现步骤 EFCore 3.x 进一步封装 知识点总结 参考文章 水平分表 当我们数据库中某个表的数据量大到足以影响性能的 ...
- postgresql数据库修改表
2019独角兽企业重金招聘Python工程师标准>>> 由于经常记不清修改表的命令,记录一下,转自postgreSQL 8.3文档 5.5. 修改表 如果你创建了一个表后发现自己犯了 ...
- SQL Server 2005中专用管理员连接 (DAC) 使用技巧修改系统表的方法
Server 2005 专用管理员连接 (DAC) 使用技巧 1 什么是专用管理员连接? SQL Server 2005 为管理员提供了一种特殊的诊断连接,以供在无法与服务器建立标准连接时使用. 2 ...
- 数据库之SQL表列及语句
数据库之DDL表的操作 一.数据类型 二.表属性 三.列的属性和约束 四.SQL语句应用 1.DDL(数据定义语言) 2.DCL(数据控制语言) 3.DML(数据操作语言) 4.DQL(数据查询语言) ...
- MYSQL数据库- 修改数据表名称、列名称
目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...
- mysql 修改表列名称_MYSQL数据库- 修改数据表名称、列名称
目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...
- 「SAP技术」SE16和SE16N修改后台表数据方法
SAP中直接修改表.视图的Tcode有SE16N和SM30. 一 . SE16N界面输入&SAP_EDIT 其中使用SE16N修改表需要先输入命令&SAP_EDIT,回车左下角显示激活 ...
- C++ 修改注册表的方法
这几天开始学习winCE,需要修改注册表来实现设备的禁用,因此研究了一下注册表的查询和修改! 网上有这样的程序可以参考,但不是很完整,所以在编程的过程中也出现了一些错误: 如在设置键值时,返回错误值5 ...
- 查看PostgreSQL数据库中所有表
作为曾经干过运维的我来说,或许对大部分运维人员来说,不能依靠管理工具来操作数据库,如pgAdmin,经常远程登录到某一台数据库服务器,使用命令行的方式查询数据库中的表. 获取当前db中所有的表信息. ...
最新文章
- 关于BMP格式图像的理解和读写(c++).docx
- R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息
- irobot擦地机器人故障_自己动手修复 iRobot braava380t 电机故障
- PHP中对数据库操作的封装
- 数学图形之罗马曲面(RomanSurface)
- STM32 电机教程 28 - ST MCLIB实战之 位置闭环控制
- 防止UI界面被输入法遮挡(画面随输入法自适应)
- 窗体间传值和窗体间互操作
- 从StreamCorruptedException解析值:无效的流头消息
- BugkuCTF-Crypto题affine
- java使用队列实现栈思路_算法面试:队列实现栈的方案
- 小学三年级计算机导学案,小学三年级学科导学案.doc
- 02 Nginx和Keepalived高可用
- iocomp iPlot使用说明4 通道对象
- codeblocks 汉化
- 转载 兼容iphone5开发获取屏幕分辨率的问题
- React简介--尚硅谷react全家桶笔记总结
- ios 扇形 按钮_iOS 饼状图(扇形图)动画效果的实现
- 通达云OA2015版及钉钉、微信办公集成产品正式发布
- LeetCode(跳跃游戏)
热门文章
- python导入模块报错_Python 导入上层目录模块报错
- mysql server 5.0安装教程_MySQL Server 5.0安装教程
- mysql parameter_C#MySqlParameter问题
- 链表node中保存的是什么_Redis源码解析一 --链表结构
- 飞畅科技-工业以太网交换机市场发展情况介绍
- 工业以太网交换机的软件故障
- 什么是网络光端机?网络光端机工作原理及功能介绍!
- 【渝粤题库】国家开放大学2021春2768养禽技术题目
- 内部时钟和外部时钟隔离的Σ-Δ调制器
- 5g消息服务器,《5G消息白皮书》内容解读:5G消息是什么服务?