按关键词阅读:
name varchar2(20));
CREATE TABLE
2、主键约束
当定义主键约束后 , 该列的值不能重复而且不能为 。 一张表最多只能有一个主键 , 但是可以由多个唯一约束 。 创建主键后 , openGuass会自动创建表名+pkey的索引 。
postgres=# create table t_primary_key(
id number not primary key,
【Oracle的逻辑对象,openGauss都能hold住吗?】name varchar2(20));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t_primary_key_pkey" for table "t_primary_key"
CREATE TABLE
3、唯一约束
唯一约束与主键的区别是 , 当定义了唯一约束后 , 该列值是不能重复的 , 但是可以为 , 并且对于同一张表 , 唯一约束可以存在多个 。 创建唯一约束后 , openGuass也会自动创建唯一索引 。
postgres=# create table t_unique
(
product_id number not ,
product_name number not ,
product_type varchar2(50),
supplier_id number,
CONSTRAINT t_unique_u1 UNIQUE (product_id, product_name)
);
NOTICE: CREATE TABLE / UNIQUE will create implicit index "t_unique_u1" for table "t_unique"
CREATE TABLE
4、外键约束
用于定义主表和从表之间的关系 , 外键约束要定义在从表上 , 主要则必须具有主键约束或是唯一约束 , 当定义外键约束后 , 要求外键列数据必须在主表的主键列存在或是为 。
外键约束会增加表插入、更新等SQL性能的额外开销 , 不少系统里面通过业务逻辑控制来取消外键约束 。 例如在数据仓库中 , 就推荐禁用外键约束 。
postgres=# create table t1(id number);
CREATE TABLE
postgres=# create table t2(id number,cc number,constraint fk_t2_id foreign key(id) references t1(id));
ERROR: there is no unique constraint matching given keys for referenced table "t1"
5、检查约束
用于强制行数据必须满足的条件 , 假定在sal列上定义了check约束 , 并要求sal列值在5000~50000之间 , 如果插入数据不在此范围之间就会提示出错 。
postgres=# create table t3(id number,sal number,constraint ck_t3_sal check(sal between 5000 and 50000));
CREATE TABLE
postgres=# insert into t3 values (1,6000);
INSERT 0 1
postgres=# insert into t3 values (1,600);
ERROR: new row for relation "t3" violates check constraint "ck_t3_sal"
DETAIL: Failing row contains (1, 600).
三、视图
视图主要是为了提升开发效率 , 作为一个定义查询语句结果的对象存在的;根据是否真实存储数据 , 分为关系视图及物化视图 。
1、关系视图
Oracle的关系视图本身不包含任何数据 , 也是大家最常用的视图 , 通过create view... as ...简化的语法就可以创建 , 还可以需求将视图设置为只读形式等 。 注意:在当前用户下创建视图需要CREATE VIEW系统权限 。 openGauss可以兼容Oracle创建视图语法 , 但对于Oracle视图创建中的with check option以及with read only选项暂不支持 。
postgres=# CREATE OR REPLACE VIEW prod_view AS select p.id, p.name from product p;
CREATE VIEW
postgres=# CREATE OR REPLACE VIEW read_view AS select p.id, p.name from product p WITH READ ONLY;
ERROR: syntax error at or near "READ"
LINE 1: ..._view AS select p.id, p.name from product p WITH READ ONLY;
postgres=# CREATE OR REPLACE VIEW check_view AS select p.id, p.name from product p WITH CHECK OPTION;
ERROR: WITH CHECK OPTION is not implemented
2、物化视图
物化视图有别于关系视图 , 可以像数据库表一样可以真实存储数据 。 openGauss可以支持物化视图的创建 , 但对于数据刷新需要手动刷新 , 不支持自动刷新 。
postgres=# create materialized view mater_view as select p.id, p.name from product p;
SELECT 0
四、序列
序列可供多个用户用来产生唯一数值的数据库对象 。 在MySQL中可以通过自增长字段auto_increment , 而Oracle中没有自增长字段功能 , 通常通过建立序列来实现自增长的功能 , openGauss中可以支持sequence功能 。
postgres=# create sequence autoincre
minvalue 1
maxvalue 9999999999999
start with 1
increment by 1;
CREATE SEQUENCE
五、同义词
同义词就是别名 , 可以为表、字段名建立别名 , 主要是为了简化书写 , 在当前用户下创建同义词需要 create synonym 权限 。
postgres=# create synonym product_syn for product;
CREATE SYNONYM
六、总结
对象类型
分类
是否兼容
备注
索引
B*索引
兼容
REVERSE关键字需用DESC替代
位图索引
不兼容
约束
非空约束
兼容
主键约束
兼容
唯一约束
兼容
外键约束
兼容
检查约束
兼容
视图
关系视图
兼容
部分选项不兼容
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111T320352020.html
标题:Oracle的逻辑对象,openGauss都能hold住吗?( 二 )