表的行类型oracle,Oracle数据库表类型-程序员宅基地

技术标签: 表的行类型oracle  

Oracle数据库表类型

6.1 表的类型

1. 堆组织表

2. 索引组织表

3. 聚簇表

4. 散列聚簇表

5. 嵌套表

6. 临时表

7. 对象表

8. 外部表

一张表最多有1000列;表的行数理论上没有限制;表上索引个数可以是列的全排列数,而且一次性能够使用32个;表的数量没有限制。

6.2 术语

高水位标记 High Water Mark: 曾经包含数据的最右边的块。在全表扫描时,Oracle将扫描高水标记一下的所有块,即使它们不含数据。TRUNCATE将重新设置高水标记。

自由列表 Freelist: 在Oracle中用来跟踪高水标记以下有空闲空间的块对象。保留在高水标记以上的块,只有Freelist为空时才能被用到。

并行更新数据时,配置多个Freelist能提高整体性能,代价是增加了存储空间。

6.3 堆组织表

应 用中99%(或者更多)的情况下使用的可能都是堆组织表,不过随着IOT的出现,这种状况以后可能会有所改观,因为IOT本身就可以加索引。执行 CREATE TABLE语句时,默认得到的表类型就是堆组织表。如果你想要任何其他类型的表结构,就需要在CREATE语句本身中指定它。

堆 (heap)是计算机科学领域中得到深入研究的一种经典数据结构。它实际上就是一个很大的空间、磁盘或内存区(当然,这里所说的磁盘是指数据库表的相应磁 盘),会以一种显然随机的方式管理。数据会放在最合适的地方,而不是以某种特定顺序来放置。许多人希望能按数据放入表中的顺序从表中取出数据,但是对于 堆,这是无法保证的。

6.4 索引组织表

数据在IOT中根据主键存储和排序。IOT特别适用于IR(信息检索)、空间和OLAP应用程序。

IOT名义上是表,但它们的段实际上是索引段。要显示空间使用等就要先把IOT表的名字转换成潜在的索引名。默认值是SYS_IOT_TOP_,object_id是为表分配的内部对象ID。推荐在建表时指定索引名。

主要应用

对只包含主键列的表:使用堆组织表将有100%多的额外开销;

1. 构建自己的索引结构:例如自己实现一个提供大小写不敏感查询的类似函数索引

CREATE TABLE emp AS SELECT * FORM scott.emp;

CREATE TABLE upper_name

(x$ename,x$rid,

PRIMARY KEY(x$ename,x$rid)

)

ORGANIZATION INDEX

AS

SELECT UPPER(ename),ROWID FROM emp;

CREATE OR REPLACE TRIGGER upper_ename

AFTER INSERT OR UPDATE OR DELETE ON emp

FOR EACH ROW

BEGIN

IF (UPDATING AND (:OLD.ename||'x'<>:NEW.ename||'x'))

THEN

DELETE FROM upper_name

WHERE x$ename=UPPER(:OLD.ename)

AND x$rid=:OLD.rowid;

INSERT INTO upper_ename(x$ename,x$rid) VALUES (UPPER(:NEW.ename),:NEW.rowid);

ELSIF (INSERTING)

THEN

INSERT INTO upper_ename(x$ename,x$rid) VALUES (UPPER(:NEW.ename),:NEW.rowid);

ELSIF (DELETING)

THEN

DELETE FROM upper_name

WHERE x$ename=UPPER(:OLD.ename)

AND x$rid=:OLD.rowid;

END IF;

END;

2. 需要加强数据的共同定位或希望数据按特定的顺序物理存储时

对应Sybase和SQL Server用户,这种情况会采用聚簇索引,而这可能达到110%的额外开销,而IOT没有。经常用BETWEEN对主键或者唯一键进行查询,则会降低I/O数量。

主要选项

NOCOMPRESS/COMPRESS N

压缩N列,即对其中前N列相同的值进行压缩。从而能够允许更多数据进入Buffer Cache,代价是略多的CPU能量。

OVERFLOW PCTTHRESHOLD N/INCLUDING column_name

索引段的存储要密集于普通数据段(每块的行数要多),一般PCTUSED是没有意义的。而OVERFLOW子句允许设置另一个段以允许IOT中的行数据太大时溢出的这个段中。它再次引入PCTUSED,这样PCTUSED和PCTFREE对OVERFLOW段有对于堆组织表中相同的含义。而使用方法是如下中的一种:

PCTTHRESHOLD--当行中数据超出此百分比,该行尾部的列溢出到溢出块;

INCLUDING--指定列之前的列均存入索引块,之后的列存入溢出块。

二次索引

只要主键是IOT,可以在索引中拥有索引。但不像其他一般索引,它不包含真正rowid(物理地址),而是基于主键IOT的逻辑rowid,作用稍小。对于IOT的二次索引访问实际有两个扫描执行(一般表只需一个扫描索引结构),一个在二次结构中,一个在IOT本身中。

索引组织表小结

在 建立IOT时,最关键的是适当地分配数据,即哪些数据存储在索引块上,哪些数据存储在溢出段上。对溢出条件不同的各种场景进行基准测试,查看对 INSERT、UPDATE、DELETE和SELECT分别有怎样的影响。如果结构只建立一次,而且要频繁读取,就应该尽可能地把数据放在索引块上(最 合适获取),要么频繁地组织索引中的数据(不适于修改)。堆

6.5 索引聚簇表

Oracle中聚簇是存储一组表的方法,而不是如同SQL Server、Sybase中那样(那是Oracle中的IOT)。概念上是通过聚簇码列将几张表"预连接",尽可能将聚簇码列相同的几张表的行放入同一个块中。

CREATE CLUSTER emp_dept_cluster

(deptno NUMBER(2))

SIZE 1024;

CREATE INDEX emp_dept_cluster_idx

ON CLUSTER emp_dept_cluster;

CREATE TABLE dept

(deptno NUMBER(2) PRIMARY KEY,

dname VARCHAR2(14),

loc VARCHAR2(3)

)

CLUSTER emp_dept_cluster(deptno);

CREATE TABLE emp

(empno NUMBER PRIMARY KEY,

ename VARCHAR2(10),

...

deptno NUMBER(2) REFERENCES dept(deptno)

)

CLUSTER emp_dept_cluster(deptno);

BEGIN

FOR x IN(SELECT * FROM scott.dept)

LOOP

INSERT INTO dept VALUES(x.deptno,x.dname,x.loc);

INSERT INTO emp

SELECT * FROM scott.emp

WHERE deptno=x.deptno;

END LOOP;

END;

注意这里的插入方法,这将尽可能保证每个块中放置尽可能多的聚簇码值,并让可以"预连接"的两个表中的值尽可能在同一个块中。

DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)可用于检查rowid所属块。

很容易发现dept和emp有重复的rowid,表和rowid可以唯一确定行,rowid伪列只有在一张表中才是唯一的!

不使用聚簇的情况:

1.聚簇可能消极影响DML性能;

2.全扫描表的性能会受到影响--不仅仅扫描一个表,而是对多个表全扫描;

3.聚簇中的表不能TRUNCATE。

6.6 散列聚簇表

概念类似索引聚簇表,但用散列函数代替了聚簇码索引。Oracle采用行的码值,使用内部函数或者自定义的函数进行散列运算,从而指定数据的存放位置。这样没有在表中增加传统的索引,因此不能Range Scan散列聚簇中的表,而只能全表扫描(除非单独建立索引)。

CREATE CLUSTER hash_cluster

(hash_key NUMBER)

HASHKEYS 1000

SIZE 8192;

索引聚簇需要空间时是动态分配,而散列聚簇表在创建时确定了散列码数(HASHKEY)。Oracle采用第一个不小于HASHKEY的质数作为散列码数,将散列码数*SIZE就得到分配的空间(字节),可容纳HASHKEYS/TRUNC(BLOCKSIZE/SIZE)字节的数据。

性能上,散列聚簇表消耗较少I/O,较多CPU,所需执行时间较少,大体取决于CPU时间(当然可能要等待I/O,取决于配置)。

下列情况下使用散列聚簇表较为合适:

1. 在一定程度上精确知道整个过程中表中记录行数或者合理的上限,以确定散列码数;

2. 不大量执行DML,尤其是插入。更新不会产生显著的额外开销,除非更新HASHKEY,这样会导致行迁移;

3. 总是通过HASHKEY值访问数据。

6.7 嵌套表

两种使用嵌套表的方法:

1. PL/SQL代码中作为扩展PL/SQL语言;

2. 作为物理存储机制,以持久地存储集合。

嵌套表语法

创建嵌套表类型:

CREATE TABLE dept

(deptno NUMBER(2) PRIMARY KEY,

dname VARCHAR2(14),

loc VARCHAR2(13)

);

CREATE TABLE emp

(empno NUMBER(4) PRIMARY KEY,

ename VARCHAR2(10),

job VARCHAR2(9),

mgr NUMBER(4) REFERENCES emp,

hiredate DATE,

sal NUMBER(7, 2),

comm NUMBER(7, 2),

deptno NUMBER(2) REFERENCES dept

);

INSERT INTO dept SELECT * FROM scott.dept;

INSERT INTO emp SELECT * FROM scott.emp;

CREATE OR REPLACE TYPE emp_type

AS OBJECT

(empno NUMBER(4),

ename VARCHAR2(10),

job VARCHAR2(9),

mgr NUMBER(4),

hiredate DATE,

sal NUMBER(7, 2),

comm NUMBER(7, 2)

);

CREATE OR REPLACE TYPE emp_tab_type

AS TABLE OF emp_type;

使用嵌套表:

CREATE TABLE dept_and_emp

(deptno NUMBER(2) PRIMARY KEY,

dname VARCHAR2(14),

loc VARCHAR2(13),

emps emp_tab_type

)

NESTED TABLE emps STORE AS emps_nt;

可以在嵌套表上增加约束:

ALTER TABLE emps_nt ADD CONSTRAINT emps_empno_unique

UNIQUE(empno) ;

嵌套表不支持参照完整性约束,不能参考任何其他表甚至自己:

ALTER TABLE emps_nt ADD CONSTRAINT mgr_fk

FOREIGN KEY(mgr) REFERENCES emps_nt(empno);

会产生错误ORA-30730。

INSERT INTO dept_and_emp

SELECT dept.*,

CAST( MULTISET( SELECT empno, ename, job, mgr, hiredate, sal, comm

FROM emp

WHERE emp.deptno = dept.deptno ) AS emp_tab_type )

FROM dept;

MULTISET用来告诉Oracle子查询返回不止一行,CAST用来告诉Oracle将返回设置为一个集合类型。

查询时,嵌套表中的数据将在同一列中:

SELECT deptno, dname, loc, d.emps AS employees

FROM dept_and_emp d

WHERE deptno = 10;

Oracle同样提供方法去掉集合的嵌套,像关系型表一样处理(能够将EMPS列当作一个表,并自然连接且不需要连接条件):

SELECT d.deptno, d.dname, emp.*

FROM dept_and_emp D, TABLE(d.emps) emp;

按照"每行实际是一张表"的思想来更新:

UPDATE

TABLE( SELECT emps

FROM dept_and_emp

WHERE deptno = 10

)

SET comm = 100;

但如果返回SELECT emps FROM dept_and_emp WHERE deptno = 10少于一行,更新将失败(普通情况下更新0行是许可的),并返回ORA-22908错误--如同更新语句没有写表名一样;如果返回多于一行,更新也会失败,返回ORA-01427错误。这说明Oracle在使用了嵌套表后认为每一行指向另一个表,而不是如同关系型模型那样认为是另一个行集。

插入与删除的语法:

INSERT INTO TABLE

(SELECT emps FROM dept_and_emps WHERE deptno=10)

VALUES

(1234,'NewEmp','Clerk',7782,SYSDATE,1200,NULL);

DELETE FROM TABLE

(SELECT emps FROM dept_and_emps WHERE deptno=20)

WHERE ename='SCOTT';

一般而言,必须总是连接,而不能单独查询嵌套表(如EMPS)中的数据,但是如果确实需要,是可以的。提示NESTED_TABLE_GET_REFS被用于EXP和IMP处理嵌套表。

SELECT /*+NESTED_TABLE_GET_REFS+*/

NESTED_TABLE_ID, SYS_NC_ROWINFO$

FROM "TKYTE"."EMPS_NT";

而我们察看EMPS_NT的表结构是看不到NESTED_TABLE_ID,SYS_NC_ROWINFO$两列的。对父表DEPT_AND_EMP来说NESTED_TABLE_ID是一个外键。

使用这个提示就可以直接操作嵌套表了:

UPDATE /*+NESTED_TABLE_GET_REFS+*/ emps_nt

SET ename=INITCAP(ename);

嵌套表存储

上例中,现实产生了两张表:

DEPT_AND_EMP

deptno

NUMBER(2)

dname

VARCHAR2(14)

loc

VARCHAR2(13)

SYS_NC0000400005$

RAW(16)

EMPS_NT

SYS_NC_ROWINFO$

NESTED_TABLE_ID

RAW(16)

empno

NUMBER(4)

ename

VARCHAR2(10)

job

VARCHAR2(9)

mgr

NUMBER(4)

hiredate

DATE

sal

NUMBER(7,2)

comm

NUMBER(7,2)

默认情况下,每个嵌套表列都产生一个额外的RAW(16)隐藏列,并在其上创建了唯一约束,用以指向嵌套表。而嵌套表中有两个隐藏列:SYS_NC_ROWINFO$是作为一个对象返回所有标量元素的一个伪列;另一个NESTED_TABLE_ID的外键回指向父表。

可以看到真实代码:

CREATE TABLE TKYTE.DEPT_AND_EMP

(DEPTNO NUMBER(2,0),

DNAME VARCHAR2(14),

LOC VARCHAR2(13),

EMPS EMP_TAB_TYPE)

PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING

STORAGE(INITIAL 131072 NEXT 131072

MINEXTENTS 1 MAXEXTENTS 4096

PCTINCREASE 0 FREELISTS 1 FREELIST GROUP 1

BUFFER_POOL DEFAULT)

TABLESPACE USER

NESTED TABLE EMPS

STORE AS EMPS_NT

RETURN BY VALUE;

RETURN BY VALUE用来描述嵌套表如何返回到客户应用程序中。

NESTED_TABLE_ID列必须是索引的,那么较好的解决办法就是使用IOT存储嵌套表。

CREATE TABLE TKYTE.DEPT_AND_EMP

(DEPTNO NUMBER(2,0),

DNAME VARCHAR2(14),

LOC VARCHAR2(13),

EMPS EMP_TAB_TYPE)

PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING

STORAGE(INITIAL 131072 NEXT 131072

MINEXTENTS 1 MAXEXTENTS 4096

PCTINCREASE 0 FREELISTS 1 FREELIST GROUP 1

BUFFER_POOL DEFAULT)

TABLESPACE USER

NESTED TABLE EMPS

STORE AS EMPS_NT

((empno NOT NULL,

UNIQUE(empno),

PRIMARY KEY(nested_table_id,empno))

ORGANIZATION INDEX COMPRESS 1)

RETURN BY VALUE;

这样与最初默认的嵌套表相比,使用了较少的存储空间并有最需要的索引。

不使用嵌套表作为永久存储机制的原因

1.增加了RAW(16)列的额外开销,父表和子表都将增加这个额外的列;

2.当通常已经有唯一约束时,父表上的唯一约束是额外开销;

3.没有使用不支持的结构(NESTED_TABLE_GET_REFS),嵌套表不容易使用。

一般推荐在编程结构和视图中使用嵌套表。如果要使用嵌套表作为存储机制,确保嵌套表是IOT,以避免NESTED_TABLE_ID和嵌套表本身中索引的额外开销。

6.8 临时表

Oracle的临时表与其他数据库中的不同,其定义是"静态"的。以事务(ON COMMIT DELETE ROWS)或者会话(ON COMMIT PRESERVE ROWS)为基础,只是说明数据的生命期,而在数据库中创建临时表一次,其结构总是有效的,被作为对象存在数据字典中了,这样也就允许对临时表建立视图、存储过程中用静态SQL引用临时表等等。

在实际开发中,考虑到DDL是消耗较大的操作,应该避免在运行时操作,而是将应用程序需要的临时表在程序安装时就创建,而只是在存储过程中简单的INSERT、SELECT。

临时表不支持的永久表的特性有:

1. 不能用参照完整性约束,也不能被参照完整性约束所引用;

2. 不能有VARRAY或者NESTED TABLE类型的列;

3. 不能是IOT;

4. 不能是索引或者散列聚簇;

5. 不能分区;

6. 通过ANALYZE命令不能产生统计信息,也即是说优化器在临时表上没有真正的统计功能。

由于缺少统计功能,那么CBO(基于成本的优化器)的性能将受到极大的影响,因此应当尽可能使用INLINE VIEW。

要让临时表拥有正确的统计信息,CBO产生正确的决策,可以先建立一张结构与临时表完全相同的普通表:

CREATE TABLE temp_all_objects

AS

SELECT * FROM all_objects WHERE 1=0;

CREATE INDEX temp_all_objects_idx ON temp_all_objects(object_id);

选择插入代表性数据后进行分析:

...

ANALYZE TABLE temp_all_objects COMPUTE STATISTICS FOR ALL INDEX;

BEGIN

DBMS_STATS.CREATE_STAT_TABLE(ownname => USER,

stattab => 'STATS');

DBMS_STATS.EXPORT_TABLE_STATS(ownname => USER,

tabname => 'TEMP_ALL_OBJECTS',

stattab => 'STATS');

DBMS_STATS.EXPORT_INDEX_STATS(ownname => USER,

tabname => 'TEMP_ALL_OBJECTS_IDX',

stattab => 'STATS');

END;

建立临时表:

DROP TABLE temp_all_objects;

CREATE GLOBAL TEMPORARY TABLE temp_all_objects

AS

SELECT * FROM all_objects WHERE 1=0;

导入正确的信息后CBO将使用这些信息决定执行模式:

CREATE INDEX temp_all_objects_idx ON temp_all_objects(object_id);

BEGIN

DBMS_STATS.IMPORT_TABLE_STATS(ownname => USER,

tabname => 'TEMP_ALL_OBJECTS',

stattab => 'STATS');

DBMS_STATS.IMPORT_INDEX_STATS(ownname => USER,

tabname => 'TEMP_ALL_OBJECTS_IDX',

stattab => 'STATS');

END;

6.8 对象表

基于类型(Type)创建的表,而不是作为列的集合。创建语法:

CREATE TABLE t OF some_type;

对于下例:

CREATE OR REPLACE TYPE address_type

AS OBJECT

(city VARCHAR2(30),

street VARCHAR2(30),

state VARCHAR2(2),

zip NUMBER

);

CREATE OR REPLACE TYPE person_type

AS OBJECT

(name VARCHAR2(30),

dob DATE,

home_address address_type,

work_address address_type

);

CREATE TABLE people OF person_type;

通过执行如下语句,可以看到数据库中实际存放的结构:

SELECT name,segcollength

FROM SYS.COL$

WHERE obj#=(SELECT object_id

FROM user_objects

WHERE object_name='PEOPLE');

PEOPLE

SYS_NC_OID$

16

SYS_NC_ROWINFO$

1

NAME

30

DOB

7

HOME_ADDRESS

1

SYS_NC00006$

30

SYS_NC00007$

30

SYS_NC00008$

2

SYS_NC00009$

22

WORK_ADDRESS

1

SYS_NC00011$

30

SYS_NC00012$

30

SYS_NC00013$

2

SYS_NC00014$

22

SYS_NC_OID$是系统为表产生的Object ID,RAW(16),其上有唯一性索引。它是一主键为基础,并不是系统产生的,是一个伪列,且没有在硬盘上真正消耗空间;

SYS_NC_ROWINFO$类似于嵌套表中,可作为单独一列返回整行;

NAME, DOB是表中原有标量;

HOME_ADDRESS, WORK_ADDRESS可作为单个对象,返回所代表的列的集合;

SYS_NCnnnnn$是内嵌对象类型的标量实现。

外部表(external table)-- 很大程度上可以替代sqlload

这些表并不存储在数据库本身中,而是放在数据库之外,即放在平常的操作系统文件中。在Oracle9i及以上版本中,利用外部表可以查询数 据库之外的一个文件,就好像这个文件也是数据库中平常的表一样。外部表对于向数据库加载数据最有用(外部表是非常强大的数据加载工具)。Oracle 10g则更进一步,还引入了一个外部表卸载功能,在不使用数据库链接的情况下,这为在Oracle数据库之间移动数据提供了一种简单的方法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39893274/article/details/116343486

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签