文章目录
- DM概述
- 数据定义
- 表空间管理
- 1. 创建表空间
- 2. 修改表空间
- 3. 删除表空间
- 用户管理
- 1. 创建用户
- 2. 修改用户
- 3. 删除用户
- 模式管理
- 1. 创建模式(2种方法)
- 2. 设置当前模式
- 3. 删除模式
- 表管理
- 1. 创建表
- 2. 修改表
- 3. 删除表
文章有点点长,可以先收藏哦,如果对你有帮助的话,可以点个赞和关注嘛。
DM概述
-
DM数据库体系结构由
数据库实例
和物理存储结构
组成。-
数据库实例包括:内存结构与后台进程
-
物理结构包括存储在磁盘上的数据文件、控制文件、日志文件、归档文件等。
-
物理存储结构——主要用于描述数据库外部数据的存储——
与具体的操作系统有关
-
逻辑存储结构——主要描述数据库内部数据的组织和管理方式——
与操作系统无关
-
-
-
SQL
-
SQL(Structured Query Language)结构化查询语言,是一个通用的、功能极强的关系数据库语言。
-
SQL的五大特点:
-
综合统一
-
高度非过程化
-
面向集合的操作方式
-
以同一种语法结构提供多种使用方式(SQL即是独立的语言,又是嵌入式语言)
-
语言简洁,易学易用
-
-
数据定义
-
模式:模式就是数据库数据的逻辑结构,表,索引,视图,存储过程等数据库对象的逻辑容器。
-
表空间: 表空间是一种逻辑存储结构,数据库的对象如表、索引等在逻辑上都是存储在指定的表空间中。
-
语法符号含义
符号 | 描述 |
---|---|
<> | 一个语法对象 |
::= | 表示定义符,用来定义一个语法对象。定义符左边为语法对象,右边为相应的语法描述 |
{ } | 指明{ }内的语法选项在实际的语句中可以出现O…N次(N为大于0的自然数),但是{ }本身不能出现在语句中。 |
[ ] | 指明[ ]内的语法选项在实际的语句中可以出现O…1次,但是[ ]本身不能出现在语句中。 |
-
保留字与标识符
-
保留字
分为SQL保留字、DMSQL程序保留字、模式保留字、变量保留字和别名保留字
-
标识符
-
正规标识符
以字母、、$、#或汉字开头,后面可以跟随字母、数字、、$、#或者汉字,最大长度是128个英文字符或64个汉字。
正规标识符不能是保留字。
-
定界标识符
用双引号" "括起来,可以包含任意字符。(如:“table”)其中使用连续两个双引号转义为一个双引号。
-
-
表空间管理
表空间管理 | 语句 | 例子 |
---|---|---|
创建 | create tablespace <表空间名> <数据文件子句> [<数据页缓冲池子句>][<存储加密子句>][<指定DFS副本子句>]; | create tablefile ts12 datafile “D:\dmdbms\data\DAMENG\TS201.DBF” size 512; |
修改 | alter tablespace <表空间名> [ONLINE|OFFLINE| <表空间重命名子句>|<数据文件重命名子句>|<增加数据文件子句>| <修改文件大小子句>|<修改文件自动扩展子句>|<数据页缓冲池子句>]; | alter tablespace ts11 offline; // 设置成离线状态 alter tablespace ts11 rename datafile ‘D:\dmdbms\data\DAMENG\TS103.DBF’ to ‘D:\dmdbms\data\DAMENG\TS_103.DBF’; alter tablespace ts11 online; // 设置成在线状态 |
删除 | drop tablespace <表空间名>; | drop tablespace ts12; select * from dba_data_files; // 查看表空间 |
1. 创建表空间
create tablespace <表空间名> <数据文件子句> [<数据页缓冲池子句>][<存储加密子句>][<指定DFS副本子句>]
-
<表空间名>:表空间的名称,最大长度128字节;
-
<文件路径>:指明新生成数据文件在
操作系统下的路径+新数据文件名
。
说明:
-
<数据文件子句>::=
DATAFILE
<文件说明项>{,<文件说明项>} -
<文件说明项>::=<文件路径>[
mirror
<文件路径>]size
<文件大小>[<自动扩展子句>] -
<自动扩展子句>::=
autoextend
<on
[<每次扩展大小子句>][<最大大小子句>|off
> -
<每次扩展大小子句>::=
next
<扩展大小> -
<最大大小子句>::=
maxsize
<文件最大大小> -
<数据页缓冲池子句>::=
cache
=<缓冲池名> -
<存储加密子句>::=
encrypt wlth
<加密算法>〔[by
]<加密密码>] -
<指定DFS副本子句>::=[<指定副本数子句>][<副本策略子句>]
-
<指定副本数子句>::=
copy
<副本数> -
<副本策略子句>::=
great | micro
注意:
-
创建表空间的用户必须具有
DBA
权限; -
表空间名在服务器中必须
唯一
; -
一个表空间最多可以拥有
256
个数据文件。 -
文件大小的单位默认为MB,数据文件大小只写数字即可
举例:
创建一个名称为TS11的表空间,包含两个数据文件,其中,TS101.DBF文件初始大小为128MB,可自动扩展,每次扩展4MB,最大扩展至1024MB,TS102.DBF文件初始大小为256MB,不能自动扩展。
create tablespase TS11
datafile
'D:\dmdbms\data\DAMENG\TS101.DBF' size 128 autoextend on next 4 maxsize 1024,
'D:\dmdbms\data\DAMENG\TS102.DBF' size 256 autoextend off;
// 换行更方便阅读和检查代码
2. 修改表空间
alter tablespace <表空间名> [ONLINE|OFFLINE|
<表空间重命名子句>|<数据文件重命名子句>|<增加数据文件子句>|
<修改文件大小子句>|<修改文件自动扩展子句>|<数据页缓冲池子句>];
-
<表空间重命名子句>::=
RENAME TO
<表空间名> -
<数据文件重命名子句>=
RENAME DATAFILE
<文件路径> {<文件路径>}TO
<文件路径> {<文件路径>} -
<增加数据文件子句>::=
ADD
<数据文件子句> -
<修改文件大小子句>:=
RESIZE DATAFILE
<文件路径>TO
<文件大小> -
<修改文件自动扩展子句>:=
DATAFILE
<文件路径> {<文件路径>[<自动扩展子句>]}
举例:
- 重命名数据文件TS103.DBF为TS_103.DBF。重命名数据文件时,必须先将数据文件设置成离线状态,然后再重命名
alter tablespace ts11 offline; // 设置成离线状态
alter tablespace ts11
rename datafile 'D:\dmdbms\data\DAMENG\TS103.DBF' to 'D:\dmdbms\data\DAMENG\TS_103.DBF';
alter tablespace ts11 online; // 设置成在线状态
- 修改数据文件TS102.DBF为自动增长,每次增长4MB,最大为1024MB。
alter tablespace ts11
datafile 'D:\dmdbms\data\DAMENG\TS102.DBF' autoextend on next 4 maxsize 1024;
- 将TS11表空间改名为TS_11。
alter tablespace ts11 rename to ts_11;
- 修改TS_11表空间缓冲池名字为KEEP。
alter tablespace ts_11 cache="KEEP";
3. 删除表空间
drop tablespace <表空间名>
注意:
-
SYSTEM、RLOG、ROLL和TEMP表空间不允许删除。
-
用该语句的用户必须具有DBA权限。
-
系统处于suspend或mount状态时不允许删除表空间,系统只有处于open状态下才允许删除表空间。
-
如果表空间存放了数据,则不允许删除表空间。如果确实要删除表空间,则必须先删除表空间中的数据对象。
-
如果表空间存在数据,则不能直接删除表空间。
举例:
删除表空间TS12。
drop tablespace ts12;
select * from dba_data_files; // 查看表空间
用户管理
用户管理 | 执行代码 | 举例 |
---|---|---|
创建用户 | create <用户名> identified <身份验证模式> | create user user1 identified by pworduser1 limit connect_time 3 default tablespace example; |
修改用户 | alter user <用户名> [IDENTIFIED <身份验证模式>] | alter user dmhr identified by DMHR12345; |
删除用户 | drop user [IF EXISTS] <用户名> [RESTRICT|CASCADE]; | drop user user0; select * from dba_users; // 查看所有用户 |
1. 创建用户
create <用户名> identified <身份验证模式>
[PASSWORD_POLICY<口令策略>] [<锁定子句>] [<存储加密密钥>] [<空间限制子句>]
[<只读标志>] [<资源限制子句>] [<允许IP子句>] [<禁止IP子句>] [<允许时间子句>]
[<禁止时间子句>] [<TABLESPACE子句>];
-
<用户名>指明要创建的用户名称,用户名称最大长度128字节;
-
<身份验证模式>::=<数据库身份验证模式>|<外部身份验证模式>
-
<数据库身份验证模式>=by<口令>
-
<外部身份验证模式>=externally
-
-
<口令策略>::=口令策略项的任意组合;
-
0:无策略
-
1:禁止与用户名相同
-
2:口令长度不小于9
-
4:至少包含一个大写字母(A-Z)
-
8:至少包含一个数字(0-9)
-
16:至少包含一个标点符号(英文输入状态下,除" 和空格外的所有符号)
-
-
<锁定子句>:=ACCOUNTLOCK|ACCOUNTUNLOCK
-
<存储加密密钥>::=ENCRYPTBY<口令>
-
<空间限制子句>::=DISKSPACELIMIT<空间大小>|DISKSPACEUNLIMITED
-
<只读标志>::=READONLY|NOTREADONLY
-
<资源限制子句>::=LIMIT<资源设置项>{<资源设置项>}
-
•<资源设置项>::=SESSION_PER_USER<参数设置>|CONNECT_IDLE_TIME<参数设置>|CONNECT_TIME<参数设置>|CPU_PER_CALL<参数设置>|CPU_PER_SESSION<参数
设置>|MEM_SPACE<参数设置>|READ_PER_CALL<参数设置>|READ_PER_SESSION<参数设置>|FAILED_LOGIN_ATTEMPS<参数设置>|PASSWORD_LIFE_TIME<参数设置>|PASSWORD_REUSE_TIME<参数设置>|PASSWORD_REUSE_MAX<参数设置>|PASSWORD_LOCK_TIME<参数设置> | PASSWORD_GRACE_TIME<参数设置> -
<参数设置>::=<参数值>|UNLIMITED
-
<允许IP子句>:=ALLOW_IP<IP项>{<IP项>斗}
-
<禁止IP子句>:=NOT_ALLOW_IP<IP项>{<IP项>}
-
<IP项>::=<具体P>|<网段>
举例:
创建USER1用户,口令为PWORDUSER1,会话超时为3分钟,默认表空间为EXAMPLE。
create user user1 identified by pworduser1
limit connect_time 3 default tablespace example;
2. 修改用户
alter user <用户名>
[IDENTIFIED<身份验证模式>][PASSWORD_POLICY<口令策略>][<锁定子句>]
[<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许IP子句>]
[<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>]
[<INDEX_TABLESPACE子句>][<SCHEMA子句>]……;
注意:
-
每个用户均可修改自身的口令,SYSDBA用户可强制修改非系统预设用户的口令(在数据
库验证方式下)。 -
只有具备ALTERUSER权限的用户才能修改其身份验证模式、系统角色及资源限制项。
-
不论dm.ini的DDL_AUTO_COMMIT设置为自动提交还是非自动提交,ALTERUSER操作都会被自动提交。
-
系统预设用户不能修改其系统角色和资源限制项。
举例:
将DMHR用户的密码修改为DMHR12345。
alter user dmhr identified by DMHR12345;
3. 删除用户
drop user [IF EXISTS] <用户名> [RESTRICT|CASCADE];
-
如果使用
restrict
(默认),若该用户建立了数据库对象〈如表、视图、过程或函数),或其他用户对象引用了该用户的对象,或在该用户的表上存在其它用户建立的视图,DM将返回错误信息,而不删除此用户; -
如果使用
cascade
选项,除数据库中该用户及其创建的所有对象被删除外,如果其他用户创建的表引用了该用户表上的主关键字或唯一关键字,或者在该表上创建了视图,DM还将自动删除相应的引用完整性约束及视图依赖关系;
注意:
-
系统自动创建的三个系统用户SYSDBA、SYSAUDITOR和SYSSSO不能被删除;
-
具有DROPUSER权限的用户即可进行删除用户操作;
-
执行此语句将导致DM删除数据库中该用户建立的所有对象,且不可恢复。如果要保
存这些实体,请参考REVOKE语句; -
删除不存在的用户会报错。若指定if exists关键字,删除不存在的用户,不会报错;
-
正在使用中的用户可以被删除,删除后重登录或者做操作会报错。
-
若用户user0存在数据对象,则不能删除。
举例:
以用户SYSDBA登录,删除用户USER0。
drop user user0;
select * from dba_users; // 查看所有用户
模式管理
模式 | 语句 | 例子 |
---|---|---|
创建模式 | 1. create schema <模式名> [AUTHORIZATION<用户名>][<DDL_GRANT子句>{<DDL_GRANT子句>}]; 2. create schema authorization <用户名> [<DDI_GRANT子句>{<DDL_GRANT子句>}]; | create schema dmhr2 authorization dmhr create table tab1(id int, name varchar(20)); // 该命令中,第一行没有分号! |
设置当前模式 | set schema <模式名> | set schema dmhr2; |
删除模式 | drop schema [RESTRICT/CASCADE]; | drop schema dmhr2 cascade; // 模式不为空时,用cascade |
模式是一个架构,并且可以在概念上将其看作是包含表、视图和权限定义的对象。
在DM中,一个用户可以创建多个模式,一个模式中的对象(表、视图)可以被
多个用户使用。
系统为每一个用户自动建立了一个与用户名同名的模式作为默认模式,用户
还可以用模式定义语句建立其它模式。
1. 创建模式(2种方法)
create schema <模式名>
[AUTHORIZATION<用户名>][<DDL_GRANT子句>{<DDL_GRANT子句>}];
create schema authorization <用户名>
[<DDI_GRANT子句>{<DDL_GRANT子句>}];
-
<用户名> :指明给哪个用户创建模式,如果省略用户名,则默认给当前用户创建模式。
-
authorization <用户名> :标识了拥有该模式的用户;它是为其他用户创建模式时使用的;缺省拥有该模式的用户为SYSDBA;
-
使用schdefclause2创建模式时,模式名与用户名相同;
举例:
以用户SYSDBA登录,为DMHR用户增加一个模式,模式名为DMHR2,并在DMHR2模式中定义一张表TAB1。
create schema dmhr2 authorization dmhr
create table tab1(id int, name varchar(20));
// 该命令中,第一行没有分号!
2. 设置当前模式
set schema <模式名>
只能设置成属于自己的模式
举例:
将DMHR2模式设置为DMHR用户的当前模式。
set schema dmhr2;
3. 删除模式
drop schema [RESTRICT/CASCADE];
-
如果使用
RESTRICT
选项,只有当模式为空时删除才能成功,否则,当模式中存在数据库对象时则删除失败。默认选项为RESTRICT选项。 -
如果使用
CASCADE
选项,则整个模式、模式中的对象,以及与该模式相关的依赖关系都被删除。
举例:
以用户SYSDBA登录,删除DMHR2模式。
drop schema dmhr2 cascade;
// 模式不为空时,用cascade
表管理
表分为两类:数据库内部表、外部表
表管理 | 语句 | 例子 |
---|---|---|
创建表 | create [[GLOBAL]TEMPORARY] table <表名定义> <表结构定义>; | createtable stu (stuidchar(11),stunamechar(30), stusexchar(2),stubirthdate, stuschoolchar(50)); |
修改表 | alter table [<模式名>.]<表名><修改表定义子句>; | alter table student.stu Drop stubirth; |
删除表 | drop table [<模式名>.]<表名>[RESTRICT|CASCADE]; | drop table student.stu; |
1. 创建表
create [[GLOBAL]TEMPORARY] table <表名定义> <表结构定义>;
-
<表名定义>::=[<模式名>.]<表名>
-
<表结构定义>::=(<字段定义>{,<字段定义>}[<表级约束定义>{,<表级约束定义>}])[<PARTITION子句>][<空间限制子句>][<STORAGE子句>习]
-
<字段定义>::=<字段名><字段类型>[DEFAULT<列默认值表达式>][<列级约束定义>]
-
<列级约束定义>::=[CONSTRAINT<约束名>][NOT]NULL|<唯一性约束选项>|<引用约束>[CHECK(<检验条件>)]
-
<唯一性约束选项>::=[PRIMARYKEY]|[NOT]CLUSTERPRIMARYKEY]|[CLUSTER[UNIQUE]KEY]|UNIQUE
-
<引用约束>::=REFERENCES[<模式名>.]<表名>[(<列名>[,<列名>]})]
-
<表级约束定义>::=[CONSTRAINT<约束名>]<唯一性约束选项>(<列名>{<列名>})|FOREIGNKEY(<列名>{<列名>})<引用约束>|CHECK(<检验条件>)
举例:
创建数据表stu,score,course。
createtable stu
(stuidchar(11),stunamechar(30),
stusexchar(2),stubirthdate,
stuschoolchar(50));
2. 修改表
alter table [<模式名>.]<表名><修改表定义子句>;
其中<修改表定义子句>简化格式如下:
-
MODIFY<字段定义>
-
|ADD[COLUMN]<字段定义>
-
|DROP[COLUMN]<字段名>[RESTRICT|CASCADE]
-
|ADD[CONSTRAINT[<约束名>]]<表级约束定义>[<CHECK选项>]
-
|DROPCONSTRAINT<约束名>[RESTRICT|CASCADE]
举例:
- 修改数据表stu,删除字段stubirth。
alter table student.stu Drop stubirth;
- 修改数据表stu,增加日期型字段stubirth。
alter table student.stu add stubirth date;
3. 删除表
drop table [<模式名>.]<表名>[RESTRICT|CASCADE];
表删除有两种方式:
-
如果以
RESTRICT
方式删除该表,要求该表上已不存在任何视图以及参照完整性约
束,否则DM返回错误信息,而不删除该表。RESTRICT为默认值。 -
如果以
CASCADE
方式删除该表,将删除表中唯一列上和主关键字上的参照完整性约束,当设置dm.ini中的参数DROP_CASCADE_VIEW值为1时,还可以删除所有建立在该表上的视图。
举例:
删除数据表stu。
drop table student.stu;
如果对你有帮助的话,可以点个赞和关注呢~