数据库原理+openGauss

news2024/11/28 18:49:26

文章目录

  • 0. 准备工作
    • 0.1 实验环境
    • 0.2 主要内容
    • 0.3 学习资源
  • 1. 安装部署实验(实验一)
    • 1.1 下载VirtualBox
    • 1.2 安装VirtualBox
    • 1.3 镜像文件导入
    • 1.4 启动虚拟机
    • 1.5 数据库使用
    • 1.6 数据库基本操作
  • 2 表&模式(实验二)
    • 2.1 创建模式
    • 2.2 创建表
    • 2.3 索引
    • 2.4 修改表
    • 2.5 插入表数据
  • 3 查询&更新(实验三)
    • 3.1 查询
      • 3.1.1 SELECT语句一般形式
      • 3.1.2 不带 WHERE 的简单查询
      • 3.1.3 带 WHERE 子句的查询
      • 3.1.4 排序和分组
      • 3.1.5 连接查询
      • 3.1.6 嵌套查询
      • 3.1.7 集合运算
    • 3.2 更新
      • 3.2.1 插入
      • 3.2.2 更新
      • 3.2.3 删除
  • 4 视图(实验四)
    • 4.1 定义视图
    • 4.2 基于视图查询
    • 4.3 基于视图更新
    • 4.4 删除视图
  • 5 完整性控制(实验五)
    • 5.1 创建表及主键约束、检查约束、外键约束
    • 5.2 添加唯一性约束
    • 5.3 创建触发器
      • 5.3.1 插入
      • 5.3.2 更新
    • 5.4 其他
      • 5.4.1 插入表数据
      • 5.4.2 修改表数据
      • 5.4.3 删除外键
      • 5.4.4 添加外键
  • 6 安全性控制(实验六)
    • 6.1 数据库用户&角色
      • 6.1.1 用户USER:
      • 6.1.2 角色ROLE:
    • 6.2 GRANT&REVOKE
      • 6.2.1 将系统权限SYSADMIN授权给USER/ROLE
      • 6.2.2 将数据库对象授权给USER/ROLE
      • 6.2.3 将USER/ROLE的权限授权给其他USER/ROLE
      • 6.2.4 回收权限并清理用户
  • 7 事务并发与控制(实验七)
    • 7.1 事务
      • 7.1.1 事务的ACID特性
      • 7.1.2 事务管理
      • 7.1.3 事务实例
        • 1.未提交的事务
        • 2.已提交的事务
    • 7.2 并发控制
      • 7.2.1 加锁语法
      • 7.2.2 加锁实例
  • 8 数据库备份与恢复(实验八)
    • 8.1 物理备份和恢复
      • 8.1.1 实验准备
      • 8.1.2 物理备份
      • 8.1.3 物理备份恢复
    • 8.2 逻辑备份和恢复
      • 8.2.1 实验准备:
      • 8.2.2 gs_dump备份
        • 1. gs_dump备份示例1
        • 2. gs_dump备份示例2
        • 3. gs_dump备份示例3
        • 4. gs_dump备份示例4
        • 5.gs_dump备份示例5
      • 8.2.3 gs_dumpall备份
      • 8.2.4 gs_restore导入
        • 1. gs_restore导入示例1
        • 2.gs_restore导入示例2
        • 3.gs_restore导入示例3
        • 4.gs_restore导入示例4
  • 9 使用JDBC连接数据库(实验九)
    • 9.1 准备连接环境
      • 9.1.1 修改数据库的pg_hba.conf文件
      • 9.1.2 登陆数据库授权退出
      • 9.1.3 修改数据库监听地址
      • 9.1.4 下载Java驱动包导入工具
      • 9.1.5 创建测试数据库demo
      • 9.1.6 创建schema
      • 9.1.7 创建测试表websites
      • 9.1.8 插入数据
      • 9.1.9 退出数据库
    • 9.2 确定26000端口是否放开
    • 9.3 下载并安装JDK
    • 9.4 配置JDK环境变量
    • 9.5 连接openGauss并执行java代码
      • 9.5.1 使用Java程序连接数据库并进行查询
      • 9.5.2 编译后执行
      • 9.5.3 执行结果
  • A 其他操作
  • B. oracle、mysql、sql server、Navicat

0. 准备工作

0.1 实验环境

openGauss 实验环境部署模式:通过创建虚拟机,选用开源操作系统openEuler来搭建,无额外使用成本。

0.2 主要内容

在这里插入图片描述

0.3 学习资源

  1. 华为MOOC
    ilearningx
    数据库学习路线
    华为云在线课程
  2. 教材
    在这里插入图片描述

1. 安装部署实验(实验一)

1.1 下载VirtualBox

VirtualBox官网
下载后,如下图所示:
在这里插入图片描述

1.2 安装VirtualBox

  1. 双击VirtualBox安装时,报错:
    报错:virtualbox安装"此应用无法在设备上运行"
    在这里插入图片描述
  2. 关闭内存完整性,重启之后。双击VirtualBox进行安装,安装路径为F:\APP\install\VirtualBox,如下图所示。
    在这里插入图片描述

1.3 镜像文件导入

  1. 打开VirtualBox管理器,点击导入
    在这里插入图片描述
  2. 选择要导入的镜像文件openEuler_openGauss.ova所在路径,假设为F:\APP\DownLoad,并点击 下一步
    在这里插入图片描述
    镜像文件openEuler_openGauss.ova如下。
    在这里插入图片描述
  3. 在 虚拟电脑导入设置 中,修改 默认虚拟电脑位置,假设为F:\APP\data\VirtualBox,之后点击 导入
    在这里插入图片描述
  4. 等待导入完成
    在这里插入图片描述

1.4 启动虚拟机

  1. 导入完成后,点击 启动,启动虚拟机
    在这里插入图片描述
  2. 输入用户名root 和 密码openGauss@123。登陆成功后,修改密码,改为123456。具体步骤如下图:
    在这里插入图片描述
  3. 输入ifconfig,查看两张网卡是否正常,如下图:
    在这里插入图片描述

1.5 数据库使用

  1. 使用putty连接虚拟机,从本地电脑通过配置enp0s3网卡的ip地址(从ifconfig可知,为192.168.56.101)来连接虚拟机。
    在这里插入图片描述

  2. 使用root用户来登录,密码为上述5.2.2中更改后的密码123456
    在这里插入图片描述

  3. 以操作系统用户omm登录数据库主节点,输入su - omm
    在这里插入图片描述

  4. 启动服务,输入gs_om -t start,显示如下结果,则表示启动成功。
    在这里插入图片描述

  5. 连接数据库,输入gsql -d postgres -p 26000 -r,显示如下结果则表示连接成功。
    postgres为openGauss安装完成后默认生成的数据库,初始可以连接到此数据库进行新数据库的创建。】
    26000为数据库主节点的端口号,需要根据openGauss的实际情况替换,请确认连接信息获取。】
    【使用数据库前,需先使用客户端程序或工具连接到数据库,然后就可以通过客户端程序或工具执行SQL来使用数据库了。gsql是openGauss数据库提供的命令行方式的数据库连接工具。】
    在这里插入图片描述

  6. 连接数据库时,omm用户密码为:openGauss@123,输入alter role omm identified by 'openGauss@1234' replace 'openGauss@123';更改密码,新密码为openGauss@1234
    在这里插入图片描述

  7. 创建数据库用户
    默认只有openGauss安装时创建的管理员用户可以访问初始数据库,输入CREATE USER ljh WITH PASSWORD "openGauss@1234"; 创建其他数据库用户帐号。【其他数据库用户CREATE USER lumi WITH PASSWORD "openGauss@1234";
    其中,账号为ljh,密码为openGauss@1234
    在这里插入图片描述

  8. 创建数据库,输入CREATE DATABASE db_tpcc OWNER ljh;,创建了db_tpcc数据库【其他数据库:CREATE DATABASE db_lumi OWNER lumi;
    在这里插入图片描述

  9. 创建完db_tpcc数据库后,就可以按\q方法退出postgres数据库,输入gsql -d db_tpcc -p 26000 -U ljh -W openGauss@1234 -r使用新用户ljh连接到数据库db_tpcc执行接下来的创建表等操作。【其他用户登录数据库:gsql -d db_lumi -p 26000 -U lumi -W openGauss@1234 -r

  10. 当结果显示为如下信息,则表示连接成功。
    在这里插入图片描述

1.6 数据库基本操作

1. 华为 openGauss (GaussDB) 1.0 使用手册
2. openGauss数据库开发指导手册(上)
2. openGauss数据库开发指导手册(下)
4. openGauss数据库开发者指南
5. 华为云
报错:permission denied for schema public

2 表&模式(实验二)

  1. 创建数据库、模式、表和索引。
  2. 修改基本表的结构。
    在OpenGauss数据库系统中使用SQL语句(按教材上所示的属性)建立基本表,如STUDENT表、COURSE表、SC表等,并向表中填充数据。熟悉使用虚拟机进行OpenGauss中SQL语句的代码输入方式。
  3. 创建和删除索引
    使用SQL语句在上述表中创建索引,熟悉相应的SQL语句,请参考教材P73-79页的SQL语句,请注意标准SQL和openGauss中相应SQL语句相同与不同之处。

2.1 创建模式

CREATE SCHEMA ljh AUTHORIZATION ljh;
在这里插入图片描述

2.2 创建表

  1. 创建 students表
    CREATE TABLE students(sno CHAR(9) PRIMARY KEY,sname CHAR(10) NOT NULL,sex CHAR(2) CHECK(sex='男'OR sex='女'), birthday DATE, enrollyear CHAR(4), speciality CHAR(20), dno CHAR(4));
  2. 创建 courses表
    CREATE TABLE courses(cno CHAR(5) PRIMARY KEY,cname CHAR(20) NOT NULL,period SMALLINT, credit SMALLINT);
  3. 创建 sc表
    CREATE TABLE sc(sno CHAR(9), cno CHAR(5), grade SMALLINT CHECK(grade>=0 AND grade<=100), PRIMARY KEY (sno,cno), FOREIGN KEY (sno) REFERENCES students (sno), FOREIGN KEY (cno) REFERENCES courses (cno));
    在这里插入图片描述

问题: permission denied for schema public
在这里插入图片描述

2.3 索引

  1. 为 students 表上的 dno 创建 students_dept索引
    db_tpcc=> CREATE INDEX students_dept ON students(dno);
    在这里插入图片描述
  2. 删除该索引(\di查看索引,DBMS自动为主码创建索引)
    DROP INDEX students_dept
    在这里插入图片描述

2.4 修改表

  1. 修改 students 表的 sex 列的数据类型
    ALTER TEBLE students ALTER sex TYPE char(4);
    在这里插入图片描述

2.5 插入表数据

  1. 插入 students 表数据
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (1,'卢一','女','1993-01-01','2018','人工智能','001');
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (2,'卢二','男','1993-01-02','2019','软件','001');
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (3,'卢三','女','1993-01-03','2020','计算机技术','001');
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (4,'卢四','男','1993-01-04','2018','儿科','002');
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (5,'卢五','女','1993-01-05','2019','内科','002');
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (6,'卢六','男','1993-01-06','2020','外科','002');
    在这里插入图片描述
  2. 插入courses 表数据
    INSERT INTO courses(cno,cname,period, credit) VALUES (001,'计算机系','4','3');
    INSERT INTO courses(cno,cname,period, credit) VALUES (002,'医学系','5','6');
    在这里插入图片描述
  3. 插入sc 表数据
    INSERT INTO sc(sno, cno, grade) VALUES (1, 001, 90);
    INSERT INTO sc(sno, cno, grade) VALUES (2, 001, 80);
    INSERT INTO sc(sno, cno, grade) VALUES (3, 001, 100);
    INSERT INTO sc(sno, cno, grade) VALUES (4, 002, 90);
    INSERT INTO sc(sno, cno, grade) VALUES (5, 002, 95);
    INSERT INTO sc(sno, cno, grade) VALUES (6, 002, 89);
    在这里插入图片描述

3 查询&更新(实验三)

  1. 查询操作
    根据教材P79-94页所有查询实例,完成各类查询操作。
  2. 更新操作
    根据教材P94-96上所有更新实例,完成各类更新操作(插入、修改和删除数据等),请注意标准SQL和openGauss中相应SQL语句相同与不同之处。

3.1 查询

3.1.1 SELECT语句一般形式

select 
  [all|distinct]
  <目标列的表达式1> [别名],
  <目标列的表达式2> [别名]...
  from <表名或视图名> [别名],<表名或视图名> [别名]...
  [where<条件表达式>]
  [group by <列名> [having <条件表达式>]]
  [order by <列名> [asc|desc]];

前提:创建表,并插入数据。
courses表:
在这里插入图片描述
students表:
在这里插入图片描述
sc表:
在这里插入图片描述

3.1.2 不带 WHERE 的简单查询

  1. 查询所以课程信息
    在这里插入图片描述
  2. 查询2023年时,学生的年龄(使用函数date_part('year',birthday)
    在这里插入图片描述

3.1.3 带 WHERE 子句的查询

  1. 比较表达式
    (1)成绩低于90分的学生的编号
    在这里插入图片描述
  2. BETWEEN表达式
    (1)出生年份在 1997~2005 之间的学生的编号和专业
    (2)出生年份不在 1997~2005 之间的学生的编号和专业
    在这里插入图片描述
  3. IN表达式
    (1)人工智能专业的学生的编号和姓名
    (1)不是人工智能或儿科专业的学生的编号和姓名
    在这里插入图片描述
  4. LIKE表达式
    (1)以 计 开头的课程名
    在这里插入图片描述
  5. NULL表达式
    (1)课程成绩为空的学生的编号和课程的编号
    在这里插入图片描述

3.1.4 排序和分组

  1. 将查询结果排序
    (1)查询每个学生001课程的成绩,并降序排列
    在这里插入图片描述
    (2)所有成绩降序排列
    在这里插入图片描述
  2. 聚集函数
    (1)查询001课程的元组个数,即选修001课程的人数
    在这里插入图片描述
    (2)成绩的最小,平均,最大值
    在这里插入图片描述
  3. 分组
    (1)查询每个学生的平均成绩,输出学号和平均成绩
    在这里插入图片描述
    (2)查询每个学生的平均成绩,输出平均成绩>90的学生学号和平均成绩
    在这里插入图片描述

3.1.5 连接查询

  1. 课程编号为001的课程名和成绩
    在这里插入图片描述
  2. 每个学生(编号,姓名)选修的每门课(课程名)的成绩
    在这里插入图片描述
  3. 查询每个学生的平均成绩,并输出平均成绩大于90的学生编号,姓名,平均成绩
    在这里插入图片描述
  4. 和卢一出生年份相同的其他学生的姓名
    在这里插入图片描述

3.1.6 嵌套查询

  1. IN 引出的子查询
    (1)查询和卢一相同dno的男同学的学生编号和姓名
    在这里插入图片描述

  2. 集合的比较引出的子查询
    (1)比dno为001的所有学生都小的其他专业的学生编号,姓名,专业,出生日期
    在这里插入图片描述
    (2)(课程)平均成绩最高的课程号和平均成绩
    在这里插入图片描述

  3. 存在量词引出的子查询
    (1)所有选修了001课程的学生编号和姓名
    在这里插入图片描述
    (2)查询选修了所有课程的学生
    在这里插入图片描述
    (3)至少选修了 学生1所选修的全部课程 的学生
    在这里插入图片描述

  4. 检查子查询结果中的重复元素

3.1.7 集合运算

(1)选修了 001或002课程 的学生
在这里插入图片描述
(2)选修了 001和002课程 的学生
在这里插入图片描述
(3)选修了001 未选修002课程 的学生
在这里插入图片描述

3.2 更新

3.2.1 插入

  1. 查询已有数据,避免插入冲突
    在这里插入图片描述
  2. 插入数据 并查询结果
    在这里插入图片描述

3.2.2 更新

  1. 更新学生7和1的入学年份
    在这里插入图片描述

3.2.3 删除

  1. 删除学生7的信息
    在这里插入图片描述

4 视图(实验四)

  1. 使用SQL语句创建视图。
  2. 对视图执行创建、查找、更新等操作,对比和基本表进行查找、更新操作有无不同之处。

4.1 定义视图

  1. 建立视图
    (1)建立dno为001的学生视图se_students,包含Students中dno为001的所有属性(除了Speciality)
    在这里插入图片描述
    (2)建立dno为001的视图se_sc,包含 Students中dno为001 的学生的 所有SC的属性
    在这里插入图片描述
    (3)建立学生成绩视图students_grades,包含学号、学生姓名、课程名和成绩。在这里插入图片描述

  2. 查看视图的具体信息
    (1)se_students视图
    在这里插入图片描述

4.2 基于视图查询

  1. 查询dno为001的男生(已经定义了dno为001的学生视图SE_Students,可以直接使用。
    在这里插入图片描述
  2. 查询学号为 1 的学生的各科成绩,要求显示学生姓名,课程名和成绩。(查询涉及三个表Students,SC和Courses。可以使用定义的学生成绩视图Students_Grades查询)
    在这里插入图片描述

4.3 基于视图更新

openGauss不支持视图更新

  1. ALTER viewname RENAME TO newname,更改视图名称se_students为ve_students
    在这里插入图片描述

4.4 删除视图

  1. 先查看所有视图
    在这里插入图片描述

  2. 删除视图se_sc,再次查看所有视图
    在这里插入图片描述

5 完整性控制(实验五)

  1. 练习创建下面约束:
      主键(PRIMARY KEY)约束;
      检查(CHECK)约束;
      外键(FOREIGN KEY)约束:外键约束是为了强制实现表之间的参照完整性。级联参照完整性约束就是为了保证外键数据的关联性。
      唯一性(UNIQUE)约束:将STUDENTS表中的SNAME列设为唯一键约束、COURSES表中的CNAME列设为唯一键约束;
  2. 创建触发器
     触发器是一种特殊类型的存储过程,通常用于实现强制业务规则和数据完整性。创建UPDATE触发器检查修改操作的业务规则,如:在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息。

5.1 创建表及主键约束、检查约束、外键约束

  1. 首先创建数据库及用户,并为用户赋予权限,之后创建表。详细过程如下:
    在这里插入图片描述
  2. 上图创建表的过程也添加了PRIMARY KEY约束、CHECK约束、FOREIGN KEY约束。详情通过\d+ 表名查看,如下图所示。
    在这里插入图片描述
    在这里插入图片描述

5.2 添加唯一性约束

将STUDENTS表中的SNAME列设为唯一键约束、COURSES表中的CNAME列设为唯一键约束;

  1. 使用ALTER TABLE students ADD UNIQUE(sname);ALTER TABLE courses ADD UNIQUE(cname);创建唯一性约束。
  2. studentscourses添加唯一性约束之后的变化如下图所示:
    在这里插入图片描述

5.3 创建触发器

一般语法如下:

CREATE [ CONSTRAINT ] TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
    ON table_name
    [ FROM referenced_table_name ]
    { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }
    [ FOR [ EACH ] { ROW | STATEMENT } ]
    [ WHEN ( condition ) ]
    EXECUTE PROCEDURE function_name ( arguments );
# event语句
    INSERT
    UPDATE [ OF column_name [, ... ] ]
    DELETE
    TRUNCATE

5.3.1 插入

在STUDENTS表上建立触发器,当插入数据时给出提示信息。

  1. 创建函数
CREATE OR REPLACE FUNCTION insert_stu() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
RAISE NOTICE'插入成功!';
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
  1. 创建触发器
CREATE TRIGGER insert_trigger
AFTER INSERT ON students
FOR EACH ROW
EXECUTE PROCEDURE insert_stu();
  1. 测试
    由于students存在外键departments(dno),因此需要先为departments插入数据,否则会报错:
    INSERT INTO departments(dno,dname,dheadno) VALUES ('CS','信息系','05001'), ('MA','数学系','06001'), ('PH','物理系','07001'), ('CH','化学系','08001');
    之后,向students中插入数据:
INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (1,'卢一','女','1993-01-01','2018','人工智能','CS');

具体过程如下:
在这里插入图片描述

5.3.2 更新

在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息。

  1. 创建函数
CREATE OR REPLACE FUNCTION update_stu() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
RAISE NOTICE'更新成功!';
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
  1. 创建触发器
CREATE TRIGGER update_trigger
AFTER UPDATE ON students
FOR EACH ROW
EXECUTE PROCEDURE update_stu();
  1. 测试
UPDATE students SET sno='01' WHERE sname='卢一';

具体过程如下:
在这里插入图片描述

5.4 其他

5.4.1 插入表数据

  1. departments表
    INSERT INTO departments(dno,dname,dheadno) VALUES ('CS','信息系','05001'),('MA','数学系','06001'),('PH','物理系','07001'),('CH','化学系','08001');

  2. students表
    INSERT INTO students(sno,sname,sex, birthday, enrollyear, speciality, dno) VALUES (01,'卢一','女','1993-01-01','2018','人工智能','CS'),(02,'卢二','女','1993-01-01','2018','人工智能','CS'),(03,'卢三','男','1993-01-02','2019','软件','CS'),(04,'卢四','女','1993-01-03','2020','高数','MA'),(05,'卢五','男','1993-01-04','2018','数理统计','MA'),(06,'卢六','女','1993-01-05','2019','概率论','MA'),(07,'卢七','男','1993-01-06','2020','光学','PH'),(08,'卢八','男','1993-01-04','2018','电学','PH'),(09,'卢九','女','1993-01-05','2023','热学','PH'),(10,'卢十','男','1993-01-04','2018','燃料','CH'),(11,'十一','女','1993-01-05','2023','分子学','CH'),(12,'十二','男','1993-01-11','2018','气体学','PH');

  3. courses表
    INSERT INTO courses(cno,cname,period, credit) VALUES ('CS01','人工智能','4','3'),('CS02','软件','5','6'),('MA01','高数','4','6'),('MA02','数理统计','4','4'),('MA03','概率论','4','5'),('PH01','光学','4','4'),('PH02','电学','3','5'),('PH03','热学','3','6'),('CH01','燃料','4','4'),('CH02','分子学','4','6'),('CH03','气体学','3','5');

  4. sc表
    INSERT INTO sc(sno, cno, grade) VALUES (1, 'CS01', 90),(2, 'CS01', 80),(3, 'CS02', 56),(4, 'MA01', 76),(5, 'MA02', 95),(6, 'MA03', 89),(7, 'PH01', 79),(8, 'PH02', 53),(9, 'PH03', 100),(10, 'CH01', 65),(11, 'CH02', 95),(12, 'CH03', 74);

5.4.2 修改表数据

UPDATE students SET sno=1 WHERE sname='卢一';,因为表sc的外键sno参照的是表students的主键,因此需要先删除SC的外键。
在这里插入图片描述

5.4.3 删除外键

通过ALTER TABLE sc DROP CONSTRAINT sc_sno_fkey;删除外键,详细过程如下:
在这里插入图片描述

5.4.4 添加外键

  1. 为表sc添加外键之前,应该先把表sc的sno=01改为sno=1。否则外键会添加失败,因此sc的外键sno 是 students的主键sno,值应该保持一致。
    在这里插入图片描述

  2. 输入ALTER TABLE sc ADD CONSTRAINT sc_sno_fkey FOREIGN KEY (sno) REFERENCES students(sno);重新创建外键sno。结果如下图所示:
    在这里插入图片描述

6 安全性控制(实验六)

  1. 创建一些数据库用户,并理解数据库用户和角色之间的关系。
  2. 利用查询分析器熟悉通过SQL对数据进行安全性控制(grant和revoke语句)。

6.1 数据库用户&角色

6.1.1 用户USER:

  • 通过CREATE USER创建的用户,默认具有LOGIN权限;
  • 创建用户的同时会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA;
  • 其他数据库中,则不自动创建同名的SCHEMA;可使用CREATE SCHEMA命令,分别在其他数据库中,为该用户创建同名SCHEMA。
  1. 创建用户lll,登录密码为‘openGauss@1234,创建完成后,查看用户列表
    在这里插入图片描述
  2. 授予用户lll创建角色权限CREATE ROLE
    在这里插入图片描述

6.1.2 角色ROLE:

  • 拥有数据库对象和权限的实体。在不同的环境中角色可以认为是一个用户,一个组或者兼顾两者。
  • 在数据库中添加一个新角色,角色无LOGIN权限。
  • 创建角色的用户必须具备CREATE ROLE的权限【ALTER USER 用户名 CREATEROLE;】或者是系统管理员。
  1. 创建一个角色,名为lllr,密码为openGauss@1234,创建完后查看角色列表。
    在这里插入图片描述
  2. 修改角色lllr为系统管理员,再次查看角色列表
    在这里插入图片描述

6.2 GRANT&REVOKE

6.2.1 将系统权限SYSADMIN授权给USER/ROLE

  1. 将系统权限SYSADMIN授权给用户lll,授权后查看角色列表
    在这里插入图片描述

6.2.2 将数据库对象授权给USER/ROLE

  1. 创建模式llls,并在模式llls下创建表students
    在这里插入图片描述

  2. 将模式llls的使用权限和表llls.students的所有权限授权给用户lll
    在这里插入图片描述

  3. 将表llls.students中列sno,sname,sex,dno的查询权限,sno的更新权限授权给lll
    在这里插入图片描述

  4. 将数据库postgres的连接权限授权给用户lll,并授予用户lllpostgres中创建schema的权限,而且允许用户lll将此权限授权给其他用户(WITH GRANT OPTION
    在这里插入图片描述

  5. 将模式llls的访问权限授权给角色lllr,并授予角色lllrllls下创建对象的权限,不允许角色lllr中的用户将权限授权给其他人。
    在这里插入图片描述

6.2.3 将USER/ROLE的权限授权给其他USER/ROLE

  1. 将用户lll的权限授权给角色lllr,并允许角色lllr将权限授权给其他人
    在这里插入图片描述

  2. 创建用户hhh,将角色lllr的权限授权给用户hhh
    在这里插入图片描述

6.2.4 回收权限并清理用户

  1. 回收角色lllr,用户lll,用户hhh,模式llls的权限
    在这里插入图片描述

  2. 删除角色lllr,删除用户lll,删除用户hhh,删除模式llls
    在这里插入图片描述
    删除完成后查看模式和角色:
    在这里插入图片描述


后续实验参考CSDNBkbK-

7 事务并发与控制(实验七)

  1. 编写事务实例,分别使其成功提交和回滚,观察该事务对数据库的影响。
  2. 利用数据库管理系统提供的封锁机制解决并发操作带来的数据不一致情况。

7.1 事务

7.1.1 事务的ACID特性

  • 原子性(Atomicity):原子事务是一系列不可分割的数据库操作。在事务完成之后,这些操作要么全部发生,要么全部不发生。
  • 一致性(Consistency):事务结束后,数据库处于一致状态,保留数据完整性。
  • 隔离性(Isolation):事务之间不能相互干扰。
  • 持久性(Durability):即使发生崩溃和失败,成功完成(提交)的事务效果持久保存。

7.1.2 事务管理

openGauss数据库支持的事务管理命令有启动、设置、提交、回滚事务。

  • 启动事务(START TRANSACTION | BEGIN)
START TRANSACTION
 [ 	{<!-- -->ISOLATION LEVEL 
	{<!-- -->READ COMMITTED | READ UNCOMMITTED  | SERIALIZABLE | REPEATABLE READ} | 
 	{<!-- -->READ WRITE | READ ONLY}} 
	[, ...] ];
  • 设置事务(SET TRANSACTION)
{ SET [ LOCAL ] TRANSACTION | SET SESSION CHARACTERISTICS AS TRANSACTION }
{ ISOLATION LEVEL 
{<!-- -->READ COMMITTED | READ UNCOMMITTED  | SERIALIZABLE | REPEATABLE READ} | 
{<!-- -->READ WRITE | READ ONLY}} 
[, ...];
  • 提交事务
{ COMMIT | END } [ WORK | TRANSACTION ];
  • 回滚事务
ROLLBACK [ WORK | TRANSACTION ];

7.1.3 事务实例

1.未提交的事务

  • 启动事务
START TRANSACTION;
在这里插入图片描述
  • 插入数据
INSERT INTO Students 
VALUES ('201905001', 'BK','男', '2000-01-01','2019',' 计算机','CS');
在这里插入图片描述
SELECT * FROM Students;
在这里插入图片描述
  • 回滚事务
ROLLBACK;
在这里插入图片描述
SELECT * FROM Students;
在这里插入图片描述

2.已提交的事务

  • 启动事务
START TRANSACTION;
在这里插入图片描述
  • 插入数据
INSERT INTO Students 
VALUES ('201905001', 'BK','男', '2000-01-01','2019',' 计算机','CS');
在这里插入图片描述
  • 提交事务
COMMIT TRANSACTION;
在这里插入图片描述
SELECT * FROM Students;

在这里插入图片描述

7.2 并发控制

7.2.1 加锁语法

LOCK [ TABLE ] {<!-- -->[ ONLY ] name [, ...]| {name [ * ]} [, ...]}
    [ IN {ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE} MODE ]
    [ NOWAIT ];

7.2.2 加锁实例

  • 创建测试表
CREATE TABLE TestLock(test CHAR(5));
在这里插入图片描述
  • 开启事务
START TRANSACTION;
在这里插入图片描述
  • 加锁
LOCK TestLock;
在这里插入图片描述
  • 查看所有锁
SELECT  * FROM pg_locks ;
在这里插入图片描述
  • 提交事务
COMMIT TRANSACTION;
在这里插入图片描述
  • 再次查看所有锁
SELECT  * FROM pg_locks ;
在这里插入图片描述

8 数据库备份与恢复(实验八)

1.针对具体故障制定备份方案,并利用这些备份方案恢复数据库。
2. 使用openGauss提供的各种备份方法进行数据库备份。
3. 使用具体的数据库管理系统提供的恢复机制,利用副本进行数据库的恢复。

8.1 物理备份和恢复

8.1.1 实验准备

  1. 切换到omm用户,以操作系统用户omm登录数据库主节点
su - omm
在这里插入图片描述
  1. 创建存储备份文件的文件夹
mkdir -p /home/omm/physical/backup
在这里插入图片描述

8.1.2 物理备份

  1. 如果数据库服务没有启动,就启动数据库服务(务必以操作系统用户omm启动数据库服务,如果没有请切换用户)。
gs_om -t start 
在这里插入图片描述
  1. 将数据库进行物理备份
gs_basebackup -D /home/omm/physical/backup -p 26000
在这里插入图片描述
  1. 切换到存储备份文件夹查看备份文件
cd /home/omm/physical/backup
ls
在这里插入图片描述

8.1.3 物理备份恢复

  1. 停止openGauss((务必以操作系统用户omm停止数据库服务,如果没有请切换用户)。
gs_om -t stop
在这里插入图片描述
  1. 清理原库中的所有或部分文件,对数据库文件进行破坏。
cd /gaussdb/data/
cd db1
rm -rf *
在这里插入图片描述
  1. 使用数据库系统用户权限从备份中还原需要的数据库文件,/gaussdb/data/db1中db1是数据库节点文件夹名称,不同数据库可能不同请查看确认。
cp -r /home/omm/physical/backup/.  /gaussdb/data/db1
  1. 备份时间大概需要几分钟,恢复后文件列表如下:
cd /gaussdb/data/db1
ls
在这里插入图片描述
  1. 重启数据库服务器, 并检查数据库内容,确保数据库已经恢复到所需的状态
gs_om -t start
在这里插入图片描述

8.2 逻辑备份和恢复

8.2.1 实验准备:

  • 切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm      
在这里插入图片描述
  • 创建存储备份文件的文件夹
mkdir -p /home/omm/logical/backup
在这里插入图片描述

8.2.2 gs_dump备份

1. gs_dump备份示例1

  • 执行gs_dump,导出的MPPDB_backup.sql文件格式为纯文本格式
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/MPPDB_backup.sql -p 26000 postgres -F p
在这里插入图片描述
  • 切换到backup文件夹,查看MPPDB_backup.sql文件
ll /home/omm/logical/backup/
在这里插入图片描述
cat /home/omm/logical/backup/MPPDB_backup.sql

在这里插入图片描述 显示如下内容:

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET xmloption = content;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

--
-- Name: postgres; Type: COMMENT; Schema: -; Owner: omm
--

COMMENT ON DATABASE postgres IS 'default administrative connection database';


--
-- Name: tpcds; Type: SCHEMA; Schema: -; Owner: omm
--

CREATE SCHEMA tpcds;


ALTER SCHEMA tpcds OWNER TO omm;

SET search_path = tpcds;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: reason; Type: TABLE; Schema: tpcds; Owner: omm; Tablespace: 
--

CREATE TABLE reason (
    r_reason_sk integer NOT NULL,
    r_reason_id character(16) NOT NULL,
    r_reason_desc character varying(20)
)
WITH (orientation=row, compression=no);


ALTER TABLE tpcds.reason OWNER TO omm;

--
-- Data for Name: reason; Type: TABLE DATA; Schema: tpcds; Owner: omm
--

COPY reason (r_reason_sk, r_reason_id, r_reason_desc) FROM stdin;
\.
;

--
-- Name: public; Type: ACL; Schema: -; Owner: omm
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM omm;
GRANT CREATE,USAGE ON SCHEMA public TO omm;
GRANT USAGE ON SCHEMA public TO PUBLIC;


--
-- Name: tpcds; Type: ACL; Schema: -; Owner: omm
--

REVOKE ALL ON SCHEMA tpcds FROM PUBLIC;
REVOKE ALL ON SCHEMA tpcds FROM omm;
GRANT CREATE,USAGE ON SCHEMA tpcds TO omm;


--
-- Name: reason; Type: ACL; Schema: tpcds; Owner: omm
--

REVOKE ALL ON TABLE reason FROM PUBLIC;
REVOKE ALL ON TABLE reason FROM omm;
GRANT SELECT,INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,UPDATE ON TABLE reason TO omm;


--
-- PostgreSQL database dump complete
--

2. gs_dump备份示例2

  • 执行gs_dump,导出的MPPDB_backup.tar文件格式为tar格式
gs_dump -U omm -W Bigdata@123 -f  /home/omm/logical/backup/MPPDB_backup.tar -p 26000 postgres -F t	

在这里插入图片描述
  • 查看生成的文件信息
ll /home/omm/logical/backup/

在这里插入图片描述

3. gs_dump备份示例3

  • 执行gs_dump,导出的MPPDB_backup.dmp文件格式为自定义归档格式
gs_dump -U omm -W Bigdata@123 -f  /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 postgres -F c
在这里插入图片描述
  • 查看生成的文件信息
ll /home/omm/logical/backup/
在这里插入图片描述

4. gs_dump备份示例4

  • 执行gs_dump,导出的MPPDB_backup文件格式为目录格式
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/MPPDB_backup -p 26000  postgres -F d
在这里插入图片描述
  • 查看生成的文件信息
ll /home/omm/logical/backup/
在这里插入图片描述

5.gs_dump备份示例5

执行gs_dump,导出postgres数据库的表(或视图、或序列、或外表)对象,例如表customer_t1

  • 执行gs_dump,导出的表customer_t1
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/bkp_shl2.sql -t public.customer_t1 -p 26000 postgres
在这里插入图片描述
  • 查看生成的文件信息
ll /home/omm/logical/backup/
在这里插入图片描述
  • 查看生成的sql文件
cat /home/omm/logical/backup/bkp_shl2.sql 

bkp_shl2.sql 为空文件

8.2.3 gs_dumpall备份

  • 使用gs_dumpall一次导出openGauss的所有数据库
gs_dumpall -f  /home/omm/logical/backup/bkp2.sql -p 26000
在这里插入图片描述
  • 查看生成的文件信息
ll /home/omm/logical/backup/
在这里插入图片描述

8.2.4 gs_restore导入

1. gs_restore导入示例1

  • 执行gs_restore,将导出的MPPDB_backup.tar文件(tar格式)导入到db_tpcc01数据库
gs_restore /home/omm/logical/backup/MPPDB_backup.tar -p 26000 -d db_tpcc01

2.gs_restore导入示例2

  • 执行gs_restore,将导出的MPPDB_backup.dmp文件(自定义归档格式)导入到db_tpcc02数据库
gs_restore /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 -d db_tpcc02

3.gs_restore导入示例3

  • 执行gs_restore,将导出的MPPDB_backup文件(目录格式)导入到db_tpcc03数据库
gs_restore /home/omm/logical/backup/MPPDB_backup -p 26000 -d db_tpcc03

4.gs_restore导入示例4

执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。只导入PUBLIC模式下表customer_t1的定义。

  • 执行gs_restore,只导入PUBLIC模式下表customer_t1的定义
gs_restore  /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 -d db_tpcc04 -n public -t customer_t1

9 使用JDBC连接数据库(实验九)

  1. 在openGauss中创建数据库、表;
  2. 使用jdbc连接到新创建的数据库;
  3. 在java程序中改变数据库中的值或者输出数据库中的值;
  4. 请参考华为提供的实验手册:openGauss场景化综合应用实验。

9.1 准备连接环境

9.1.1 修改数据库的pg_hba.conf文件

  • 在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件:&lt;PARAM name="dataNode1" value="/gaussdb/data/db1"/&gt;
cd /gaussdb/data/db1
vi pg_hba.conf
  • 输入“:90”找到对应位置,然后输入“i”切换到INSERT模式,将以下内容添加进pg_hba.conf文件,添加后按下“ECS”键,退出INSERT模式,输入“:wq”后回车保存。
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all    all    192.168.0.19/32    trust
host all all 0.0.0.0/0 sha256
# IPv6 local connections:
host    all             all             ::1/128                 trust
  • 使用omm用户登陆,使用gs_ctl将策略生效
su - omm
gs_ctl reload -D /gaussdb/data/db1/

9.1.2 登陆数据库授权退出

  • 使用omm用户登陆数据库给dbuser用户授权,并退出数据库
gsql -d postgres -p 26000 -r
alter role dbuser createrole createdb;
\q

9.1.3 修改数据库监听地址

  • 在GS_HOME中,本实验中数据库GS_HOME设置的为/gaussdb/data/db1
cd /gaussdb/data/db1
vi postgresql.conf
  • 输入“:60”找到对应位置,然后输入“i”切换到INSERT模式,将listen_addresses的值修改成为*,修改后按下“ECS”键,退出INSERT模式,输入“:wq”后回车保存。
#listen_addresses = '192.168.0.19'              # what IP address(es) to listen on;
listen_addresses = '*'
  • 修改完成后重启数据库生效(-D后面的数据库默认路径,需要根据实际情况进行修改)
gs_ctl restart -D /gaussdb/data/db1/

9.1.4 下载Java驱动包导入工具

  • 下载Java连接openGauss的驱动包,并将其导入对应的使用工具

  • 通过以下链接,下载驱动包

  • 假设文件存放在d:\Download目录下,并进行解压,解压后文件为“postgresql.jar”。

9.1.5 创建测试数据库demo

  • 使用gsql工具登陆数据库,并输入dbuser密码(如:Gauss#3demo)
gsql -d postgres -p 26000 -U dbuser -r
  • 创建数据库demo
create database demo ENCODING 'UTF8' template = template0;
  • 切换到demo数据库,并输入dbuser密码(如:Gauss#3demo)。
\connect demo;

9.1.6 创建schema

  • 创建名为demo的schema,并设置demo为当前的schema。
CREATE SCHEMA demo;
  • 将默认搜索路径设为demo。
SET search_path TO demo;

9.1.7 创建测试表websites

CREATE TABLE websites (
  id int NOT NULL,
  name char(20) NOT NULL DEFAULT '',
  url varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (id)
);
COMMENT ON COLUMN websites.name IS '站点名称';

9.1.8 插入数据

INSERT INTO websites VALUES 
('1', 'openGauss', 'https://opengauss.org/zh/'), 
('2', '华为云', 'https://www.huaweicloud.com/'), 
('3', 'openEuler', 'https://openeuler.org/zh/'), 
('4', '华为support中心', 'https://support.huaweicloud.com/');

9.1.9 退出数据库

\q

9.2 确定26000端口是否放开

  • 打开华为云首页,登录后进入“控制台”,点击“弹性云服务器ECS”进入ECS列表
    在这里插入图片描述
    在这里插入图片描述

  • 在云服务器控制台找到安装数据库主机的ECS,点击查看基本信息,找到安全组
    在这里插入图片描述
    在这里插入图片描述

  • 点击进入安全组,选择“入方向规则”并“添加规则”,进行26000端口设置 在这里插入图片描述
    在这里插入图片描述

  • 确定后,可以看到入网规则多了“TCP:26000”,如下图:
    在这里插入图片描述

9.3 下载并安装JDK

  • 下载JDK
    在这里插入图片描述

  • 点击jdk-8u261-windows-x64.exe进行安装 默认设置即可,出现安装进度
    在这里插入图片描述

  • 如下显示表示安装成功: 在这里插入图片描述

  • 查看安装目录
    在这里插入图片描述

9.4 配置JDK环境变量

  • 右击“此电脑”选择“属性”,点击“高级系统设置”
    在这里插入图片描述
    在这里插入图片描述

  • 点击“环境变量”,新建系统变量“JAVA_HOME”,输入JDK安装目录
    在这里插入图片描述
    在这里插入图片描述
    C:\Program Files\Java\jdk1.8.0_261为JDK安装目录

  • 编辑系统变量“path”
    在这里插入图片描述
    在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)。

  • 新建系统变量“CLASSPATH”变量,输入“.” 即可
    在这里插入图片描述

  • 系统变量配置完毕,查询检验是否配置成功,运行 cmd 输入java -version(java和 -version之间有空格)。 显示版本信息,则说明安装和配置成功

9.5 连接openGauss并执行java代码

9.5.1 使用Java程序连接数据库并进行查询

步骤 1使用Java程序连接数据库并进行查询(注:请用户根据实际情况替换红字内容,修改jdbc:postgresql://弹性公网IP:26000/demo中弹性公网IP信息,USER = "dbuser"连接数据库的用户及密码PASS = “Gauss#3demo”)。

在d:\Download\中创建openGaussDemo.java文件,文件内容如下,注意红字部分要按照实际情况进行替换:

import java.sql.*; 
public class openGaussDemo {<!-- -->
 
    static final String JDBC_DRIVER = "org.postgresql.Driver";  
    static final String DB_URL = "jdbc:postgresql://弹性公网IP:26000/demo?ApplicationName=app1";
      // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "dbuser";
    static final String PASS = "Gauss#3demo";
         public static void main(String[] args) {<!-- -->
        Connection conn = null;
        Statement stmt = null;
        try{<!-- -->
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);
        
            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
        
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM demo.websites";
            ResultSet rs = stmt.executeQuery(sql);
        
            // 展开结果集数据库
            while(rs.next()){<!-- -->
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");
    
                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 站点名称: " + name);
                System.out.print(", 站点 URL: " + url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){<!-- -->
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){<!-- -->
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{<!-- -->
            // 关闭资源
            try{<!-- -->
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){<!-- -->
                        }// 什么都不做
            try{<!-- -->
                if(conn!=null) conn.close();
            }catch(SQLException se){<!-- -->
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

9.5.2 编译后执行

在安装Java的本机,打开cmd对Java程序编译后执行 在cmd中,进入d:\Download\目录,先对Java程序进行编译(进入Java程序的目录)

javac -encoding utf-8 -cp d:\Download\postgresql.jar openGaussDemo.java

java -cp .;D:/Download/postgresql.jar openGaussDemo

9.5.3 执行结果

连接数据库...
 实例化Statement对象...
ID: 1, 站点名称: openGauss, 站点 URL: https://opengauss.org/zh/
ID: 2, 站点名称: 华为云, 站点 URL: https://www.huaweicloud.com/
ID: 3, 站点名称: openEuler, 站点 URL: https://openeuler.org/zh/
ID: 4, 站点名称: 华为support中心, 站点 URL: https://support.huaweicloud.com/
Goodbye!

A 其他操作

● 查看帮助信息:postgres=# \?
● 切换数据库:postgres=# \c dbname
● 列举数据库:postgres=# \l
● 退出数据库:postgres=# \q
● 通过系统表pg_database查询数据库列表:postgres=# SELECT datname FROM pg_database;
● 列举所有表、视图和索引:postgres=# \d+
● 列举表:postgres=# \dt
● 查询表的属性:postgres=# \d+ tablename
● 查看表结构:postgres=# \d tablename
● 查询表空间:postgres=# \db
● 检查pg_tablespace系统表,即系统和用户定义的全部表空间:postgres=# SELECT spcname FROM pg_tablespace;
● 列举SCHEMA:postgres=# \dn
● 列举索引:postgres=# \di
● 查看数据库用户列表:postgres=# SELECT * FROM pg_user;
● 查看用户属性:postgres=# SELECT * FROM pg_authid;
● 查看所有角色:postgres=# SELECT * FROM PG_ROLES;
● 切换用户:postgres=# \c – username

● 查看openGauss支持的所有SQL语句:postgres=#\h

参考链接

B. oracle、mysql、sql server、Navicat

  1. 从数据库类型来看
    oracle、mysql 和 sql server都是关系型数据库。
    Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。

  2. 从应用场景来看
    MySQL,SQL Server可以理解为中小型数据库,Oracle则是大型数据库。(相对而言吧)
    MySQL:基本上能支持所有的主流操作系统Windows,Linux,Unix
    SQL Server:微软的亲儿子,我肯定得主要是支持Windows,不过现在也已经支持Linux了
    Oracle:虽然windows 和 Linux都支持,不过从性能上看在Linux上使用更优。
    Navicat:是一个强大的MySQL数据库管理和开发工具,Navicat for MySQL经常搭配使用。
    由于其可视化的界面以及众多管理工具,大大提升了数据库的开发以及运维的效率。

  3. 从费用来看
    mysql是开源,其他全收费。
    由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
    Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。
    由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。真香组合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jmeter如何测试一个post请求(发送json请求报文)

目录 1.配置测试计划1.1.创建POST的HTTP请求取样器&#xff08;模拟POST请求&#xff09;1.2.创建HTTP信息头管理器 2.执行压测并查看结果 jmeter如何测试一个发送json报文的post请求. 更详细的配置请参考另外一篇博文&#xff1a; jmeter如何测试一个get请求 1.配置测试计划 …

独立站运营必做的6项工作内容

独立站的运营工作内容比较繁琐和全面&#xff0c;主要包括以下几个方面&#xff1a; 一、网站策划和设计 定义网站目标和定位制定网站规划和设计方案确定网站主题、颜色和页面布局确定网站的核心功能和用户体验设计网站的Logo和其他品牌元素 二、网站建设和维护 选择网站主…

React基础入门【一】

官方文档&#xff1a;https://react.docschina.org/ 说明 本文总结自尚硅谷课程。学习本教程之前&#xff0c;最好具备vue的基础知识&#xff0c;明白虚拟DOM、jsx这些前置知识。接下来&#xff0c;我们通过一个简单的示例来展示react的使用。 注意&#xff1a;入门的学习不…

【Atlas 200】华为昇腾Atlas 200加速模块RC场景无法启动卡在Start to jump Linux kernel

问题现象 RC场景下&#xff0c;装有华为昇腾Atlas 200加速模块的开发板无法启动系统。 将制作好系统的SD卡插入开发板&#xff0c;0号串口输出的日志卡在Start to jump Linux kernel&#xff0c;之后没有更多输出。 可能原因 一种比较大的可能是——在制作系统时&#xff0c…

Mac终端代理

1.打开代理查看代理端口号 打开设置&#xff0c;点击网络&#xff0c;点击详细信息&#xff0c;点击代理查看代理端口号。 2.修改环境变量 1&#xff09;终端输入下面命令 vim .zshrc 2&#xff09;在.zshrc文件里添加下面两段内容&#xff08;注意&#xff1a;7980为端口号…

力扣206反转链表:代码实现+图文全解+方法总结(四种方法)

文章目录 第一部分&#xff1a;题目描述第二部分&#xff1a;题解2.1 方法一&#xff1a;生成新节点到新链表2.2 方法二&#xff1a;复用旧节点到新链表&#x1f340; 面向过程式思想方法&#x1f340; 面向对象式思想方法 2.3 方法三&#xff1a;递归2.4 旧链表中移动旧节点 第…

02:MYSQL---DML

目录 1:介绍 2:DML数据操作 1:介绍 DML英文全称是Data Manipulation Lanquage(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增删改操作。 添加数据 :insert 修改数据:update 删除数据:delete 2:DML数据操作 给指定字段添加数据 insert into 表名(字段名1,…

segment-anything本地部署使用

前言 Segment Anything Model&#xff08;SAM&#xff09;是一种先进的图像分割模型&#xff0c;它基于Facebook AI在2020年发布的Foundation Model3&#xff0c;能够根据简单的输入提示&#xff08;如点或框&#xff09;准确地分割图像中的任何对象&#xff0c;并且无需额外训…

将项目导入到github全过程

新建仓库 完善仓库信息 然后点击创建仓库 复制仓库地址 将文件上传到git上 我这里要上传IMProject文件夹&#xff0c;所以就在这个文件夹内部&#xff0c;右键鼠标&#xff0c;然后点击git bash here 输入git init &#xff0c;然后文件夹里面就会多一个.git文件 输入gi…

【IoT】ChatGPT 与 AI 硬件

随着AI的发展&#xff0c;比如最近炒得很火的ChatGPT&#xff0c;还在持续快速迭代更新。 当然了&#xff0c;对于软件和算法&#xff0c;如果你想&#xff0c;每天迭代 10 个版本都可以。 包括科大讯飞的星火认知大模型最近也刚发布。 这就引出了未来一个更大的发展方向&am…

PMP课堂模拟题目及解析(第7期)

61. 为限制项目变更的数量&#xff0c;项目经理制定了严格的变更管理计划&#xff0c;只允许批准减轻重大潜在或实际风险的变更&#xff0c;一位团队成员提出了一个范围变更&#xff0c;该变更将消除对一个落后于进度计划的外部项目的依赖关系。项目经理应该怎么做&#xff1f…

AI绘图实战(九):给热门歌曲做配图 | Stable Diffusion成为设计师生产力工具

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装及其问题解决参考&#xff1a;《Windows安装Stable Diffusion …

迎接新时代挑战:项目管理中的创新与发展

你想知道如何在你的 PM 角色中保持最新状态吗&#xff1f; 您所在的行业是否发展如此之快&#xff0c;以至于有一天您可能不再需要您&#xff1f; 随着人工智能、敏捷和授权团队的兴起&#xff0c;项目经理还需要吗&#xff1f;也许吧&#xff0c;但不是出于您可能期望的原因。…

@vant/weapp

文章目录 一、介绍二、安装1. cd 到项目文件目录2. 使用 npm 安装3. 修改项目配置4. 构建5. 其他文件 三、使用四、【参考】 微信小程序使用vant/weapp组件 一、介绍 Vant 是一个开源的移动端组件库&#xff0c;在微信小程序开发中可以使用该UI库提提供的组件。 使用这个三方…

用户分享 | Dockquery,一个国产数据库客户端的初体验

DockQuery 有话说 DockQuery &#xff0c;「天狼」也&#xff0c;中原本土狼种。天狼年纪很小&#xff0c;不满一岁&#xff0c;但它有一个伟大的梦想——建造一座能容纳中原群狼的宫殿&#xff01;它不想再被异域狼欺负&#xff0c;不想被异域狼群挤占生存空间&#xff0c;它…

点到直线距离估计线性回归参数

点到直线距离估计线性回归参数 文章目录 点到直线距离估计线性回归参数[toc]1 推导2 模拟 1 推导 普通最小二乘法(OLS)估计线性回归方程的参数要求残差平方和最小&#xff0c;通过优化方法计算出各参数的估计量。其中残差 e i y i − β 0 − β 1 x i e_iy_i-\beta_0-\beta…

docker安装Nexus3搭建docker私有仓库,并上传镜像

参考&#xff1a;https://blog.csdn.net/gengkui9897/article/details/127353727 nexus3支持的私有库 支持maven(java)、npm&#xff08;js&#xff09;、docker、herm、yum、apt、pypi(python)go、等等 1. 下载安装docker&#xff08;略&#xff09; 根据系统选择对应版本…

T-SQL游标的使用

一.建表 INSERT INTO cloud VALUES( 你 ) INSERT INTO cloud VALUES( 一会看我 ) INSERT INTO cloud VALUES( 一会看云 ) INSERT INTO cloud VALUES( 我觉得 ) INSERT INTO cloud VALUES( 你看我时很远 ) INSERT INTO cloud VALUES( 你看云时很近 ) 二.建立游标 1.游标的一般格…

微软Office Plus吊打WPS Office?不一定,WPS未来被它“拿捏”了

微软Office Plus吊打WPS Office&#xff1f; 微软的Office是一款非常强大的软件。不仅仅在办公领域中能给我们带来便利&#xff0c;在娱乐和生活的各个方面的管理也能带来很多便利。 当然&#xff0c;作为国产办公软件的排头兵WPS与微软Office的抗衡已经有长达30多年&#xf…

数据库sql语句(经典)

例题&#xff1a; 先来讲讲not in 和not exists的区别&#xff0c;再开始今天的例题&#xff08;和in&#xff0c;exists相反&#xff09; not in内外表做笛卡尔积&#xff0c;然后按照条件查询&#xff0c;没有用到索引 not exists是对外表进行循环&#xff0c;每次循环再对内…