首页 > 其他分享 >KingbaseES 数据表复制语句的功能差异

KingbaseES 数据表复制语句的功能差异

时间:2023-03-02 16:13:28浏览次数:44  
标签:语句 table1 plain 数据表 复制 INCLUDING integer KingbaseES select

Kingbase 数据表复制操作

数据库使用过成中,经常会遇到在现有的表结构基础上,对表结构进行复制。在KingbaseES数据库可以采用select into,create table as select,create table like的方式进行数据表的复制操作。
但表复制操作又有些差异。本文将主要介绍Kingbase数据库的表复制的使用和差异。

-- 源表:
demo=# \d+ table1
                                          数据表 "public.table1"
 栏位 |  类型   | 校对规则 |  可空的  |                预设                |   存储   | 统计目标 |  描述  
------+---------+----------+----------+------------------------------------+----------+----------+--------
 c1   | integer |          | not null | nextval('table1_c1_seq'::regclass) | plain    |          | 主键
 c2   | numeric |          |          |                                    | main     |          | 数值
 c3   | integer |          |          | 0                                  | plain    |          | 默认值
 c4   | varchar |          |          |                                    | extended |          | 字符
 c5   | integer |          |          |                                    | plain    |          | 索引
 c6   | varchar |          |          |                                    | extended |          | 唯一值
 c7   | integer |          |          |                                    | plain    |          | 外键
索引:
    "con_public_table1_constraint_1" PRIMARY KEY, btree (c1)
    "con_public_table1_constraint_2" UNIQUE CONSTRAINT, btree (c6)
    "inxex_public_table1_index_1" UNIQUE, btree (c5)
外部键(FK)限制:
    "fkey_public_table1_fkey_1" FOREIGN KEY (c7) REFERENCES foreigntable(c1)
访问方法 heap

demo=# select count(1) from table1;
 count 
-------
     2
(1 行记录

源表结构:

  • c1 自增主键
  • c2 numeric类型字段
  • c3 int 类型设置默认值
  • c4 numeric类型字段
  • c5 字段上创建索引
  • c6 UNIQUE唯一值
  • c7 外键

1.select into

采用 (select into)方式复制表结构

CREATE TABLE AS创建一个新表并且用一个查询计算得到的数据填充它。新表的列具有和SELECT的输出列相关的名称和数据类型。

demo=# select * into tableinto from table1 ;
SELECT 2

-- 表结构
demo=# \d+ tableinto 
                       数据表 "public.tableinto"
 栏位 |  类型   | 校对规则 | 可空的 | 预设 |   存储   | 统计目标 | 描述 
------+---------+----------+--------+------+----------+----------+------
 c1   | integer |          |        |      | plain    |          | 
 c2   | numeric |          |        |      | main     |          | 
 c3   | integer |          |        |      | plain    |          | 
 c4   | varchar |          |        |      | extended |          | 
 c5   | integer |          |        |      | plain    |          | 
 c6   | varchar |          |        |      | extended |          | 
 c7   | integer |          |        |      | plain    |          | 
访问方法 heap

demo=# select * from tableinto ;
 c1 | c2  | c3 | c4 | c5 | c6 | c7 
----+-----+----+----+----+----+----
  5 | 2.5 |  4 | a  |  5 | a  |  1
  6 | 2.5 |  4 | b  |  6 | b  |  1
(2 行记录)

结论:(select into)复制表,仅仅复制表基本结构和表数据。不会复制表索引,唯一行限制,主键,外键等对象。

2.create table as select

采用 (create table as select)方式复制表结构

CREATE TABLE AS创建一个表,并且用由一个SELECT命令计算出来的数据填充该表。该表的列具有和SELECT的输出列相关的名称和数据类型(不过可以通过给出一个显式的新列名列表来覆盖这些列名)。新表不会跟踪源表的后续变化。

 demo=# create table tableas as select * from table1 ;
SELECT 2

-- 表结构
demo=# \d+ tableas  
                        数据表 "public.tableas"
 栏位 |  类型   | 校对规则 | 可空的 | 预设 |   存储   | 统计目标 | 描述 
------+---------+----------+--------+------+----------+----------+------
 c1   | integer |          |        |      | plain    |          | 
 c2   | numeric |          |        |      | main     |          | 
 c3   | integer |          |        |      | plain    |          | 
 c4   | varchar |          |        |      | extended |          | 
 c5   | integer |          |        |      | plain    |          | 
 c6   | varchar |          |        |      | extended |          | 
 c7   | integer |          |        |      | plain    |          | 
访问方法 heap

demo=# select count(1) from tableas ;
 count 
-------
     2
(1 行记录)

结论:(create table as select)复制表,仅仅复制表基本结构和表数据。不会复制表索引,唯一限制,主键,外键等对象。

3.create table like

采用 (create table like)方式复制表结构

CREATE TABLE LIKE创建表的形式允许您精确地复制现有表定义(不复制其数据),其创建的表除了表名和源表不一样外,其余所有的细节都是一样的。但是没有源表的数据。

语法
CREATE TABLE table_name ({ LIKE source_table [ like_option ... ] }
)

like_option 是:
{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED |
IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }
demo=# create table tablelike (like table1 including all) ;
CREATE TABLE

-- 表结构
demo=# \d+ tablelike
                                        数据表 "public.tablelike"
 栏位 |  类型   | 校对规则 |  可空的  |                预设                |   存储   | 统计目标 |  描述  
------+---------+----------+----------+------------------------------------+----------+----------+--------
 c1   | integer |          | not null | nextval('table1_c1_seq'::regclass) | plain    |          | 主键
 c2   | numeric |          |          |                                    | main     |          | 数值
 c3   | integer |          |          | 0                                  | plain    |          | 默认值
 c4   | varchar |          |          |                                    | extended |          | 字符
 c5   | integer |          |          |                                    | plain    |          | 索引
 c6   | varchar |          |          |                                    | extended |          | 唯一值
 c7   | integer |          |          |                                    | plain    |          | 外键
索引:
    "tablelike_pkey" PRIMARY KEY, btree (c1)
    "tablelike_c5_idx" UNIQUE, btree (c5)
    "tablelike_c6_key" UNIQUE CONSTRAINT, btree (c6)
访问方法 heap

demo=# select count(1) from tablelike ;
 count 
-------
     0
(1 行记录)

结论:(create table like)复制表,创建出来的新表包含源表的完整表结构、注释和索引信息等。不会复制表数据内容。

注意:KingbaseES数据like建表与Mysql对serial字段处理方式有些差别:Mysql新表的serial字段为单独创建,与源表无关;Kes新表的serial字段与源表共用一个sequence,不会重新初始化新的sequence。

like 选项可以配置属性:
{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED |
IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }

INCLUDING:指定INCLUDING 复制属性,
EXCLUDING:指定EXCLUDING省略属性。

INCLUDING COMMENTS
复制列、约束和索引的注释将被复制。

INCLUDING CONSTRAINTS
CHECK 约束将被复制。

INCLUDING DEFAULTS
复制列定义的默认表达式将被复制。

INCLUDING GENERATED
复制列定义的任何生成表达式都将被复制。

INCLUDING IDENTITY
复制列定义的任何标识规范都将被复制。

INCLUDING INDEXES
原始表上的Indexes、PRIMARY KEY、UNIQUE、和EXCLUDE约束将在新表上创建。

INCLUDING STATISTICS
扩展的统计信息被复制到新表中。

INCLUDING STORAGE
STORAGE将复制复制列定义的设置。

INCLUDING ALL
INCLUDING ALL是选择所有可用的单独选项的缩写形式。

标签:语句,table1,plain,数据表,复制,INCLUDING,integer,KingbaseES,select
From: https://www.cnblogs.com/kingbase/p/17001516.html

相关文章

  • KingbaseES V8R6 运维案例 --flashback drop table
    一、KingbaseESV8R6flashbackdroptable介绍使用FLASHBACK删除和恢复表删除表时,数据库不会立即删除与该表关联的空间。数据库重命名表,并将其和任何关联的对象放在回......
  • KingbaseES 的oracle兼容性参数
    KingbaseES用户可通过设置相关的数据库兼容参数,部分或全部启用Oracle兼容特性。常用的兼容性参数有以下这些:参数名称参数说明ora_forbid_func_polymorphism是......
  • KingbaseES 配置 Hugepage
    前言大页的作用是为了提升内存管理的效率,减少内存管理资源消耗(节省pagetable的开销),特别是对于大内存的情况,同时,由于hugepage相对与4k的页面,它更不容易被交换出内存,因此,它......
  • KingbaseES V8R6 集群运维系列 -- 命令行部署repmgr管理集群+switchover测试
    本次部署未使用securecmd/kbha工具,无需普通用户到root用户的互信。一、环境准备1、创建OS用户建立系统数据库安装用户组及用户,在所有的节点执行。root用户登陆服务器,创......
  • KingbaseES 服务器运行参数配置
    Kingbase服务器运行参数配置说明:KingbaseES数据库中,服务器运行参数配和需改有多种方式和注意事项,根据不同的分类配置,修改配置方式不同。关于服务器参数分类请参照【Kin......
  • KingbaseES V8R6集群运维系列 --sys_monitor.sh stop关闭集群分析
    案例说明:对于KingbaseESV8R6集群关闭整个集群通过执行‘sys_monitor.shstop’命令完成,本案例解析了在执行‘sys_monitor.shstop’后,数据库的关闭方式及数据库访问带来......
  • KingbaseES 服务器运行参数分类
    Kingbase服务器运行参数分类说明:KingbaseES数据库中,服务器运行参数分为多种类型,有些是系统初始化时设置,有些可以在系统运行时设置,有些可以在运行session中进行直接设置......
  • KingbaseES V8R3 运维案例 -- sys_dump备份故障“SYS_MAC_POLICY_ENFORCEMENT”
    ​案例说明:在KingbaseESV8R3执行sys_dump时出现“ERROR:permissiondeniedforrelationSYS_MAC_POLICY_ENFORCEMENT”故障,此前做过一些安全相关的配置,比如修改syssa......
  • KingbaseES sys_restore 恢复表时默认不包括表上的索引
    前言最近碰到一个案例,在使用sys_restore恢复指定表时,默认不恢复表上的索引,如果想恢复需要单独指定。测试过程[](javascript:void(0)......
  • KingbaseES函数三态
    理解函数的三态1VOLATILE:volatile函数没有限制,可以修改数据(如执行delete,insert,update),使用同样的参数调用可能返回不同的值.STABLE:不允许修改数据,PG8.0以......