Kingbase 数据表复制操作

数据库使用过成中,经常会遇到在现有的表结构基础上,对表结构进行复制。在KingbaseES数据库可以采用select into,create table as select,create table like的方式进行数据表的复制操作。

但表复制操作又有些差异。本文将主要介绍Kingbase数据库的表复制的使用和差异。

  1. -- 源表:
  2. demo=# \d+ table1
  3. 数据表 "public.table1"
  4. 栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 统计目标 | 描述
  5. ------+---------+----------+----------+------------------------------------+----------+----------+--------
  6. c1 | integer | | not null | nextval('table1_c1_seq'::regclass) | plain | | 主键
  7. c2 | numeric | | | | main | | 数值
  8. c3 | integer | | | 0 | plain | | 默认值
  9. c4 | varchar | | | | extended | | 字符
  10. c5 | integer | | | | plain | | 索引
  11. c6 | varchar | | | | extended | | 唯一值
  12. c7 | integer | | | | plain | | 外键
  13. 索引:
  14. "con_public_table1_constraint_1" PRIMARY KEY, btree (c1)
  15. "con_public_table1_constraint_2" UNIQUE CONSTRAINT, btree (c6)
  16. "inxex_public_table1_index_1" UNIQUE, btree (c5)
  17. 外部键(FK)限制:
  18. "fkey_public_table1_fkey_1" FOREIGN KEY (c7) REFERENCES foreigntable(c1)
  19. 访问方法 heap
  20. demo=# select count(1) from table1;
  21. count
  22. -------
  23. 2
  24. (1 行记录

源表结构:

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

1.select into

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

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

  1. demo=# select * into tableinto from table1 ;
  2. SELECT 2
  3. -- 表结构
  4. demo=# \d+ tableinto
  5. 数据表 "public.tableinto"
  6. 栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 统计目标 | 描述
  7. ------+---------+----------+--------+------+----------+----------+------
  8. c1 | integer | | | | plain | |
  9. c2 | numeric | | | | main | |
  10. c3 | integer | | | | plain | |
  11. c4 | varchar | | | | extended | |
  12. c5 | integer | | | | plain | |
  13. c6 | varchar | | | | extended | |
  14. c7 | integer | | | | plain | |
  15. 访问方法 heap
  16. demo=# select * from tableinto ;
  17. c1 | c2 | c3 | c4 | c5 | c6 | c7
  18. ----+-----+----+----+----+----+----
  19. 5 | 2.5 | 4 | a | 5 | a | 1
  20. 6 | 2.5 | 4 | b | 6 | b | 1
  21. (2 行记录)

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

2.create table as select

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

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

  1. demo=# create table tableas as select * from table1 ;
  2. SELECT 2
  3. -- 表结构
  4. demo=# \d+ tableas
  5. 数据表 "public.tableas"
  6. 栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 统计目标 | 描述
  7. ------+---------+----------+--------+------+----------+----------+------
  8. c1 | integer | | | | plain | |
  9. c2 | numeric | | | | main | |
  10. c3 | integer | | | | plain | |
  11. c4 | varchar | | | | extended | |
  12. c5 | integer | | | | plain | |
  13. c6 | varchar | | | | extended | |
  14. c7 | integer | | | | plain | |
  15. 访问方法 heap
  16. demo=# select count(1) from tableas ;
  17. count
  18. -------
  19. 2
  20. (1 行记录)

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

3.create table like

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

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

  1. 语法
  2. CREATE TABLE table_name ({ LIKE source_table [ like_option ... ] }
  3. )
  4. like_option 是:
  5. { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED |
  6. IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }
  1. demo=# create table tablelike (like table1 including all) ;
  2. CREATE TABLE
  3. -- 表结构
  4. demo=# \d+ tablelike
  5. 数据表 "public.tablelike"
  6. 栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 统计目标 | 描述
  7. ------+---------+----------+----------+------------------------------------+----------+----------+--------
  8. c1 | integer | | not null | nextval('table1_c1_seq'::regclass) | plain | | 主键
  9. c2 | numeric | | | | main | | 数值
  10. c3 | integer | | | 0 | plain | | 默认值
  11. c4 | varchar | | | | extended | | 字符
  12. c5 | integer | | | | plain | | 索引
  13. c6 | varchar | | | | extended | | 唯一值
  14. c7 | integer | | | | plain | | 外键
  15. 索引:
  16. "tablelike_pkey" PRIMARY KEY, btree (c1)
  17. "tablelike_c5_idx" UNIQUE, btree (c5)
  18. "tablelike_c6_key" UNIQUE CONSTRAINT, btree (c6)
  19. 访问方法 heap
  20. demo=# select count(1) from tablelike ;
  21. count
  22. -------
  23. 0
  24. (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是选择所有可用的单独选项的缩写形式。

KingbaseES 数据表复制语句的功能差异的更多相关文章

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

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

  2. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)

    https://www.cnblogs.com/mq0036/p/4155136.html 我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个tabl ...

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

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

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

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

  5. Oracle数据库表复制语句

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

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

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

  7. SQL中两种表复制语句

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

  8. 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 ...

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

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

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

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

随机推荐

  1. 利用LiveReload插件实现vscode和谷歌浏览器实时刷新

    说明 最近在研究CSS希望可以提升一个层次.在写DEMO练习的时候老是需要去谷歌浏览器手动刷新页面才能看到更改后的效果次数多了 我也受不了,这不我又请来了个帮手: LiveReload,名如其人,这家 ...

  2. error C2039: "function": 不是 "std" 的成员的解决方法

    这个错误通过某度没找到合适的解决方案,故记录下来 其实如果使用 google 搜索错误的英文关键词,大概第一条就是解决问题的链接 Large number of "'function' is ...

  3. 用Taro写一个微信小程序——版本升级

    一.升级 1.升级Taro CLI至最新版本 taro update self npm i -g @tarojs/cli 2.更新项目中 Taro 相关的依赖 taro update project ...

  4. Qt+MySql开发笔记:Qt5.9.3的mingw32版本编译MySql8版本驱动并Demo连接数据库测试

    前言   之前特定的mysql版本msvc版本已经调通了,但是为了更好的跨平台,所以选择用mingw32版本,于是需要编译mysql驱动的mingw32版本的驱动库,以便提供给qt连接mysql使用. ...

  5. python模块imghdr-----推测图像类型

    官方文档 https://docs.python.org/zh-cn/3/library/imghdr.html#module-imghdr 用处 模块推测文件或字节流中的图像的类型 imghdr.w ...

  6. 【LeetCode贪心#02】摆动序列,麻了

    摆动序列 力扣题目链接(opens new window) 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动 ...

  7. 【LeetCode哈希表#3】快乐数(set)

    快乐数 力扣题目链接(opens new window) 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程 ...

  8. yolo7检测学习Bubbliiiing的视频有感——(1)no model named 'cv2'

    我一直以来也是喜欢用vscode,就跟随B导安装了vscode 下载完B导提供的代码后如果想直接跟着视频B导的操作运行predict.py文件是不可能的,需要按照readme文档中的所有提示按照步骤放 ...

  9. 数据结构(三):舞伴配对问题(C++,队列)

    好家伙, 题目如下: 1.舞伴配对问题:假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴. 2.若两队初始人数不相同,则较长的那一队中未配 ...

  10. 使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph

    本文由社区用户 Albert 贡献,首发于 NebulaGraph 论坛,旨在提供多一种的部署方式使用 NebulaGraph. 在本文,我将会详细地记录下我用 K8s 部署分布式图数据库 Nebul ...