gaussdb 基础管理 数据库 表 用户 模式 权限 存储过程

数据库database

#创建数据库,指定字符集UTF8,缺省情况下新数据库将通过复制标准系统数据库template0来创建,且仅支持使用template0来创建。

CREATE DATABASE devdb ENCODING 'UTF8' template = template0;

CREATE DATABASE testdb;

标识符的命名需要遵守如下规范:

* 标识符需要为字母(a-z)、下划线(_)、数字(0-9)或美元符号($)。

* 标识符必须以字母(a-z)或下划线(_)开头。

ENCODING [ = ] 'encoding' 可选。指定数据库使用的字符编码

TEMPLATE [ = ] template可选。模板名。即从哪一个模板创建新数据库。GaussDB采用从模板数据库复制的方式来创建新的数据库。

#修改数据库搜索路径

ALTER DATABASE testdb SET search_path TO pa_catalog,public;

#查询搜索路径

show search_path;

#查询数据库

SELECT datname FROM pg_database;

\l

#切回切换回默认数据库postgres

\c postgres

#重命名数据库

ALTER DATABASE testdb RENAME TO testdb1

表table

#行存表

CREATE TABLE PART ( P_PARTKEY BIGINT NOT NULL, P_NAME VARCHAR(55) NOT NULL, P_MFGR CHAR(25) NOT NULL, P_BRAND CHAR(10) NOT NULL, P_TYPE VARCHAR(25) NOT NULL, P_SIZE BIGINT NOT NULL, P_CONTAINER CHAR(10) NOT NULL, P_RETAILPRICE DECIMAL(15,2) NOT NULL, P_COMMENT VARCHAR(23) NOT NULL ) WITH (ORIENTATION = ROW);

#列存表

CREATE TABLE PART1 ( P_PARTKEY BIGINT NOT NULL, P_NAME VARCHAR(55) NOT NULL, P_MFGR CHAR(25) NOT NULL, P_BRAND CHAR(10) NOT NULL, P_TYPE VARCHAR(25) NOT NULL, P_SIZE BIGINT NOT NULL, P_CONTAINER CHAR(10) NOT NULL, P_RETAILPRICE DECIMAL(15,2) NOT NULL, P_COMMENT VARCHAR(23) NOT NULL ) WITH (ORIENTATION = COLUMN);

#查看表信息

\d

#增加列

ALTER TABLE part ADD COLUMN p_col1 bigint;

#增加列默认值

ALTER TABLE part ALTER COLUMN p_col1 SET DEFAULT 1;

#删除列默认值

ALTER TABLE part ALTER COLUMN p_col1 drop DEFAULT ;

#修改列数据类型

ALTER TABLE part MODIFY p_col1 INT;

#修改列名称

ALTER TABLE part RENAME p_col1 to p_col;

#查看表结构

\d part

#添加约束

CREATE UNIQUE INDEX bmsql_oorder_idx1 ON bmsql_oorder USING btree (o_w_id, o_d_id, o_carrier_id, o_id);

#添加索引

create index bmsql_customer_idx1 on bmsql_customer (c_w_id, c_d_id, c_last, c_first);

#查看索引

\di bmsql_customer_idx1

用户user

#创建用户

CREATE USER hccdp SYSADMIN IDENTIFIED BY "NHY^7ujm";

CREATE USER jim PASSWORD 'Gaussdb@123';

CREATE USER dim CREATEDB PASSWORD 'Gaussdb@123';

#修改密码

ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'Gaussdb@123';

#添加权限

ALTER USER jim CREATEROLE;

#锁定用户 解锁用户

ALTER USER jim ACCOUNT LOCK;

ALTER USER jim ACCOUNT UNLOCK;

#删除用户

DROP USER jim? CASCADE;

#查看角色

\du jim

#查看用户列表

SELECT * FROM pg_user;

模式Schema

#创建模式 在数据库创建用户时,系统会自动帮助用户创建一个同名Schema

CREATE SCHEMA ds;

#更改模式名

ALTER SCHEMA ds RENAME TO ds_new;

#修改模式的所有者

ALTER SCHEMA ds_new OWNER TO jack;

#查看模式的所有者

SELECT s.nspname,u.usename AS nspowner FROM pg_namespace s, pg_user u WHERE s.nspowner = u.usesysid;

#查看模式

\dn

权限

#sysadmin权限授权给他

CREATE USER joe PASSWORD 'Gaussdb@123';

ALTER USER joe with sysadmin;

#查看用户权限变化

\du

#撤回权限

ALTER USER joe with nosysadmin;

#使用schema权限

GRANT USAGE ON SCHEMA tpcds TO joe;

#表所有权限

GRANT ALL PRIVILEGES ON tpcds.reason TO joe;

#列的权限

GRANT select (r_reason_sk,r_reason_id,r_reason_desc),update (r_reason_desc) ON tpcds.reason TO joe;

#数据库连接权限 创建schema 且允许joe将此权限授权给其他用户

GRANT create,connect on database postgres TO joe WITH GRANT OPTION;

#创建角色

CREATE ROLE tpcds_manager PASSWORD 'Gaussdb@123';

#赋予权限给角色

GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager;

存储过程示例

#创建表 插入数据

CREATE TABLE employee (id varchar(100),name varchar(100),salary int);

CREATE TABLE ep_grade (id varchar(100),grade varchar(100),flag int);

Insert into employee values(1,'张三',5000);

Insert into employee values(2,'李四',5000);

Insert into employee values(3,'王五',5000);

Insert into employee values(4,'赵六',5000);

Insert into employee values(5,'太一',5000);

Insert into employee values(6,'太二',5000);

Insert into employee values(7,'太三',5000);

Insert into employee values(8,'太四',5000);

Insert into ep_grade values(1,'A',2022);

Insert into ep_grade values(2,'S',2021);

Insert into ep_grade values(3,'B',2021);

Insert into ep_grade values(4,'B',2021);

Insert into ep_grade values(5,'A',2021);

Insert into ep_grade values(6,'C',2022);

Insert into ep_grade values(7,'C',2021);

Insert into ep_grade values(8,'B',2022);

#创建存储过程

CREATE OR REPLACE PROCEDURE proc_emp()

AS

DECLARE

EP_ID VARCHAR(100);

GRADE VARCHAR(10);

SALARY INT;

CURSOR C1 IS select distinct id,grade FROM ep_grade where Flag = 2021;

BEGIN

OPEN C1;

LOOP

FETCH C1 INTO EP_ID,GRADE;

EXIT WHEN C1%NOTFOUND;

Case GRADE

when 'S'

then update employee set salary = salary+1000 where id=EP_ID ;

when 'A'

then update employee set salary = salary+500 where id=EP_ID ;

when 'B'

then update employee set salary = salary+100 where id=EP_ID;

when 'C'

then update employee set salary = salary-200 where id=EP_ID;

END Case;

DBE_OUTPUT.PRINT_LINE('ID: '||EP_ID||', Grade: '||GRADE||', updated.');

END LOOP;

CLOSE C1;

END;

/

#调用存储过程

call proc_emp();

相关推荐
建投数据14 分钟前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
恩爸编程39 分钟前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Hacker_LaoYi1 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀1 小时前
Redis梳理
数据库·redis·缓存
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
Michaelwubo2 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
你的微笑,乱了夏天2 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺2 小时前
分布式系统架构:服务容错
数据库·架构
好像是个likun2 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘