【虚谷数据库学习培训考试知识笔试题总结】

虚谷培训知识笔试总结

1、虚谷数据库产品简介

虚谷数据库—关系型数据库、中心化的分布式数据库

1.1 角色划分

主控管理角色:集群管理,心跳检测,全局锁仲裁,不参与用户请求响应

存储服务角色:读写服务,数据裁剪,数据加解密

工作(计算)角色:请求响应,sql解析,sql规划,sql执行

变更收集角色:集中存储,订阅管理,反向解析(bin2SQL)

1.2 存储特性

存储版本数:最多支持3个数据存储版本

主副版本分布规则:主版本轮转分布,副本随机分布

版本安全线:集群中数据存储版本保存2个及以上为安全

技术架构:分布式存储+多副本容错+存储散列分布

1.3 虚谷数据库用户

SYSDBA: 数据库管理员

系统库的系统管理员用户。拥有被系统赋予的默认权限。管理权限:
管理各种数据库对象,如用户、角色、表、视图、存储过程等的创建、修改、删除。
为创建的用户授予/回收各种权限(除了审计和安全之外的权限)。
更改数据库参数,设置数据库资源限额。
管理数据库的备份、恢复。
管理数据库集群。

SYSAUDITOR:审计管理员

开启和关闭审计功能。
对指定的主体或客体启用/禁用指定类型的审计。
查询和管理审计结果。
管理审计相关权限,授予其他用户/从其他用户收回权限。

SYSSSO:安全管理员

创建加密机。
对主体或客体定义/应用/删除安全策略。
黑白名单规则制定。
管理安全相关权限,授予其他用户/从其他用户收回权限。

GUEST:普通用户

1.4、虚谷数据库文件路径

BIN目录

xugu[version]_[platform]_[arch]     -- 服务端程序
xugu_init.sql                 --数据库系统包
xugu_start.sh                 --linux 数据库启动脚本
xugu_start.bat         		  -- windows 数据库启动脚本
xgconsole_[platform]_[arch]   -- sql 命令行工具

.SETUP目录

cluster.ini、datafile.ini、mount.ini、trust.ini、types.ini、xugu.ini。

cluster.ini:  --虚谷数据库集群节点配置文件。
datafile.ini: --虚谷数据库数据文件、临时文件映射文件。
mount.ini:	  --虚谷数据库系统文件目录配置文件。
trust.ini:    --保留性系统文件。
types.ini:    --虚谷数据库数据类型映射文件。
xugu.ini:     --虚谷数据库运行参数配置文件。

mount.ini默认配置文件路径

数据库结构目录    系统映射路径    	说明
/XGLOG		   	./XGLOG 			存储系统相关日志信息,包括错误日志、事件日志等
/CATA 			./XHOME/CATA 	存储系统结构性控制文件
/REDO 			./XHOME/REDO 	存储数据库重做日志文件
/UNDO			./XHOME/UNDO 	存储数据库回滚日志文件
/MODI			./XHOME/XMODI 	存储数据库变更数据文件
/DATA 			./XHOME/DATA 	存储数据库数据文件
/TEMP 			./XHOME/TEMP 	存储数据库临时表空间文件
/BACKUP 		./XHOME/BACKUP 	存储数据库备份文件
/ARCH 			./XHOME/ARCH 	存储数据库归档日志文件

数据库文件默认存放于安装目录的 XGLOG 和 XHOME 下。

1.5 常用系统表

全局存储系统表(SYS_GSTORES):

用于管理虚谷数据库拥有存储资源对象全局存储信息,包含存储的状态,分布,密钥等。全局存储通过链式管理,单向链支持快速定位首尾存储好。全局存储拥有1-3个版本局部存储。

局部存储系统表(SYS_STORES):

用于管理虚谷数据库存储资源对象局部存储信息,包括存储块大小,镜像分布,所在表空间等。局部存储可通过全局存储定位到,通过局部存储可查看局部存储块的详细记录信息,如存储内有效数据行数,存储被删除行数等。局部存储拥有3个版本局部存储镜像。

2、二级分区、分区知识(好多分)

虚谷数据库中,表分为堆表和分区表,分区表是指在创建表时,按照一定的划

分条件,将表切分成若干个子表,在逻辑上,分区表与堆表具有相同的特性,插入、

更改、删除、选择等操作的命令与堆表的操作命令完全一致

虚谷数据库提供了两级三种分区方式,一级分区支持:列表分区、范围分区和哈

希分区,二级分区支持:列表分区、范围分区和哈希分区。若一级分区为哈希分区,

则无法创建二级分区。

2.1 一级分区

列表分区

列表分区是指在分区时将分区键的各种取值罗列出来,指定每个取值或几个取 值对应一个分区,各个分区中的记录有一个共性,那就是其分区键字段的取值都是 分区的条件值或是条件值之一,列表分区主要针对分区键的取值为有限的离散值的 情况

CREATE TABLE test_part1(id INT,name VARCHAR(20),city CHAR(20)) PARTITION BY LIST(city) PARTITIONS (('四 川'),('云 南'),('贵 州'),(OTHERVALUES)) ;

该示例表示创建一个带列表分区的分区表,分区键为 city,根据分区键值划分 4 个分区,当分区键值为“四川”、“云南”、“贵州”时数据分别存储在划定分区中,若 为其他值则存储在 OTHERVALUES 分区。

若分区表设定了异常分区,则无法再增加分区,且无法删除异常分区。

范围分区

若分区键字段的取值是连续的,则不适合使用列表分区,此种情况的最佳分区 模式是范围分区,即按条件将键的取值划分成若干个范围,每个范围对应一个分区, 在向表插入记录前,先测试记录满足哪个分区的条件,再将记录插入至相应的分区 中

CREATE TABLE test_part2(id INTEGER IDENTITY(1,2),name VARCHAR,city VARCHAR) PARTITION BY RANGE(id) PARTITIONS (part1 VALUES LESS THAN (1), part2 VALUES LESS THAN (1000), part3 VALUES LESS THAN (1500), part4 VALUES LESS THAN (2000), part5 VALUES LESS THAN (MAXVALUES));

--创建一个以 id 作为分区键的范围分区表,按照规则系统将 id 小于 1 的数据划分 part1,将大于等于 1 小于 1000 的数据划分在 part2,依次类推,最后大于等于 2000数据将划分在 MAXVALUES 异常分区内。

范围分区为连续分区,分区段之间为“前闭后开”的划分模式,现系统 暂不支持分区融合与分裂操作;若分区表设定了异常分区,则无法再增 加分区。

哈希分区

HASH 分区主要用来确保数据在预先确定数目的分区中平均分布。在 RANGE 和 LIST 分区中,必须明确指定个给定的列值或列值集合应该保存在哪个分区中; 而在 HASH 分区中,数据库系统自动完成这些工作,用户要做的是指定被哈希的列 值,以及分区数量。

CREATE TABLE test_part3 (t_no INTEGER,t_name VARCHAR,t_address VARCHAR) PARTITION BY HASH(t_no) PARTITIONS 5;

-- 本例创建 5 个哈希分区的分区表,分区名由系统默认。

哈希分区表无异常分区,且不可增加分区或删除分区。

2.2 二级分区

二级分区是对一级分区的再次分割,虚谷数据库系统中定义二级分区即默认所有一级分区按照指定二级分区进分割,不能针对一级分区进行不同的二级分区划分

哈希分区

CREATE TABLE test_sub1( id INT IDENTITY(1,1) NOT NULL ,name CHAR(8) NOT NULL ,sex VARCHAR(5) NOT NULL ,birthday DATETIME NOT NULL,address VARCHAR NOT NULL ) PARTITION BY LIST(address) PARTITIONS (('中 国'),(OTHERVALUES)) SUBPARTITION BY HASH(sex) SUBPARTITIONS 2;

--该示例表示创建一个以 address 为一级分区键的列表分区,并以 sex 键进行二级分区,二级分区数为 2。

列表分区

CREATE TABLE test_sub2(id INT,name VARCHAR,city VARCHAR,addr VARCHAR) PARTITION BY LIST(city) PARTITIONS (par1 VALUES('重 庆'),par2 VALUES('北 京'),par3 VALUES('上 海'),par4 VALUES(OTHERVALUES)) SUBPARTITION BY LIST(addr) SUBPARTITIONS( subpart1 VALUES ('青 羊'), subpart2 VALUES ('武 侯'), subpart3 VALUES ('金 牛'), subpart4 VALUES ('高 新'), subpart5 VALUES ('锦 江')) ;

-- 本示例创建一个以 city 为一级列表分区,addr 为二级列表子分区的分区表。

范围分区

CREATE TABLE test_part_ran(id INT,name VARCHAR,city VARCHAR,addr  VARCHAR)  PARTITION BY LIST(city) PARTITIONS(  part1 VALUES('成 都'),  part2 VALUES('重 庆'),  part3 VALUES('北 京'), part4 VALUES(OTHERVALUES))  SUBPARTITION BY RANGE(id) SUBPARTITIONS(  partitionsub_1 VALUES LESS THAN(1),  partitionsub_2 VALUES LESS THAN(10),  partitionsub_3 VALUES LESS THAN(23),  partitionsub_4 VALUES LESS THAN (MAXVALUES)) ;

-- 本例创建一个以 city 为一级列表分区,以 id 为二级范围子分区的分区表。
2.3 自动扩展分区

虚谷 V11.0 以后的版本中,范围分区提供了针对日期时间类型的自动扩展分区 功能,分区间隔支持 DAY、MONTH、YEAR。

CREATE TABLE range_test(id INT,create_time DATETIME)PARTITION BY RANGE(create_time) INTERVAL 5 DAY PARTITIONS(('1970-01-01 00:00:00')) ;

该示例创建一个以时间为分区键的自动扩展分区表。1970-01-01 00:00:00 这个时间点以前的数据落在一个区间内,1970-01-01 00:00:00 时间点包含该时间以后的数据以 5 天为间隔进行分区。

3、sql语句
3.1 建库、建表sql

创建一个数据库:

create database DB1;

删除数据库:

drop database DB1;

数据库重命名:

alter database DB1 rename to DB2;

创建一个表:

CREATE TABLE sysdba.test_tab(
kid INT IDENTITY(1,1) COMMENT '身 份ID',
name CHAR(10) NOT NULL COMMENT '姓 名',
age TINYINT DEFAULT '0' COMMENT '年 龄',
birth DATETIME COMMENT '生 日',
proc VARCHAR(10) COMMENT '所 属 省 份',
comments VARCHAR COMMENT '备 注')
PARTITION BY LIST(proc)
PARTITIONS(('北 京'),('四 川'),('重 庆'),(OTHERVALUES))COPY NUMBER 2;

该示例表示在 sysdba 模式下创建一张名为 test_tab 的表,该表包含 6 列,该表按

照“所属省份”进行列表分区,分区键值包括:北京、四川、重庆以及其他值(若无

OTHERVALUES 分区,插入所属省份值非指定列表中的值则无法插入,OTHERVAL

UES 范围分区中对应 MAXVALUES),并且指定该表存储版本数为 2(copy number

65虚谷数据库 SQL 语法手册

在多节点下有效且不能大于 3;单机默认为 1,指定大于 1 无效)。

约束:主键约束、外键约束、唯一值约束、默认值约束、值检查约束

主键约束

CREATE TABLE test(id INTEGER ,name CHAR(10),tel INTEGER, CONSTRAINT test_pk PRIMARY KEY (id,tel)) ;

-- 该示例表示在创建 test 表时同时指定 id 与 tel 作为该表主键,主键约束名为
test_pk。此外若用户不指定约束名可删除CONSTRAINT test_pk

唯一值约束

CREATE TABLE test_uniq(id INTEGER,name CHAR(10),CONSTRAINT test_uk UNIQUE (id,name)) ;

--该示例表示创建表 test_uniq 时,创建名为 test_uk 的唯一值约束,约束键为 id 与
name。

默认值约束

CREATE TABLE test_default(id INTEGER IDENTITY(1,1),name CHAR(10) CONSTRAINT def_cons DEFAULT 'good!') ;

-- 该示例表示创建表 test_default 并指定 name 字段默认值为“good!”,当插入语句
中未指定 name 值时,系统将默认对其赋值为“good“

值检查约束

CREATE TABLE test_check(id INTEGER,name CHAR(10),CHECK(id>10 OR name ='chk')) ;

--该示例表示创建一张名为 test_check 的表,该表插入数据值要求 id>10 或者 name
值为 chk,否则数据无法插入
3.2 增删改查sql

insert:

-- 示 例 1: 不 指 定 插 入 列 , 插 入 值 为 常 值
INSERT INTO test_tab_1 VALUES(DEFAULT, NULL, '2000-01-01',2.459E+23) ;
-- 示 例 2: 指 定 插 入 列 , 插 入 值 为 表 达 式
INSERT INTO test_tab_2(c3, c4) VALUES(2+3, SUBSTR(c3,LEN(c3)-3,1)) ;
-- 示 例 3: 指 定 插 入 列 , 插 入 值 为 子 查 询
INSERT INTO test_tab_3(c3, c4)SELECT salary,addr FROM t2 WHERE t2.id > 10;
-- 示 例 4: 一 条 语 句 中 插 入 多 行 数 据
INSERT INTO test_tab_4 VALUES(1, 'alpha')(DEFAULT, '')(NULL, 'beta')(4, 'gamma') ;
-- 示 例 5: 插 入 时 将 结 果 RETURNING
DECLARE
   TYPE type_table_varchar IS TABLE OF VARCHAR ;
   var_chr TYPE_TABLE_VARCHAR ;
BEGIN
  FOR i IN 1..10 LOOP
     INSERT INTO test_tab_5(id, c2, c3) VALUES(i, i*2.1,
         'STRING_'||i)
         RETURNING '('||C2||','||C3||')' BULK COLLECT INTO
 var_chr ;
       -- 将 返 回 结 果 输 出 至 屏 幕
       FOR j IN 1..var_chr.COUNT() LOOP
           SEND_MSG(var_chr(j)) ;
       END LOOP ;
  END LOOP ;
END ;

update:

-- 示 例 1: 更 新 结 果 为 常 值
UPDATE t2 SET c2 = 'new_a_1', c3 = DEFAULT WHERE c1 = 5;
-- 示 例 2: 更 新 结 果 为 子 查 询
UPDATE t2 SET (c2, c3) = (SELECT MAX(c2), MIN(c3)+10 FROM t1) WHERE c1 = 6;
-- 示 例 3: 更 新 时 将 结 果 RETURNING
DECLARE
   TYPE type_table_1 IS TABLE OF T1%ROWTYPE ;
      -- UDT类 型 : T1 行 类 型 的 嵌 套 表
   var_t1 TYPE_TABLE_1 ;
      -- UDT类 型 变 量 , 用 来 保 存 游 标 中 查 询 的 数 据
   TYPE type_table_int IS TABLE OF t2.c2%TYPE ;
      -- UDT类 型 : INT 类 型 的 嵌 套 表
   var_int TYPE_TABLE_INT ;
      -- UDT类 型 变 量 , 用 来 保 存 RETURNING 的 值
   CURSOR cur IS SELECT * FROM t1 ;
BEGIN
   OPEN cur ;
   FETCH cur BULK COLLECT INTO var_t1 ;
   UPDATE t2
   SET c2 = var_t1(1).c2,
       c3 = c3 + 100
       RETURNING c1 BULK COLLECT INTO var_int ;
   CLOSE cur ;
   -- 如 果 需 要 , 可 把 RETUNING 的 数 据 输 出 至 屏 幕 或 表 中
   FOR i IN 1..var_int.COUNT() LOOP
       SEND_MSG(var_int(i)) ;
   END LOOP ;
END ;

delete:

-- 示 例 1
DELETE t1 WHERE c3 = '2005-05-05' ;
-- 示 例 2
DELETE FROM t2 b FROM t1 a WHERE a.c1 = b.c1 AND a.c3 > '2003-01-01';
-- 示 例 3: 删 除 时 将 结 果 RETURNING
DECLARE
	TYPE type_table_1 IS TABLE OF t1%ROWTYPE ;
		-- UDT类 型 : T1 行 类 型 的 嵌 套 表
	var_t1 TYPE_TABLE_1 ;
		-- UDT类 型 变 量 , 用 来 保 存 游 标 中 查 询 的 数 据
	TYPE type_c3 IS TABLE OF t2.c2%TYPE ;
		-- UDT类 型 : DATE 类 型 的 嵌 套 表
	var_c3 TYPE_C3 ;
		-- UDT类 型 变 量 , 用 来 保 存 RETURNING 的 值
	CURSOR cur IS SELECT * FROM t1 ;
BEGIN
	OPEN cur ;
	FETCH cur BULK COLLECT INTO var_t1 ;
	DELETE FROM t2 WHERE t2.c1 = (var_t1(4).c1 + 1)
		RETURNING c3 BULK COLLECT INTO var_c3 ;
	-- 如 果 需 要 , 可 把 RETURNING 的 数 据 输 出 至 屏 幕 或 表 中
	FOR i IN 1..var_c3.COUNT() LOOP
		SEND_MSG(var_c3(i)) ;
	END LOOP ;
END ;
3.3 修改表结构sql
ALTER TABLE test_tab ADD COLUMN new_col VARCHAR(20) NOT NULL DEFAULT
'000' ;

该示例表示对表 test_tab 增加一列带默认值 000 的非空列 new_col,此时将对该

表进行重构,若原表中记录量越大,变更操作时间将越长

ALTER TABLE test_tab ALTER COLUMN name VARCHAR(20) ;

该示例表示将 test_tab 表的 name 字段的数据类型变更为 VARCHAR(20),若

不修改数据类型仅将精度更改为 CHAR(20),将重构数据,数据量越大时间开销越大

ALTER TABLE test_tab_new RENAME kid TO keyid ;

该示例表示将 test_tab_new 的列名 kid 改为 keyid。

ALTER TABLE test_tab_new OWNER TO guest ;

该示例表示将 test_tab_new 的属主改为 guest,此时用户 guest 拥有该表的所有

权,可进行所有操作,其他用户访问该表需带上 guest 模式信息。

ALTER TABLE test_tab2 ADD PARTITION part_n VALUES LESS THAN(
'2022-05-20 10:10:10') ;

该示例表示对列表分区表 test_tab2 增加一个分区名为 part_n 的分区,分区键值

为“2022-05-20 10:10:10”。

• 非分区表与哈希分区表不允许添加分区。

• 拥有 MAXVALUES 与 OTHERVALUES 的分区表不允许添加分区

ALTER TABLE test_tab DROP PARTITION part1 REBUILD GLOBAL INDEX ;

该示例表示删除表 test_tab 的分区,分区名为 part1,并重建该表全局索引。

• 删除分区时不允许删除异常分区 (MAXVALUES/OTHERVALUES)。

• 哈希分区表的分区不允许删除。

• 删除分区将导致表的全局索引失效,此时需重建索引或在删除时指

定 REBUILD 参数。

• 不允许删除分区表的所有分区,必须至少保留一个分区。

3.5 索引

创建索引

CREATE TABLE index_list (city_id INT ,city_name VARCHAR,city_population INT) ;
CREATE INDEX index_l ON index_list(city_name) GLOBAL PARTITION BY LIST (city_name) PARTITIONS (partition1 VALUES('成 都')) ;

该示例指示创建一个堆表 index_list, 在其上创建一个全局列表分区索引,分区 键 city_name,索引键值根据 city_name 进行分区。

索引重建

REINDEX test.index_1 ;
--该示例指示重建 test 表下的 index_1 索引。

REINDEX student.*;
--该示例表示重建 student 表下的所有索引。

索引删除

DROP INDEX test.idx_1 ;
-- 该示例表示删除 test 表上的索引 idx_1。

索引添加列表分区

ALTER INDEX t_base_3.idx_t3_1 ADD PARTITION p3 VALUES LESS THAN('2020-01-01') ;
-- 该示例表示添加新的索引分区 p3

索引重命名

ALTER INDEX t_base_3.idx_t3_1 RENAME TO t_base_3.idx_t3_2 ;
--该示例表示将索引 idx_t3_1 重命名为 idx_t3_2
3.6 视图

创建视图

CREATE VIEW student_view (id,name,sex,department) AS SELECT st_no,st_name,st_sex,st_department FROM student ;

-- 该示例创建名为 student_view 的视图用于展示学生的基本信息,其基表为学生
信息表 student,视图中的信息是基表信息在 st_no、st_name、st_sex、st_department 字
段上的投影,投影输出字段名对应变为 id、name、sex、department。

删除视图

DROP VIEW view_test ;
4、用户、角色管理
4.1 用户

创建用户

CREATE USER test_user IDENTIFIED BY 'test_123@' VALID UNTIL '2029-01-01' ;

--该示例表示创建一个 test_user 用户,该用户有效期至 2029 年 1 月 1 日,届时该用户将不可再使用,除非由管理员延长其有效期。

修改用户

ALTER USER test_user IDENTIFIED BY 'test_1234@' ;
--该示例重置用户 test_user 的口令为 test_1234@,该操作须由用户自己、数据库管理员或拥有用户管理权限的用户执行。

ALTER USER test_user VALID UNTIL '2031-01-01' ;
--修改账号 test_user 的有效时间,该账号在 2031 年 1 月 1 日前有效,超过该时间用户账号失效。
 账号失效时间为指定时间的下一个小时,即指定为 2031-01-01 则实际失效时间为 2031-01-01 01:00:00

删除用户

DROP USER user_name ;
4.2 角色

创建角色

CREATE ROLE role_1 ;

CREATE ROLE role_2 init USER test_user ;
--创建角色 role_2,并添加初始成员 test_user。

角色添加成员

GRANT ROLE role_1 TO test_user ;

角色删除成员

REVOKE ROLE role_1 FROM test_user ;
--将成员 test_user 从角色 role_1 中删除,即回收 test_user 所拥有的 role_1 的所有权限

删除角色

DROP ROLE role_1 ;
5、权限管理
  • 库级权限的管理粒度为整个逻辑库,拥有库级权限的用户或角色可对该库下所有对象进行权限允许范围内的操作。

  • 模式级权限的管理粒度为模式,拥有模式级权限的用户或角色可对该模式下所有对象进行权限允许范围内的操作。

  • 对象级权限的管理粒度为对象,拥有对象级权限的用户或角色可对指定对象进行权限允许范围内的操作。

  • 列级权限的管理粒度为表列或视图列,拥有列级权限的用户或角色可访问和操作权限允许范围内的表列或视图列。

5.1 权限授予

库级权限

GRANT CREATE ANY TABLE TO test_user ;
--该示例表示授予 test_user 在当前库下所有模式的创表权限,若无 ANY 关键字则表示,test_user 只能在属于他的模式下进行创表。

模式级权限

GRANT CREATE ANY TABLE IN SCHEMA SYSDBA TO role_1 ;
--该示例表示授予角色 role_1 在模式 SYSDBA 下的创表权限。

对象级权限

CREATE TABLE test_permission(id int) ;
CREATE USER u1 IDENTIFIED BY 'test_123@' ;
GRANT INSERT ON test_permission TO u1 ;
--该示例表示授予用户 U1 对于表 test_permission 的数据插入权限,则用户 U1 对表 test_permisssion 无删除、查询、更改、引用等权限。

GRANT ALL ON test_permission TO u1 ;
--该示例表示授予用户 U1 对于表 test_premission 所有数据库所允许的操作权限,
包括:INSERTUPDATEDELETESELECTREFERENCES 等。

列级权限

CREATE TABLE TEST_COL_PRE(ID INT,ID2 INT,ID3 INT) ;
CREATE USER TU1 IDENTIFIED BY 'test_123@' ;
GRANT SELECT(ID2) ON TEST_COL_PRE TO TU1 ;
GRANT UPDATE(ID) ON TEST_COL_PRE TO TU1 ;

--该示例表示授予用户 TU1 针对表 TEST_COL_PRE 的列 ID2 的查询权限与列 ID的变更权限。
-- 列级权限只包括 SELECT 与 UPDATE 操作权限,且必须指定可操作的对象名,对象类型只能是表或视图。
5.2 权限回收

权限回收的语法格式与权限授予一一匹配,在权限回收时仅需 将权限授予的关键字 GRANT、TO 改为 REVOKE、FROM 即可。

6、数据库相关知识
6.1 数据库语句
DQL-------------数据查询语言
selectFromWhere
DML-------------数据操纵语言
insertupdatedelete
DDL-------------数据定义语言
createalterdrop
DCL-------------数据控制语言
commitrollbacksavepoint
6.2 事务
原子性(Atomicity)--原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)	--事务前后数据的完整性必须保持一致。
隔离性(Isolation--事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)--事务一旦被提交则不可逆,被持久化到数据库中,接下来即使数据库发生故障也不应该对其有任何影响
  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值