达梦数据库DCA学习笔记

卸载和安装

麒麟系统修改分辨率:
:::info
xrandr -s 1920x1440
:::
启用图形界面
:::info
xhost +
如果命令报错 : **unable to open display **需要编辑bash_profile
vi ~/.bash_profile
################
export DISPLAY=:0.0
################
source ~/.bash_profile
:::

卸载Dm8

:::info
停止数据库服务
systemctl stop DmServiceDMSERVER.service
跳转到dm8根目录下执行卸载脚本
./uninstall.sh -i
清空目录
rm -fr *
删除用户和组
userdel dmdba
groupdel dinstall
:::

安装DM8

:::info
关闭防火墙
systemctl stop firewalld
关闭selinux
vim /etc/selinux/config
将 SELINUX=enforcing 改为 SELINUX=disabled
setenforce 0
创建达梦数据库用户和用户组
groupadd dinstall
useradd -g dinstall dmdba
passwd dmdba
“输入密码”
:::
设置用户可打开最大文件数量
:::info
vi /etc/security/limits.conf

dmdba soft nofile 65536
dmdba hard nofile 65536

:::
创建安装目录,并修改权限
:::info
mkdir -p /dm8
chonw -R dmdba.dinstall /dm8
:::
挂载安装介质
:::info
cd /stage
mount -o loop dm8_20201107_x86_rh7_64_ent_8.1.1.144.iso /mnt
:::
登录root用户,启用图形化界面
:::info
su - root
xhost +
su - dmdba
:::
编辑bash_profile
:::info
export DISPLAY=:0.0
export LD_LIBRARY_PATH=" L D L I B R A R Y P A T H : / d m 8 / b i n " e x p o r t D M H O M E = " / d m 8 " e x p o r t P A T H = LD_LIBRARY_PATH:/dm8/bin" export DM_HOME="/dm8" export PATH= LDLIBRARYPATH:/dm8/bin"exportDMHOME="/dm8"exportPATH=PATH: D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:DM_HOME/tool
:::
调用安装gui界面
:::info
cd /mnt
./DMInstall.bin
(如果使用命令行安装,要在后面加一个 -i )
:::
安装完成后切换到root执行脚本
:::info
./dm8/script/root/root_installer.sh
:::

安装完成后GUI界面会自动弹出创建数据库界面, 默认现在初始化数据库,点击初始化, 或者在dmdba用户下, 运行dbca.sh.

验证数据库创建成功
:::info
查看后台进程
ps -ef |grep dmserver
登录数据库
disql sysdba/密码
:::
:::info
dbca.sh 达梦数据库配置助手
analyzer 审计分析
console
dts
manager 数据库管理
monitor

:::
使用命令行创建达梦数据库

$DM_HOME/bin/dminit path=/dm8/data DB_NAME=dameng02 instance_name=TEST port_num=5238
su - root
cd /dm8/script/root/
./dm_service_installer.sh -t dmserver -p TEST -dm_ini /dm8/data/dameng02/dm.ini
systemctl start DmServiceTEST
su - dmdba
disql sysdba/SYSDBA:5238  (SYSDBA是默认密码)

DMSQL 查询语句

DML(Data Mannipulation Language)数据操纵语言:
查询、操纵数据表资料行
DDL(Data Definition Language)数据定义语言:
建立、修改、删除数据库中数据表对象
DCL(Data Control Language)数据控制语言:
用于执行权限授予与收回操作
TCL(Transactional Control Language)事物控制语言:
维护数据的一致性

简单查询

--选择全列
select * from dmhr.department;

--使用数学运算
select employee_name,salary,salary+1000 from dmhr.employee;

--使用列别名
select employee_name,salary,salary+1000 as "TOL" from dmhr.employee;

--去重
select distinct department_id from dmhr.employee;

--使用连接符
select department_id,employee_name||'工资是:'||salary from dmhr.employee;

--使用比较运算
select employee_id,employee_name,salary from dmhr.employee where salary >=25000 and salary <=30000;

--与值列表的任一值匹配
select employee_id,employee_name,salary from dmhr.employee where salary in (15000,30000);

--选择类似值(找出所有姓马的人)
select * from dmhr.employee where employee.employee_name like '马%';

--空值判断
select employee_id,employee_name,department_id from dmhr.employee where department_id is not null;

--逻辑运算
select employee_name,salary from dmhr.employee where (employee_id=1001 or employee_id=1002) and salary >20000;

--排序  asc从小到大 desc从大到小
select employee_id,employee_name,salary from dmhr.employee order by salary desc,employee_id asc;

单行函数

--大小写处理函数
LOWER('SQL Course')
	-> sql course
UPPER('SQL Course')
	-> SQL COURSE
INITCAP('SQL Course')
	-> Sql Course

--字符处理函数
CONCAT('Hello','World')
 -> HelloWorld
SUBSTR('HelloWorld')
 -> Hello
LENGTH('HelloWorld')
 -> 10
INSTR('HelloWorld','W')
 -> 6
LPAD(salary,10,'*')
 -> *****24000
RPAD(salary,10,'*')
 -> 24000*****
TRIM('H' FROM 'HelloWorld')
 -> elloWorld

 --数字函数
ROUND(49.36,1)
 -> 49.4 --数值舍入到指定小数位
TRUNC(49.36,1)
 -> 49.3 --截取数值到指定小数位
MOD(10,3)
 -> 1 --取余

分组函数

--avg()取平均值
select employee_name from dmhr.employee where salary > (select avg(salary) from dmhr.employee); --列出工资大于平均数的人

--having()  WHERE 关键字无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据。
select employee_name,sum(salary) from dmhr.employee 
where job_id=32 group by employee_name,salary 
having sum(salary) > 50000; --找出总工资大于5万的项目经理

--cube() 列出所有组合
select job_id,job_title from dmhr.job group by CUBE(job_id,job_title);

--rollup() 聚合函数
select job_id,SUM(salary) from dmhr.employee 
group by ROLLUP(job_id); --统计每个职位的工资支出和公司总支出

--grouping() 对是否为分组聚合数据进行标注
select job_id,SUM(salary),GROUPING(job_id) grp_job_id from dmhr.employee group by ROLLUP(job_id);

--grouping set() 指定聚合分类
select job_id,department_id,SUM(salary) from dmhr.employee
group by GROUPING SET((job_id),(department_id),()); --分别查询各岗位工资支出,各科室工资支出和总工资支出

连接查询

--内连接 INNER JOIN ON  将多个表的数据组合起来
select 
employee.employee_id,employee.employee_name,employee.salary,job.job_title,department.department_name,location.street_address 
from dmhr.employee
inner join dmhr.job on employee.job_id = job.job_id
inner join dmhr.department on employee.department_id = department.department_id
inner join dmhr.location on department.location_id = location.location_id
order by job.job_id; --查询每个人的工资并显示其职位,科室,工作地点

--交叉连接cross join 两个表生成笛卡尔积
--若两个表都有10条数据,那么cross join之后的结果有 10*10=100条

--natural join 自然连接 匹配两个表中的相同元素,并组合
select employee.employee_id,employee.employee_name,employee.salary,job.job_title
from dmhr.employee 
natural join dmhr.job;

--外连接
--左外连接 left join on:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

--右外连接 right join on:与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

--全连接 full join on: 返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值。

子查询

--单行子查询
select employee_name from dmhr.employee where department_id = (select department_id from dmhr.employee where employee_name = '马学铭'); --查询马学铭科室的同事

--多行子查询
-- IN 等值列表中任意一个
-- ANY 将值与子查询返回的任意一个值进行比较
-- ALL 将值与子查询返回的每个值进行比较
select employee_name,salary from dmhr.employee where salary > all(select salary from dmhr.employee where department_id=108);

--EXISTS 
--EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
--EXISTS 可以与 NOT 一同使用,查找出不符合查询语句的记录
SELECT EMPLOYEE_ID ,EMPLOYEE_NAME FROM DMHR.EMPLOYEE WHERE EXISTS( SELECT * FROM DMHR.JOB_HISTORY WHERE EMPLOYEE.EMPLOYEE_ID = JOB_HISTORY.EMPLOYEE_ID );

DML语句

--INSERT 插入
INSERT INTO DMHR.EMPLOYEE VALUES(11146,'吴健','210102196202303000','wujian@dameng.om','1531248223','2016-05-30','11',30000.00,0,1001,101);

--UPDATE 修改
update dmhr.employee set salary=20000 where employee_name='马学铭';
--用子查询更新
update dmhr.employee set salary=(select salary from dmhr.employee where employee_name='金纬') where employee_name='马学铭';

--DELETTE 删除
--删除一行
delete from dmhr.employee where employee_name='马学铭';
--清空表数据
delete from dmhr.job_history;

--MERGE合并 按照指定的条件执行插入或更新操作,按照指定的条件执行插入或更新操作
把T1表中C1值为2的记录行中的C2列,更新为表T2中C3值为2的记录中C4列的值,同时把T2中C3列为4的记录行插入到了T1中
MERGE INTO T1 USING T2 ON (T1.C1=T2.C3) 
WHEN MATCHED THEN UPDATE SET T1.C2=T2.C4 
WHEN NOT MATCHED THEN INSERT (C1,C2) VALUES(T2.C3,T2.C4);

表空间管理

达梦数据库没有database的概念,表空间tablespace是数据存放的位置,模式schema是给用户指定的工作范围,表table是存在模式下的数据结构。
表∈模式∈表空间
一个用户可以拥有多个表空间

查询数据库中的表空间

SELECT * FROM SYS.DBA_TABLESPACES;

查询模式及表

SELECT OWNER, OBJECT_NAME FROM SYS.DBA_OBJECTS;
OWNER是模式
OBJECT_NAME是表

创建表空间

create tablespace "ZZY" datafile '/dm8/data/DAMENG/ZZY.dbf' size 32 autoextend on next 1 maxsize 1000 CACHE=NOMAL

create tablespace "ZZY"  --创建名字为“ZZY”表空间
datafile '/dm8/data/....' --指定表空间文件地址
size 32 --表空间初始大小,单位MB
autoextend on --开启自动扩容
next 1 --每次扩容大小,MB
maxsize 1000 --扩容上限
CACHE=NORMAL --缓存模式

查看表空间

select * from sys."v$tablespace";

修改表空间状态

alter tablespace zzy offline; --关闭表空间 status = 1
alter tablespace zzy online; --打卡表空间 status = 0

删除表空间

drop tablespace zzy;

扩展表空间

alter tablespace "ZZY" add datafile '/dm8/data/DAMENG/ZZY02.dbf' size 32;

更换数据文件存储位置

alter tablespace DMHR offline; --先关闭表空间
alter tablespace "DMHR" rename datafile 'DMHR.dbf' to '/dm8/data/dmhr_new.dbf';
alter tablespace DMHR online;

调整重做日志文件大小

安装默认的重做日志文件大小为256M,如果OLTP系统中,重做日志文件过小,会频繁的做日志切换,影响数据库的性能,建议在安装时,根据实际需求扩大日志文件的大小和增加日志文件

alter database resize logfile 'DAMENG01.log' to 500;
alter database resize logfile 'DAMENG02.log' to 500;

增加重做日志文件

alter database add logfile '/dm8/data/DAMENG03.LOG' size 500;

用户管理

预定义用户:
SYS , SYSDBA , SYSAUDITOR , SYSSO , SYSDBO

创建用户

create user TEST indentified by  "dameng123";
--创建用户TEST 密码 dameng123

修改用户

alter user TEST indentified by "Dameng123";

删除用户

drop user TEST;

授予系统权限

:::info
CREATE TABLE 创建表
ALTER DATABASE 修改数据库
CREATE TABLESPACE 创建表空间
ALTER TABLESPACE 修改表空间
DROP TABLESPACE 删除表空间
CREATE USER 创建用户
CREATE VIEW 创建视图
CREATE PROCEDURE 创建存储过程/函数
CREATE ROLE 创建角色
CREATE SCHEMA 创建模式
:::

grant CREATE TABLE to TEST;

撤销系统权限

revoke CREATE TABLE from TEST;

授予对象权限

grant SELECT on dmhr.city to TEST;

撤销对象权限

revoke SELECT on dmhr.city from TEST;

角色
角色是一组权限的组合,使用角色的目的是使
权限管理更加方便

创建角色

--创建角色R1
create role R1;
--赋予R1权限
grant CREATE TABLE to R1;
--指定角色给用户TEST
grant R1 to TEST;

启用和禁用角色

--禁用
SP_SET_ROLE('R1',0);
--启用
SP_SET_ROLE('R1',1);

删除角色

drop role R1;

模式管理

模式介绍

· 模式定义
模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集
· 模式对象:
表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域

模式和用户的关系

当系统建立一个用户时,会自动生成一个对应的模式用户还可以建立其他模式

创建模式

create schema DaMeng authorization SYSDBA;
--创建模式并指定拥有者

设置当前模式

set schema DaMeng;
--SYSDBA用户将当前的模式从SYSDBA换到DAMENG模式

删除模式

drop schema DaMeng;

表约束和管理

创建表

create table dmhr.test (ID int,NAME char(1));

给表增加一列

alter table dmhr.test add column (AGE int);

删除列

alter table dmhr.test drop column AGE;

删除表

drop table dmhr.test;

常见约束类型
:::info
–非空约束
NOT NULL
–唯一性约束
UNIQUE
–主键约束
PRIMARY KEY
–外键约束
FOREIGN KEY
–检查约束
CHECK
:::

增加约束

alter table dmhr.test add constraint TEST_UNI unique(ID);

禁用和启用约束

--禁用约束
alter table dmhr.test disable constraint TEST_UNI;
--启用约束
alter table dmhr.test enable constraint TEST_UNI;

视图

:::info
• 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据
• 从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表
:::

创建视图

create view dmhr.personinfo as select dmhr.department.department_name,dmhr.employee_name from dmhr.department,dmhr.employee where dmhr.employee.department_id = dmhr.department.department_id;

修改视图

create or replace view dmhr.view1 as select `````;

删除视图

drop view dmhr.view1;

创建索引

create index job_ind on dmhr.job(job_id) tablespace dmhr;

重建索引

alter index dmhr.job_ind rebuild;

删除索引

drop index dmhr.job_ind;

数据库备份与还原

连接ODBC

配置 odbcinst.ini 文件

[dm8]
Description	= dm8
Driver 			= /dm8/drivers/odbc/libdodbc.so

配置 odbc.ini 文件

[dm8]
Description	= dm8 dsn
Driver			= dm8  
SERVER			= localhost # sql服务器地址 #
UID					= SYSDBA # 账号 #
PID					= zzy930821 # 密码 #
TCP_PORT		= 5236 # 端口 #

连接 odbc

isql dm8
  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值