值得收藏的好文值得收藏的好文——postgresql 增加约束、删除约束、增加增加约束、删除约束、增加
列、删除列列、删除列
修改表修改表
删除约束删除约束[语法通用语法通用]
alter table table_name drop constraint "some_name";
说明:
1.需要明确操作哪个表
2.需要知道约束的名称[可以是主键约束,外键约束,check约束,unique约束] 3.这对除了非空约束之外所有的约束类型都一
样有效
移除非空约束移除非空约束
alter table table_name alter column ID drop not null;
说明:由于非空约束没有名称,因此不能使用上面的方法。
表中的表中的version字段添加字段添加check约束约束
alter table table_name add constraint "table_name_version_check"
check(version between '8-1' and '8-z');
表中字段添加唯一约束表中字段添加唯一约束unique
alter table table_name add constraint "unique_table_name" unique(id);
增加外键约束增加外键约束
alter table table_name add foreign key (table_name_id)
references table_name2(table_name2_id)
on update cascade on delete cascade;
说明:
on update cascade: 被引用行更新时,引用行自动更新;
on update restrict: 被引用的行禁止更新;
on delete cascade: 被引用行删除时,引用行也一起删除;
on dellete restrict: 被引用的行禁止删除;
增加主键约束增加主键约束
alter table table_name add primary key(id);
表中的字段增加非空约束表中的字段增加非空约束
alter table table_name alter column ID set not null;
说明:该约束会立即被检查,所以表中的数据在增加非空约束之前需要满足约束条件
增加列增加列
alter table table_name add column name text;
说明:
新列若没有指定默认值,则会填充null
删除列删除列
alter table table_name drop column name;
补充说明:
如果该列是另一个表的外键所引用,删除会失败。通过cascade来授权移除任何依赖于被删除列的所有东西。
alter table table_name drop column name cascade;
更改列的默认值更改列的默认值
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
说明:
这不会影响任何表中已经存在的行,它只是为未来的INSERT命令改变了默认值。
删除列的默认值删除列的默认值
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
说明:
这等同于将默认值设置为空值。相应的,试图删除一个未被定义的默认值并不会引发错误, 因为默认值已经被隐式地设置为
空值
修改列的数据类型修改列的数据类型