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条语句执行失败
这里涉及到了双引号,手册上是这样解释的:
定界标识符是什么意思不得而知
把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标准,自己在碰到的时候直接查就行了,列举是列举不完的。