一、DM支持的数据类型
1.1.字符数据类型
CHAR
CHARACTER
VARCHAER/VARCHAR2
CHAR、CHARACTER:在表达式计算中,该类型的长度上限不受页面大小限制,为32767。但实际插入表中的列长度要受到记录长度的约束,每条记录长度不能大于页面大小的一半。
VARCHAER/VARCHAR2:没指定USING LONG ROW存储选项时,实际最大存储长度由数据页大小决定;指定则不受数据页大小限制。
CHAR 同 VARCHAR 的区别在于前者长度不足时,系统自动填充空格,而后者只占用实际的字节空间。
1.2数值数据类型
数值类型有numberic、decimal、float、double等等,达梦中,默认精度是20字节。
规律: number(a,b),b是小数位,a是表示整数位+小数位不能超过的和,可以等于。
另外整数位留下的机会是a-b得到的机会。
比如number(5,1), 表示留给整数位的有4位的机会(5-1=4),类似8.8888这类
比如number(5,4), 表示留给整数位的有1位的机会(5-4=1)。
比如number(5,0), 表示留给整数位的有5位的机会(5-0=5)。
1.3日期/时间类型
达梦数据库的日期相关类型:date、time、datetime(也可以写成timestamp),data类型把日期和时间分成了两个部分,对应两种不同的类型data和time,date的精度只到天,而time的精度到毫秒。达梦中也有即包括年月日也包括时分秒的数据类型datetime,也就是timestamp类型。
1.4大文本/多媒体类型
大文本/多媒体类型:text、blob、clob、image等等,text类型类似oracle中的long,不过没有long那么多的限制。text、blob、clob、image的最大长度都是1-2G,相当于oracle long字段的长度,blob和image类型的字段内容必须存储十六进制数字串内容。
二、DMsql表达式
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位0 1:
2.1数值表达式
1. 一元算符 + 和 –
语法:+exp 、-exp
2. 一元算符 ~
语法:~exp
按位非算符,要求参与运算的操作数都为整数数据类型。
3. 二元算符 +、-、*、/
语法:exp1+exp2 、exp1- exp2 、exp1*exp2 、exp1/exp2
1) 只有精确数值数据类型的运算
两个相同类型的整数运算的结果类型不变,两个不同类型的整数运算的结果类型转换为范围较大的那个整数类型。
2) 有近似数值数据类型的运算
对于 exp1+exp2 、exp1- exp2 、exp1*exp2 、exp1/exp2 中 exp1 和 exp2只要有一个为近似数值数据类型,则结果为近似数值数据类型。
4. 二元算符 &
语法:exp1 & exp2(二进制)
按位与算符,要求参与运算的操作数都为整数数据类型。
参与运算的两个数据,按照二进制位进行“与运算”。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为1,则值为1。否则为0
5. 二元算符 |
语法:exp1 | exp2
按位或算符,要求参与运算的操作数都为整数数据类型。
参与运算的两个数据,按照二进制位进行“或运算”。
运算规则:0&0=0; 0&1=1; 1&0=1; 1&1=1;
即:参与运算的两个数据只要有一个值为1 那么值为1
6. 二元算符 ^
语法:exp1 ^ exp2
按位异或算符,要求参与运算的操作数都为整数数据类型。
参与 运算的两个数据,按照二进制位进行“异或运算”。
运算规则: 0&0=0; 0&1=1; 1&0=1; 1&1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
7. 二元算符<<、>>
语法:exp1 << exp2
exp1 >> exp2
左移、右移运算符,要求参与运算的操作数只能为整数数据类型、精确数据类型。
2.2字符串表达式
连接 ||
语法:STR1 || STR2
(STR1 代表字符串 1,STR2 代表字符串 2)
连接操作符对两个运算数进行运算,其中每一个都是对属于同一字符集的字符串的求值。它以给定的顺序将字符串连接在一起,并返回一个字符串。其长度等于两个运算数长度之和。如果两个运算数中有一个是 NULL,则 NULL 等价为空串。
2.3运算符的优先级
三、DMsql支持的数据库模式
DM_SQL 语言支持关系数据库的三级模式,外模式对应于视图和部分基表,模式对应于基表,基表是独立存在的表。一个或若干个基表存放于一个存贮文件中,存贮文件中的逻辑结构组成了关系数据库的内模式。DM_SQL 语言本身不提供对内模式的操纵语句。
四、管理表
表是数据库中数据存储的基本单元,是对用户数据进行读和操纵的逻辑实体。表由列和行组成,每一行代表一个单独的记录。如果要在所在模式创建表,需要有create table权限,在其他用户的模式中船建表,需要create any table权限。创建时,需要指定表空间,否则就在main中创建。
4.1设计表
1. 规范化表,估算并校正表结构,使数据冗余达到最小;
2. 为每个列选择合适的数据类型,是否允许为空等,并根据实际情况判断是否需要对列进行加密或压缩处理;
3. 建立合适的完整性约束,管理约束可查看 15 章管理完整性约束的内容;
4. 建立合适的聚集索引。每个表(列存储表,堆表除外)都含一个聚集索引,默认以ROWID 建立,而建立合适的聚集索引,可以有效加快表的检索效率;
5. 根据实际需要,建立合适类型的表。DM 支持的表类型包括普通表、临时表、水平分区表、堆表和列存储表。本章只介绍普通表和临时表,其他类型表将在其他章节中重点介绍。
4.2指定表的存储空间上限
在创建表时指定 SPACE LIMIT 子句,可以对表的存储空间指定上限。DM 支持对表的存储空间指定大小,单位是 MB,即表的大小可由管理员指定,便于表的规模管理。当表的所有索引所占用的存储空间超过指定大小时,表将不能再新增数据。
1、指定表TEST对象的最大磁盘空间为500M;
CREATE TABLE TEST (SNO INT, MYINFO VARCHAR) DISKSPACE LIMIT 500;
2、修改表TEST的磁盘空间相知为50M;
ALTER TABLE TEST MODIFY DISKSPACE LIMIT 50;
4.3指定表的存储位置
1、创建表时,在STORAGE子句中指定存储表的表空间;
2、不指定位置则在默认表空间MAIN中。
指定表存储位置的优点为:
不同的数据库对应不同的数据文件的话,相同文件的竞争会减少,从而提高数据库管理的性能。据库表分布在不同的表空间里,即使一个表空间随坏了,不妨碍其他表空间上数据库表的访问,不至于整个数据库都停摆。
4.4创建表(行表)
如果要在所在模式创建表,需要有create table权限,在其他用户的模式中船建表,需要create any table权限。创建时,需要指定表空间,否则就在main中创建。
例:在tt1表空间上建立tt2表,指定表的填充因子FILLFACTOR为80%
原则上,在只读表上应该设置填充因子高,而有大量更新的表上应该设置较低的值。
SQL> create table tt1.tt2(
2 id int primary key,
3 name varchar(15),
4 job varchar(10)
5 )
6 storage(
7 initial 128,
8 next 10,
9 minextents 10,
10 fillfactor 80,
11 on tt1);
4.5查询建表
为了创建一个与已有表相同的新表,或者为了创建一个只包含另一个表的一些行和列