对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。本文将围绕在数据库SQL中如何对建好的表进行修改作阐。1.增加字段:ALTERTABLEproductsADDCOLUMNde
对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。本文将围绕在数据库SQL中如何对建好的表进行修改作阐。
1. 增加字段:
ALTER TABLE products ADD COLUMN description text;
新增的字段对于表中已经存在的行而言最初将先填充所给出的缺省值(如果你没有声明DEFAULT子句,那么缺省是空值)。
在新增字段时,可以同时给该字段指定约束。
ALTER TABLE products ADD COLUMN description text CHECK(description <> '');
2. 删除字段:
ALTER TABLE products DROP COLUMN description;
如果该表为被引用表,该字段为被引用字段,那么上面的删除操作将会失败。如果要想在删除被引用字段的同时级联的删除其所有引用字段,可以采用下面的语法形式。
ALTER TABLE products DROP COLUMN description CASCADE;
3. 增加约束:
4. 删除约束:
ALTER TABLE products DROP CONSTRAINT some_name;
对于显示命名的约束,可以根据其名称直接删除,对于隐式自动命名的约束,可以通过psql的\d tablename来获取该约束的名字。和删除字段一样,如果你想删除有着被依赖关系地约束,你需要用CASCADE。一个例子是某个外键约束依赖被引用字段上的唯一约束或者主键约束。如:
和其他约束不同的是,非空约束没有名字,因此只能通过下面的方式删除: ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
5. 改变字段的缺省值:
在为已有字段添加缺省值时,不会影响任何表中现有的数据行, 它只是为将来INSERT命令改变缺省值。 ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77; 下面为删除缺省值: ALTER TABLE products ALTER COLUMN price DROP DEFAULT
6. 修改字段的数据类型:
只有在字段里现有的每个项都可以用一个隐含的类型转换转换成新的类型时才可能成功。比如当前的数据都是整型,而转换的目标类型为numeric或varchar,这样的转换一般都可以成功。与此同时,PostgreSQL还将试图把字段的缺省值(如果存在)转换成新的类型, 还有涉及该字段的任何约束。但是这些转换可能失败,或者可能生成奇怪的结果。 在修改某字段类型之前,你最好删除那些约束,然后再把自己手工修改过的添加上去。 ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
7. 修改字段名:
ALTER TABLE products RENAME COLUMN product_no TO product_number;
8. 修改表名:
ALTER TABLE products RENAME TO items;