达梦 创建表空间,模式,及表

1.创建表空间bookshop(教程上叫创建实例库)

create tablespace bookshop datafile 'bookshop.dbf' size 150;

提示错误!

[执行语句1]:
create tablespace bookshop datafile 'bookshop.dbf' size 150;
执行失败(语句1)
第1 行附近出现错误[-5529]:
没有创建表空间权限

1条语句执行失败

使用sysdba登录后仍然报这个错误,先不管他,我也不知道什么原因。

2.创建模式
刚才表空间没有创建成功,我用的是已经创建的好的表空间和实例,根据手册创建模式persons

create schema persons authorization test; #test为我自己创建的用户名

创建成功!

3.创建表

create table persons.address(
addressid int identity(1,1) primary key,
address1 varchar(60) not null,
address2 varchar(60),
city varchar(30) not null,
postalcode varchar(15) not null storage (on bookshop));

报错提示!

[执行语句1]:
执行失败(语句1)
第5 行附近出现错误[-2604]:
存在只可用于列存储表的STORAGE参数

1条语句执行失败

看来表空间创建失败了,storage需要换一个参数。

修改storage再尝试一次:

CREATE TABLE  "tablename2"
(
"id" INT IDENTITY(7, 1) NOT NULL,
"iflag" INT DEFAULT 0 NOT NULL,
"intime" BIGINT NOT NULL,
"bigdate" VARCHAR(256),
"smalldata" VARCHAR(256),
"htmlValue" CLOB,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;

CREATE UNIQUE  INDEX "INDEX936980838174001" ON "tablename"("id" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

创建成功!这次使用系统默认的表空间MAIN,表空间概念可以参考官方手册,值得注意的是,我把模式名给去掉了,但是也创建成功了,我用的是哪个用户登录,基本上创建表的位置就是该用户的同名模式下。

使用if not exists,再尝试一次:

CREATE TABLE if not exists "tablename2"
(
"id" INT IDENTITY(7, 1) NOT NULL,
"iflag" INT DEFAULT 0 NOT NULL,
"intime" BIGINT NOT NULL,
"bigdate" VARCHAR(256),
"smalldata" VARCHAR(256),
"htmlValue" CLOB,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;

CREATE UNIQUE  INDEX "INDEX936980838174001" ON "TEST_SPIDER"."tablename"("id" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

创建失败!

执行失败(语句1)
第 1 行, 第 26 列[if]附近出现错误[-2007]: 
语法分析出错

看来达梦对mysql还有不支持的地方,if应该属于mysql的方言了,这个语句再mysql中还是经常使用的,但是SQL标准中似乎没有这一块的内容,自家数据库都发展出了自家独有的部分,这一部分是方言。

将第一行“ ”修改为‘ ’,再次尝试:

CREATE TABLE  'tablename2'
(
"id" INT IDENTITY(7, 1) NOT NULL,
"iflag" INT DEFAULT 0 NOT NULL,
"intime" BIGINT NOT NULL,
"bigdate" VARCHAR(256),
"smalldata" VARCHAR(256),
"htmlValue" CLOB,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;

CREATE UNIQUE  INDEX "INDEX936980838174002" ON "tablename"("id" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

创建失败!

执行失败(语句1)
第 1 行, 第 36 列[']附近出现错误[-2007]: 
语法分析出错

1条语句执行失败

这里涉及到了双引号,手册上是这样解释的:
达梦 创建表空间,模式,及表_第1张图片
定界标识符是什么意思不得而知

把table双音号去掉,一个列的双引号去掉,再次尝试:

CREATE TABLE  tablename3
(
"id" INT IDENTITY(7, 1) NOT NULL,
"iflag" INT DEFAULT 0 NOT NULL,
intime BIGINT NOT NULL,
"bigdate" VARCHAR(256),
"smalldata" VARCHAR(256),
"htmlValue" CLOB,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;

CREATE UNIQUE  INDEX "INDEX936980838174001" ON "TEST_SPIDER"."tablename"("id" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

创建成功!
尝试以后发现,双引号和不加引号对create table没有太大的影响,其实mysql,右键表属性->DDL如下:

CREATE TABLE `persons` (
	`P_Id` int(11) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `iflag` int(1) NOT NULL DEFAULT 0,
  `intime` bigint(21) NOT NULL,
  `bigdate` varchar(256) DEFAULT NULL,
  `smalldata` varchar(256) DEFAULT NULL,
  `htmlValue` longtext,
  PRIMARY KEY (`id`),
	UNIQUE KEY `P_Id` (`P_Id`)
) ENGINE=MyISAM AUTO_INCREMENT=169 DEFAULT CHARSET=utf8;

用特殊符号括住了非保留字,只不过达梦用的双引号

最后若干次尝试:

CREATE TABLE  tablename3
(
"id" INT IDENTITY(7, 1) NOT NULL primary key,
"iflag" INT DEFAULT 0 NOT NULL,
"intime" BIGINT NOT NULL,
"bigdate" VARCHAR(256),
"smalldata" VARCHAR(256),
"htmlValue" CLOB
--NOT CLUSTER PRIMARY KEY("id")
)

STORAGE(ON "MAIN", CLUSTERBTR) ;

--CREATE UNIQUE  INDEX "INDEX936980838174001" ON "TEST_SPIDER"."tablename"("id" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

primary key放后面也行,放前面也行都能创建成功,storage 语句注释掉也行,默认是MAIN,index语句注释掉也行,都能创建成功

补充:
后续几天工作中,发现达梦对于很多关键词的支持还是很好的,default,primary key,unique等,详细还是参见手册和通用sql标准,自己在碰到的时候直接查就行了,列举是列举不完的。

你可能感兴趣的:(sql)