前言

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

测试

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语言搭建一个简易的局域网直播(live)系统

    演示一下 由于是局域网直播系统,那么最简单的情况应该也有两部分构成:录制直播和播放直播. 录制直播 录制直播使用的是本机的摄像头和麦克风,使用Java自带的JFrame窗口播放,支持音视频的录制.效果 ...

  2. pyhotn3.8 apt机器基础镜像构建

    FROM python:3.8.10-slim RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/source ...

  3. (微服务)服务治理:熔断器介绍以及hystrix-go的使用

    一.什么是熔断器 要理解熔断器,可以先看看电路中使用的保险丝. 保险丝(fuse)也被称为电流保险丝,IEC127 标准将它定义为"熔断体(fuse-link)".保险丝是一种保证 ...

  4. golang常用库:gorilla/mux-http路由库使用

    golang常用库:gorilla/mux-http路由库使用 golang常用库:配置文件解析库/管理工具-viper使用 golang常用库:操作数据库的orm框架-gorm基本使用 一:gola ...

  5. 【Android逆向】脱壳项目 frida-dexdump 原理分析

    1. 项目代码地址 https://github.com/hluwa/frida-dexdump 2. 核心逻辑为 def dump(self): logger.info("[+] Sear ...

  6. pika

    生产者代码 # -*- coding: utf-8 -*- # pylint: disable=C0111,C0103,R0205 import json import pika from pika. ...

  7. 详解SSL证书系列(2)SSL证书对网站的好处

    在如今谷歌.百度等互联网巨头强制性要求网站 HTTPS 化的情况下, 网站部署 SSL 证书已然成为互联网的发展趋势,我们也知道了 SSL证书可以防止网络安全威胁.那么除此外为网站部署 SSL 证书还 ...

  8. ubuntu版本为16.04,英文改成中文解决方法和解决中文输入法无效的问题,关于无法打开锁文件的解决方法

    https://jingyan.baidu.com/article/4853e1e565e1781908f7266c.html,根据这篇文章操作完成后重启ubuntu之后ubuntu就会变成中文,重启 ...

  9. WPF 应用迁移到 Electron 框架过程记录

    前一段时间我用 WPF 开发了一个查看 emoji 表情的小工具 https://github.com/he55/EmojiViewer ,由于最近我使用 macOS 系统比较多,我想能在 macOS ...

  10. FreeRTOS教程1 基础知识

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 2.学 ...