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

KingbaseES 数据表复制操作

数据库使用过成中,经常会遇到在现有的表结构基础上,对表结构进行复制。在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是选择所有可用的单独选项的缩写形式。 更多信息,参见https://help.kingbase.com.cn/v8/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
人大金仓数据库是一个功能强大的关系型数据库管理系统,提供了一个直观友好的SQL语句界面,方便用户进行数据查询、插入、更新和删除等操作。 在人大金仓数据库的SQL语句界面中,用户可以通过输入SQL语句来对数据库中的数据进行操作。用户可以使用各种SQL语句,如SELECT、INSERT、UPDATE和DELETE等来实现不同的功能。 例如,如果用户想要查询数据库中的某个表的数据,可以使用SELECT语句。用户只需要在SQL语句界面中输入类似于“SELECT * FROM 表名”这样的SQL语句,即可获取该表的所有数据。 如果用户想要向数据库中的某个表插入新的数据,可以使用INSERT语句。用户只需要在SQL语句界面中输入类似于“INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3)”这样的SQL语句,即可将指定的值插入到相应的列中。 如果用户想要更新数据库中的某个表的数据,可以使用UPDATE语句。用户只需要在SQL语句界面中输入类似于“UPDATE 表名 SET 列1=新值1, 列2=新值2 WHERE 条件”这样的SQL语句,即可更新满足条件的数据。 如果用户想要删除数据库中的某个表的数据,可以使用DELETE语句。用户只需要在SQL语句界面中输入类似于“DELETE FROM 表名 WHERE 条件”这样的SQL语句,即可删除满足条件的数据。 总之,人大金仓数据库的SQL语句界面提供了一个方便快捷的方式来操作数据库,用户只需要输入相应的SQL语句即可完成各种数据库操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值