一、创建SCHEMA
--创建schema:
--语法:CREATE SCHEMA <schema_name> [OWNED BY <user_name>]
/*OWNED BY:指定schema的拥有者,如果省略。当前用户将是这个shema的拥有者*/
create schema my_schema;
create schema my_schema OWNED BY system.
--删除schema:
--语法:DROP SCHEMA <schema_name> [<drop_option>]
drop_option: CASCADE | RESTRICT
/*默认的drop_option为:RESTRICT(限制约束)
RESTRICT:直接删除没有依赖的对象,如果对象有依赖关系,会抛出错误信息。
CASCADE:直接删除所有对象。*/
CREATE SCHEMA my_schema;
CREATE TABLE my_schema.t (a INT);
DROP SCHEMA my_schema CASCADE;
select * from tables where schema_name='P1526659201' --查询schema:P1526659201下的所有表
二、创建TABLE
HANA数据库可以存储ROW TABLE(行表)和COLUMN TABLE(列表),分别适用于不同的场景
行存储表适用于场景
- 一次处理一条记录的情况
- 应用需要访问完整记录或记录的大部分(即一条记录中的所有字段或大多数字段)
- 不需要压缩率
- 没有或很少的聚集、分组等复杂操作
- 表中的记录行数不是很多
SQL创建行存储表
CREATE TABLE accounts(
act_no CHAR(18),
act_name NVARCHAR(100),
balance DECIMAL(15,2),
PRIMARY KEY (act_no)
) ;
列存储表适用场景
- 通常只是在一个或少量列上执行计算操作
- 表在进行搜索时通常基于少量列上的值
- 表有很多列
- 表有很多行,并且通常进行的是列式操作(比如:聚集计算和where中字段值查找)
- 需要很高的压缩率
SQL创建列存储表
-- CHANDAO.ZT_BUGS definition
CREATE COLUMN TABLE "CHANDAO"."ZT_BUGS" (
"ID" VARCHAR(10) NOT NULL ,
"PROJECT" VARCHAR(10),
"PRODUCT" VARCHAR(10),
"INJECTION" VARCHAR(10),
"IDENTITY" VARCHAR(10),
"BRANCH" VARCHAR(10),
"MODULE" VARCHAR(10),
"EXCUTION" VARCHAR(10),
"PLAN" VARCHAR(10),
"STORY" VARCHAR(10),
"STORY_VERSION" VARCHAR(10),
"TASK" VARCHAR(10),
"CASE_STR" VARCHAR(10),
"CASE_VERSION" VARCHAR(10),
"SYNC_DATE" VARCHAR(100),
PRIMARY KEY ("ID")) UNLOAD PRIORITY 5 AUTO MERGE;
三、复制TABLE
HANA除了直接建表外,也可以通过已存在的表创建新表,示例如下:
/*依据某个已经存在的表创建另外的新表。HANA SQL提供了两类方法*/
--方法一:创建的表与源表数据类型、约束完全相同。例如:
CREATE TABLE T_ACCOUNTS LIKE ACCOUNTS WITH NO DATA
--方法二:创建的表字段类型和NULL/NOT NULL属性相同
CREATE TABLE T_ACCOUNTS1 AS (SELECT * FROM ACCOUNTS) WITH DATA