KingbaseES 数据表复制语句的功能差异
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是选择所有可用的单独选项的缩写形式。
KingbaseES 数据表复制语句的功能差异的更多相关文章
- oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INT ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)
https://www.cnblogs.com/mq0036/p/4155136.html 我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个tabl ...
- 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- Oracle数据库表复制语句
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句.txt
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- SQL中两种表复制语句
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- 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 ...
- PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
SELECT INTO和INSERT INTO SELECT两种表复制语句都可以用来复制表与表之间的数据,但是它们之间也有区别. 建表语句: bas_custom_rel表 CREATE TABLE ...
- select into from和insert into select from两种表复制语句区别
select into from和insert into select from两种表复制语句都是将源表source_table的记录插入到目标表target_table,但两句又有区别. 第一句(s ...
随机推荐
- Js中的堆栈
Js中的堆栈 堆heap是动态分配的内存,大小不定也不会自动释放,栈stack为自动分配的内存空间,在代码执行过程中自动释放. 栈区 在栈内存中提供一个供Js代码执行的环境,关于作用域以及函数的调用都 ...
- Java设计模式-访问者模式Visitor
介绍 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前 提下定义作用于这些元素的新的操作. 主要将数据结构与数据操作分离,解决 数据结 ...
- MYSQL服务无法启动:InnoDB: .\ibdata1 can't be opened in read-write mode
今天在那做实验倒腾mysql数据库,后来发现服务无法启动,查看日志报错如下: 2015-01-07 17:48:54 9136 [ERROR] InnoDB: .\ibdata1 can't be o ...
- 分层架构设计模式总结-MVC,洋葱架构,整洁架构,六边形架构,DDD等等
一.单层结构不分层 最开始开发项目时,由于需求较少,用一个单独的工程文件就可以满足开发的需求了,不需要进行划分. 二.MVC 分层和三层 到后面需求越来越多,于是就把文件进行分解,怎么分解?有人提出了 ...
- Postman文件数据导入导出
https://zhuanlan.zhihu.com/p/535757471?utm_id=0
- ubantu中安装redis及遇到的问题
安装命令 sudo apt-get install redis-server 开启远程连接 找到vi /etc/redis/redis.conf文件修改如下 bind 127.0.0.1 为 0.0. ...
- Redis加Lua脚本实现分布式锁
先讲一下为什么使用分布式锁: 在传统的单体应用中,我们可以使用Java并发处理相关的API(如ReentrantLock或synchronized)来实现对共享资源的互斥控制,确保在高并发情况下同一时 ...
- 【webserver 前置知识 02】Linux网络编程入门其一
网络结构模式 C/S结构 服务器 - 客户机,即 Client - Server(C/S)结构.C/S 结构通常采取两层结构.服务器负责数据的管理,客户机负责完成与用户的交互任务.客户机是因特网上访问 ...
- 第137篇:重学ES6模块化
好家伙, 我原本以为学完模块化之后,就能非常顺利的完成我的项目分包, 然而并没有,这是非常重要的知识,而我没有学好 所以我决定重学一遍 本篇为<阮一峰 ECMAScript 6 (ES6 ...
- C++ Qt开发:运用QThread多线程组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QTh ...