前言

当数据库遇到未知问题,有时候无法入手分析,在非生产数据库或者征得客户同意获得特殊时间,需要重建表解决,下面提供了多种不同的复制表的方法,我们了解一下他们的差异。

测试

1、CREATE TABLE AS SELECT 语句用于复制表结构和数据,但是不会复制索引。

我们可以使用以下语句基于 t1表 复制一个新表 emp1:

CREATE TABLE emp1
AS
SELECT * FROM t1; TEST=# \d emp1
Table "public.emp1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | | TEST=# \d t1
Table "public.t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
Indexes:
"pk_t1" PRIMARY KEY, btree (id) 如果只复制表结构,不复制数据,可以增加 WITH NO DATA 子句:
CREATE TABLE emp2
AS
SELECT * FROM t1
WITH NO DATA; 或者如下语法,例如:这种复制方法不会创建任何索引或者约束。
CREATE TABLE emp2
AS
SELECT * FROM t1
WHERE FALSE;

CREATE TABLE emp2
AS
SELECT * FROM t1
where 1=2; 2、CREATE TABLE LIKE 语句也可以用于复制表结构,这种方法也不会复制数据,会复制字段的 NOT NULL 约束。 CREATE TABLE emp2
(LIKE t1); TEST=# \d emp2;
Table "public.emp2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null | 3、CREATE TABLE AS TABLE 语句可以复制表结构和数据,这种语法不会复制索引、约束等。如果不复制数据,使用 WITH NO DATA子句 CREATE TABLE emp2
AS
TABLE t1
WITH NO DATA; TEST=# \d emp2;
Table "public.emp2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | | 4、SELECT INTO 语句可以复制表结构和数据,但是不包含索引,约束等。例如: SELECT * INTO emp2 FROM t1; TEST=# \d t1
Table "public.t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
Indexes:
"pk_t1" PRIMARY KEY, btree (id) TEST=# \d emp2
Table "public.emp2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | | CREATE TABLE AS 和 SELECT INTO 语句实现同样的效果,推荐使用CREATE TABLE AS,它更常见。 5、CREATE TABLE INHERITS 语句,用于继承表结构。数据不会复制,任何针对父表的修改,子表也会自动修改。 另外,这种方法还可以为子表定义额外的字段。例如:
增加约束:
ALTER TABLE t1 ADD CHECK (id <> ''); CREATE TABLE emp2 (
name text NOT NULL
)
INHERITS ( t1 );
其中,name 是我们额外定义的字段,其他字段继承 t1表。\d查看,emp2表有关键字Inherits: t1。t1表有关键字Number of child tables: 1 (Use \d+ to list them.)
check约束,非空约束继承到了子表,主键不能继承到子表。 TEST=# \d emp2;
Table "public.emp2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
name | text | | not null |
Check constraints:
"t1_id_check" CHECK (id <> NULL::integer)
Inherits: t1 TEST=# \d t1;
Table "public.t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
Indexes:
"pk_t1" PRIMARY KEY, btree (id)
Check constraints:
"t1_id_check" CHECK (id <> NULL::integer)
Number of child tables: 1 (Use \d+ to list them.)
父表增加列应用到了子表上
alter table t1 ADD COLUMN price int;
ALTER TABLE t1 DROP CONSTRAINT t1_id_check; TEST=# \d emp2
Table "public.emp2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
name | text | | not null |
price | integer | | |
Inherits: t1 TEST=# \d t1;
Table "public.t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
price | integer | | |
Indexes:
"pk_t1" PRIMARY KEY, btree (id)
Number of child tables: 1 (Use \d+ to list them.)

KingbaseES V8R6 几种不同的表复制方式的更多相关文章

  1. select into from和insert into select from两种表复制语句区别

    select into from和insert into select from两种表复制语句都是将源表source_table的记录插入到目标表target_table,但两句又有区别. 第一句(s ...

  2. 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

    oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...

  3. oracle数据库【表复制】insert into select from跟create table as select * from 两种表复制语句区别

    create table  as select * from和insert into select from两种表复制语句区别 create table targer_table as select ...

  4. PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句

    SELECT INTO和INSERT INTO SELECT两种表复制语句都可以用来复制表与表之间的数据,但是它们之间也有区别. 建表语句: bas_custom_rel表 CREATE TABLE ...

  5. KingbaseES V8R6集群部署案例之---Windows环境配置主备流复制(异机复制)

    案例说明: 目前KingbaseES V8R6的Windows版本不支持数据库sys_rman的物理备份,可以考虑通过建立主备流复制实现数据库的异机物理备份.本案例详细介绍了,在Windows环境下建 ...

  6. KingbaseES V8R6集群部署案例之---Windows环境配置主备流复制(同一主机)

    案例说明: 目前KingbaseES V8R6的Windows版本不支持数据库sys_rman的物理备份,可以考虑通过建立主备流复制实现数据库的异机物理备份.本案例详细介绍了,在Windows环境下建 ...

  7. KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复

    案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空 ...

  8. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...

  9. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句.txt

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...

  10. oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

    我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INT ...

随机推荐

  1. java interface 介绍

    interface类似于class,只不过interface里的所有方法都是abstract抽象的,当一个非抽象的class实现(implements)一个接口interface时,必须实现接口中所有 ...

  2. webrtc 的理解

    常规视频的传输包括以下几个步骤:采集,编码,推流,转码,分发,拉流,解码和渲染 在一个实时的音视频系统架构里,上面的每个环节都会有一定程度的优化空间. 以下内容摘自:rtmp直播和webrtc直播对比 ...

  3. 【Android逆向】算法还原2

    这题比较简单 1. app-release.apk 安装至手机 提示需要输入账号和密码 2. jadx 打开看看 public native boolean check(byte[] bArr, by ...

  4. Flink本地模式安装和使用

    Flink官方主页:https://flink.apache.org/ . 安装部署 不同版本的Flink对JDK版本要求不尽相同,需要根据具体的Flink版本要求先安装好JDK环境. 通常,在Fli ...

  5. sql判断字符串中含中文方法

    基于UTF-8字符集 它是一种多字节字符集,编码为变长编码.那么它的编码范围根据:http://www.iteye.com/topic/977671 作者提供的资料学习,整理出它编码范围如下: u2e ...

  6. HashMap源码窥探

    目录 前言 HashMap的数据结构 HashMap的put方法 HashMap的get方法 HashMap的初始化 HashMap的containsKey方法 HashMap的putAll方法 Ha ...

  7. Unity3D常用方法

    1.StartCoroutine(Thread1()) 启动协程运行Thread1()方法. 注意是协程,不是线程,详情见:https://www.jianshu.com/p/6d923cb0c900 ...

  8. 【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?

    问题描述 如何查看PHP应用部署到App Service后,Azure上面使用的应用服务器是什么呢?因为App Service支持两种操作系统,Windows 和 Linux.在Windows中,使用 ...

  9. 【Azure 环境】在Azure活动目录中的应用注册,给应用添加API权限时发现API权限配置缺失

    问题描述 在Azure活动目录中的应用注册,给应用添加API权限时,SecurityEvents.Read.All和IdentityRiskEvent两个权限,在Microsoft graph中找不到 ...

  10. 「实操」适配 NebulaGraph 新版本与压测实践

    本文来自邦盛科技-知识图谱团队-繁凡,本文以 NebulaGraph v3.1.0 为例. 前言 NebulaGraph v3.1 版本已经发布有一段时间了,但是我们的项目之前是基于 v2.6.1 版 ...