一.Gbase8s命令
(1)课程教学内容
(2)用户的创建与连接
gbase8s用户即系统用户,在系统用户创建后过一会儿,或者oninit -ivy初始化数据库,系统用户被识别入数据库,成为数据库用户。
useradd chenziyang
passwd chenziyang
在数据库中连接用户
connect to ‘@ol_gbasedbt1210_5’ user 'chenziyang'
ENTER PASSWORD:******
gbase8s 用户管理和alter user 语法_gbase8s创建用户
(3)Gbase8s基本语法
(4)定制安装Gbase8s流程(设置特定实例)
五个回车 Y
/home/num1chenziyang/ids Y
2(Custom installation)
两个回车 DEFAULT
2(Do not enable role separation,虽然也是DEFAULT,但是注意一下 )
1(Yes - create a server instance) 1(Yes - initialize the server)
1(Use default parameters) ftstest1
默认向下结束
(5)查看Gbase8s实例端口号
cat /etc/services
(6)Gbase8s创建数据空间&建立分片表
GBASE 8s 如何创建数据空间&建立分片表_八珍豆腐的博客-CSDN博客
创建各种数据空间(包括sbspace)
(7)oninit -ivy失败问题
此命令为彻底初始化数据库并启动,是一个很危险的命令。
在默认配置的情况下,会报:Fatal error in shared memory initialization,因为配置文件中将此操作限制了,避免误操作导致严重后果。
(8)Gbase8s数据库权限
GBase 8s数据库权限 - 墨天轮 (modb.pro)
(9)GBASE 8s常用命令之:dbschema
GBASE 8s常用命令之:dbschema_ls_hong的博客-CSDN博客
二.练习
(1)shell脚本连接Gbase8s并批量插入数据
vim insertid.sh
#!/bin/bash
export servername="test1"
echo "connect to '@servername' user 'czy' using '976156';">>tmp.sql
echo "database chenziyang;">>tmp.sql
for i in {1..10}
do
echo "insert into students(id) values($i);">>tmp.sql
done
dbaccess - tmp.sql
echo " ">tmp.sql
#echo "...">>tmp.sql :双箭头是添加,当语句在tmp.sql文件中准备好后,dbaccess - tmp.sql
#echo "...">tmp.sql :单箭头是覆盖,所以本程序最后用空格覆盖,等价于清空文件
chmod u+x insertid.sh
./insertid.sh
这种方法是适合dbaccess命令行工具的,与gsql和mysql工具不同。
(2)Gbase8s数据库操作练习(可顺利从头执行到尾)
dbaccess - -
create database chenziyang;
database chenziyang;
create table chen_sir(num int,name varchar(50));
info tables;
Table name
chen_sir
info columns for chen_sir;
Colum name Type Nulls
num integer yes
name varchar(50) yes
insert into chen_sir values(1,'gbase8s');
select * from chen_sir;
1.查看表的权限/为用户赋权
select * from systabauth
where tabid = (select tabid from systables where tabname = 'chen_sir');
查看表的权限。授权者是授予权限的用户。授权者通常是表的所有者,但所有者可为授权者授权了的另一用户。被授权者是将权限授予其的用户,被授权者 public意味着有 Connect 权限的任何用户。如果您的用户名未出现,则您仅拥有授予给了 public 的那些权限。
s(选择)、u(更新)、*(列级别特权)、i(插入)
d(删除)、x(索引)、a(改变)、r(引用)来标识特权的类型
grant connect to root;
grant resource to root;
grant dba to root;
Permission granted.许可授权,即给root用户赋权;dba为数据库管理员,包括所有权限。
2.触发器 --- trigger
create table students(id int,name varchar(50),age int);
create table students_log(id int,name varchar(50));
create trigger students_insert insert on students
referencing new as new
for each row
(insert into students_log values(new.id,new name));
Trigger created.
insert into students values(1,'aaa',18);
select * from students_log;
id name
1 aaa
触发器成功创建并应用:在students表插入数据时,向students_log表中插入数据。
note:referencing new as new语句是必要的,否则new识别不了。
select * from systriggers;
trigid 2
trigname students_insert
owner root
tabid 159
event I
old
new new
mode 0
collation zh_CN.57372
查看所有触发器
3.索引 --- index
create index index_students_age on students(age);
select age from students where age>1
age
2
4
5
6
select idxname from sysindexes
order by substr(idxname,1,1) asc; //按idxname的首字母排序(第m个字母,长度为n)
idxname amname
idxname idx_students_id
idxname sxa_gtor
idxname users
idxname view
4.结束
delete from students; //清空表内数据
drop index if exists index_students_age;
drop trigger if exists students_insert;
drop table if exists chen_sir;
drop table if exists students;
drop table if exists students_log;
GBase8s系统表介绍6(很多信息可以在系统表查到,如索引和触发器等)
(3)load/unload
load 语句速度较快且较易于使用,但它只接受指定的数据格式。通常可将使用unload语句准备好的数据用于 load。
load/unload 用于单表文本数据的装载和卸载,unload 导出表数据到指定文件,load则将指定的文本文件数据插入到表。
示例 1:导出表 test 的所有数据到 test.unl 文件:
unload to test.unl select * from test;
示例 2:将文本文件 test.unl 的数据导入到表:
test load from test.unl insert into test;
三.sql语句学习与分析
1.
select first 5 col1, col2 from
table (function fibGen(10)) tab1(col1), table (function fibgen(5)) tab2(col2)
group by col1, col2
order by col2 desc;
1. `select first 5 col1, col2 from`:这部分表示选择前5个满足条件的记录。其中,`first` 是一个关键字,用于指定返回结果的数量。在这里,它表示返回前5条记录。
2. `table (function fibGen(10)) tab1(col1), table (function fibgen(5)) tab2(col2)`:这部分表示从两个表中选择数据。`fibGen(10)` 和 `fibgen(5)` 是两个函数,分别生成了包含10个和5个元素的斐波那契数列。这两个表分别命名为 `tab1` 和 `tab2`,并且它们都有两列,分别是 `col1` 和 `col2`。
3. `group by col1, col2`:这部分表示按照 `col1` 和 `col2` 的值进行分组。这意味着查询结果将包含多个分组,每个分组包含具有相同 `col1` 和 `col2` 值的记录。
4. `order by col2 desc;`:这部分表示按照 `col2` 的值进行降序排列。`desc` 是一个关键字,表示降序排列。这意味着查询结果将按照 `col2` 的值从大到小排序。
2.
select col1, col2, count(*) from
table (function fibGen(10)) tab1(col1), table (function fibgen(5)) tab2(col2)
group by col1, col2
having count(*) > 1
order by col1, col2 asc;
1. `select col1, col2, count(*) from`:选择要查询的列,这里是col1和col2,以及计算每个组合出现的次数(count(*))。
2. `table (function fibGen(10)) tab1(col1), table (function fibgen(5)) tab2(col2)`:创建两个表tab1和tab2,分别使用fibGen函数生成前10个斐波那契数列的值作为col1,使用fibgen函数生成前5个斐波那契数列的值作为col2。
3. `group by col1, col2`:按照col1和col2的组合进行分组。
4. `having count(*) > 1`:筛选出在分组后出现次数大于1的组合。
5. `order by col1, col2 asc;`:按照col1和col2升序排列结果。
四.一些与数据库相关的linux操作
1.netstat
netstat命令用于显示网络连接、路由表和网络接口等系统的网络状态信息。它可以帮助用户监视和诊断网络活动,以及查看系统的网络配置。
命令:
netstat -a: 显示所有活动的网络连接和监听端口
netstat -t: 显示TCP连接
netstat -u: 显示UDP连接
netstat -r: 显示路由表
netstat -s: 显示网络统计信息
netstat -i: 显示网络接口信息
场景:
安装数据库时,端口号被占用,想要查看端口号并释放:
netstat -ntl(列出所有正在监听的TCP连接,显示其本地地址、端口号以及连接状态)
fuser -k -n tcp 8000(查找并终止占用TCP端口8000的进程)