当前位置: 首页 > news >正文

我在广州学 Mysql 系列——与索引相关的练习题

ℹ️大家好,我是练小杰,今天星期二啦,还有三天就是星期五了,为了美好生活奋斗吧朋友们!
本文将学习MYSQL中数据表内容的索引相关练习题目~~
复习:👉【索引详解】
数据库专栏👉【数据库专栏】~
想要了解更多内容,主页 【练小杰的CSDN】

老爹:“还有一件事!!!”——跟练小杰学习MySQL~~
在这里插入图片描述

文章目录

  • 定义表并建立索引
    • 建立普通索引
    • 创建唯一索引
    • 创建单列索引
    • 建立组合索引
      • ⚠️注意
    • 创建全文索引
    • 创建空间索引
  • 表创建后使用ALTER TABLE创建索引
    • 普通索引
    • 唯一索引
    • 单列索引
    • 组合索引
    • 全文索引
    • 空间索引
  • 表创建后使用CREATE INDEX创建索引
    • 普通索引
    • 唯一索引
    • 单列索引
    • 组合索引
    • 全文索引
    • 空间索引
  • 删除索引
    • 使用ALTER TABLE删除索引
    • 删除book表中的名称为UniqidIdx的唯一索引
    • 使用DROP INDEX语句删除索引
    • 删除book表中名称为BkAuAndInfoIdx的组合索引

在这里插入图片描述

定义表并建立索引

建立普通索引

  • 在book表中的year_publication字段上建立普通索引
    SQL语句如下:
CREATE TABLE book
(
bookid            	INT NOT NULL,
bookname          	VARCHAR(255) NOT NULL,
authors            	VARCHAR(255) NOT NULL,
info               	VARCHAR(255) NULL,
comment           	VARCHAR(255) NULL,
year_publication   	YEAR NOT NULL,
INDEX(year_publication)
);
  • 该sql 语句执行完之后,使用SHOW CREATE TABLE查看表结构:
 SHOW CREATE table book \G;
*************************** 1. row ***************************Table: book
Create Table: CREATE TABLE `book` (`bookid` int NOT NULL,`bookname` varchar(255) NOT NULL,`authors` varchar(255) NOT NULL,`info` varchar(255) DEFAULT NULL,`comment` varchar(255) DEFAULT NULL,`year_publication` year NOT NULL,KEY `year_publication` (`year_publication`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.02 sec)

由结果可以看到,book表的year_publication字段上成功建立索引,其索引名称year_publication为MySQL自动添加。

  • 使用EXPLAIN语句查看索引是否正在使用
explain select * from book where year_publication=1990 \G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: bookpartitions: NULLtype: ref
possible_keys: year_publicationkey: year_publicationkey_len: 1ref: constrows: 1filtered: 100.00Extra: NULL
1 row in set, 1 warning (0.00 sec)

type 为显示连接的类型,如果 type 是 ALL,说明没有使用索引;如果是 range 或 ref,说明使用了索引。
可以看到,上面的type类型为ref,说明使用了索引进行等值查找。

创建唯一索引

  • 创建一个表t1,在表中的id字段上使用UNIQUE关键字创建唯一索引
CREATE TABLE t1
(
id    INT NOT NULL,
name CHAR(30) NOT NULL,
UNIQUE INDEX UniqIdx(id)
);
  • sql语句执行完之后,使用SHOW CREATE TABLE查看表结构:
 SHOW CREATE table t1 \G;
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`id` int NOT NULL,`name` char(30) NOT NULL,UNIQUE KEY `UniqIdx` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

由结果可以看到,id字段上已经成功建立了一个名为UniqIdx的唯一索引。

创建单列索引

  • 创建一个表t2,在表中的name字段上创建单列索引
    表结构如下:
CREATE TABLE t2
(
id   INT NOT NULL,
name CHAR(50) NULL,
INDEX SingleIdx(name(20))
);
  • sql 语句执行完毕之后,使用SHOW CREATE TABLE查看表结构:
 SHOW CREATE table t2 \G;
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int NOT NULL,`name` char(50) DEFAULT NULL,KEY `SingleIdx` (`name`(20))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.02 sec)

由结果可以看到,id字段上已经成功建立了一个名为SingleIdx的单列索引,索引长度为20

建立组合索引

  • 创建表t3,在表中的id、name和age字段上建立组合索引
    SQL语句如下:
CREATE TABLE t3
(
id    INT NOT NULL,
name CHAR(30)  NOT NULL,
age  INT NOT NULL,
info VARCHAR(255),
INDEX MultiIdx(id, name, age(100))
);
  • 该语句执行完毕之后,使用SHOW CREATE TABLE查看表结构:
 SHOW CREATE table t3 \G
*************************** 1. row ***************************Table: t3
CREATE Table: CREATE TABLE `t3` (`id` int(11) NOT NULL,`name` char(30) NOT NULL,`age` int(11) NOT NULL,`info` varchar(255) DEFAULT NULL,KEY `MultiIdx` (`id`,`name`,`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

由结果可以看到,id、name和age字段上已经成功建立了一个名为MultiIdx的组合索引。

⚠️注意

  • 组合索引可起几个索引的作用,但是使用时并不是随便查询哪个字段都可以使用索引,而是遵从“最左前缀”:利用索引中最左边的列集来匹配行,这样的列集称为最左前缀。
  • 上述由id、name和age 3个字段构成的索引,索引行中按id/name/age的顺序存放,索引可以搜索下面字段组合:(id, name, age)、(id, name)或者id。如果列不构成索引最左面的前缀,MySQL不能使用局部索引,如(age)或者(name,age)组合则不能使用索引查询。
  • 在t3表中,查询id和name字段,使用EXPLAIN语句查看索引的使用情况:
 explain select * from t3 where id=1 AND name='joe' \G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: t3type: ref
possible_keys: MultiIdxkey: MultiIdxkey_len: 94ref: const,constrows: 1Extra: Using where
1 row in set (0.00 sec)

可以看到,查询id和name字段时,使用了名称MultiIdx的索引

  • 查询(name,age)组合或者单独查询name和age字段,结果如下:
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: t3type: ALL
possible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: 1Extra: Using where

可以发现,possible_keys和key值为NULL,并没有使用在t3表中创建的索引进行查询。

创建全文索引

FULLTEXT全文索引可以用于全文搜索。只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列。索引总是对整个列进行,不支持局部(前缀)索引。

  • 创建表t4,在表中的info字段上建立全文索引,SQL语句如下:
CREATE TABLE t4
(
id    INT NOT NULL,
name CHAR(30) NOT NULL,
age  INT NOT NULL,
info VARCHAR(255),
FULLTEXT INDEX FullTxtIdx(info)
) ENGINE=MyISAM;

因为MySQL5.6中默认存储引擎为InnoDB,在这里创建表时需要修改表的存储引擎为MyISAM,不然创建索引会出错。

  • sql语句执行完之后,使用SHOW CREATE TABLE查看表结构:
 SHOW CREATE table t4 \G
*************************** 1. row ***************************Table: t4
Create Table: CREATE TABLE `t4` (`id` int NOT NULL,`name` char(30) NOT NULL,`age` int NOT NULL,`info` varchar(255) DEFAULT NULL,FULLTEXT KEY `FullTxtIdx` (`info`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

由结果可以看到,info字段上已经成功建立了一个名为FullTxtIdx的FULLTEXT索引。全文索引非常适合于大型数据集,对于小的数据集,它的用处可能比较小。

创建空间索引

空间索引必须在MyISAM类型的表中创建,且空间类型的字段必须为非空。

  • 创建表t5,在空间类型为GEOMETRY的字段上创建空间索引
    SQL语句如下:
CREATE TABLE t5
( g GEOMETRY NOT NULL, SPATIAL INDEX spatIdx(g) )ENGINE=MyISAM;
  • 该语句执行完毕之后,使用SHOW CREATE TABLE查看表结构:
 SHOW CREATE table t5 \G
*************************** 1. row ***************************Table: t5
Create Table: CREATE TABLE `t5` (`g` geometry NOT NULL,SPATIAL KEY `spatIdx` (`g`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

表创建后使用ALTER TABLE创建索引

普通索引

  • 在book表中的bookname字段上建立名为BkNameIdx的普通索引,SQL语句如下:
ALTER TABLE book ADD INDEX BkNameIdx ( bookname(30));
  • 添加索引之前,使用SHOW INDEX语句查看指定表中创建的索引:
 SHOW INDEX FROM book \G*************************** 1. row ***************************Table: bookNon_unique: 1Key_name: year_publicationSeq_in_index: 1Column_name: year_publicationCollation: ACardinality: 0Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
1 row in set (0.01 sec)
  • 下面使用ALTER TABLE 在bookname字段上添加索引,SQL语句如下:
ALTER TABLE book ADD INDEX BkNameIdx( bookname(30) );
  • 使用SHOW INDEX语句查看表中的索引:
 SHOW INDEX FROM book \G

查询结果如下:

*************************** 1. row ***************************Table: bookNon_unique: 1Key_name: year_publicationSeq_in_index: 1Column_name: year_publicationCollation: ACardinality: 0Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
*************************** 2. row ***************************Table: bookNon_unique: 1Key_name: BkNameIdxSeq_in_index: 1Column_name: booknameCollation: ACardinality: 0Sub_part: 30Packed: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
2 rows in set (0.01 sec)

唯一索引

  • 在book表的bookId字段上建立名称为UniqidIdx 的唯一索引,SQL语句如下:
ALTER TABLE book ADD UNIQUE INDEX UniqidIdx ( bookId );
  • 使用SHOW INDEX语句查看表中的索引:
 SHOW INDEX FROM book \G*************************** 1. row ***************************Table: bookNon_unique: 0Key_name: UniqidIdxSeq_in_index: 1Column_name: bookidCollation: ACardinality: 0Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
*************************** 2. row ***************************Table: bookNon_unique: 1Key_name: year_publicationSeq_in_index: 1Column_name: year_publicationCollation: ACardinality: 0Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
*************************** 3. row ***************************Table: bookNon_unique: 1Key_name: BkNameIdxSeq_in_index: 1Column_name: booknameCollation: ACardinality: 0Sub_part: 30Packed: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
3 rows in set (0.01 sec)

单列索引

  • 在book表的comment字段上建立单列索引,SQL语句如下:
ALTER TABLE book ADD INDEX BkcmtIdx ( comment(50) );
  • 使用SHOW INDEX语句查看表中的索引,看到表格第四排:
SHOW INDEX FROM book \G

查询结果为:

*************************** 4. row ***************************Table: bookNon_unique: 1Key_name: BkcmtIdxSeq_in_index: 1Column_name: commentCollation: ACardinality: 0Sub_part: 50Packed: NULLNull: YESIndex_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
4 rows in set (0.01 sec)

组合索引

  • 在book表的authors和info字段上建立组合索引,SQL语句如下:
ALTER TABLE book ADD INDEX BkAuAndInfoIdx ( authors(20),info(50) ); 
  • 使用SHOW INDEX语句查看表中的索引,看到表格第五、六排:
SHOW INDEX FROM book \G
*************************** 5. row ***************************Table: bookNon_unique: 1Key_name: BkAuAndInfoIdxSeq_in_index: 1Column_name: authorsCollation: ACardinality: 0Sub_part: 20Packed: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
*************************** 6. row ***************************Table: bookNon_unique: 1Key_name: BkAuAndInfoIdxSeq_in_index: 2Column_name: infoCollation: ACardinality: 0Sub_part: 50Packed: NULLNull: YESIndex_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
6 rows in set (0.01 sec)

全文索引

创建表t6,在t6表上使用ALTER TABLE创建全文索引,SQL语句如下:

  • 创建表t6,sql语句如下
CREATE TABLE t6
(
id    INT NOT NULL,
info  CHAR(255)
) ENGINE=MyISAM;

⚠️注意修改ENGINE参数为MyISAM,MySQL默认引擎InnoDB不支持全文索引。

  • 使用ALTER TABLE语句在info字段上创建全文索引:
ALTER TABLE t6 ADD FULLTEXT INDEX infoFTIdx ( info );

使用SHOW INDEX语句查看索引:

 SHOW index from t6 \G*************************** 1. row ***************************Table: t6Non_unique: 1Key_name: infoFTIdxSeq_in_index: 1Column_name: infoCollation: NULLCardinality: NULLSub_part: NULLPacked: NULLNull: YESIndex_type: FULLTEXTComment:
Index_comment:Visible: YESExpression: NULL
1 row in set (0.01 sec)

空间索引

  • 创建表t7,在t7的空间数据类型字段g上创建名称为spatIdx的空间索引
    SQL语句如下:
CREATE TABLE t7 ( g GEOMETRY NOT NULL )ENGINE=MyISAM;
  • 使用ALTER TABLE在表t7的g字段建立空间索引:
ALTER TABLE t7 ADD SPATIAL INDEX spatIdx(g);
Query OK, 0 rows affected, 1 warning (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 1
  • 使用SHOW INDEX语句查看索引:
 SHOW index from t7 \G*************************** 1. row ***************************Table: t7Non_unique: 1Key_name: spatIdxSeq_in_index: 1Column_name: gCollation: ACardinality: NULLSub_part: 32Packed: NULLNull:Index_type: SPATIALComment:
Index_comment:Visible: YESExpression: NULL
1 row in set (0.01 sec)

表创建后使用CREATE INDEX创建索引

  • CREATE INDEX语句可以在已经存在的表上添加索引,MySQL中CREATE INDEX被映射到一个ALTER TABLE语句上
  • 基本语法结构为:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
ON table_name (col_name[length],) [ASC | DESC]

可以看到CREATE INDEX语句和ALTER INDEX语句的语法基本一样,只是关键字不同。

  • 在这里,使用相同的表book,假设该表中没有任何索引值,创建book表语句如下:
CREATE TABLE book
(
bookid          	INT NOT NULL,
bookname        	VARCHAR(255) NOT NULL,
authors           	VARCHAR(255) NOT NULL,
info              	VARCHAR(255) NULL,
comment          	VARCHAR(255) NULL,
year_publication   	YEAR NOT NULL
);

⚠️提示:先可以将该数据库中的book表删除,按上面的语句重新建立,然后进行下面的操作。

普通索引

  • 在book表中的bookname字段上建立名为BkNameIdx的普通索引,SQL语句如下:
CREATE INDEX BkNameIdx ON book(bookname);

语句执行完毕之后,将在book表中创建名称为BkNameIdx的普通索引。

  • 可以使用SHOW INDEX或者SHOW CREATE TABLE语句查看book表中的索引,其索引内容与前面介绍相同。
SHOW INDEX from  book \G 
*************************** 1. row ***************************Table: bookNon_unique: 1Key_name: BkNameIdxSeq_in_index: 1Column_name: booknameCollation: ACardinality: 0Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:
Index_comment:Visible: YESExpression: NULL
1 row in set (0.01 sec)

唯一索引

  • 在book表的bookId字段上建立名称为UniqidIdx 的唯一索引
    SQL语句如下:
CREATE UNIQUE INDEX UniqidIdx  ON book ( bookId );

语句执行完毕之后,将在book表中创建名称为UniqidIdx 的唯一索引。

单列索引

  • 在book表的comment字段上建立单列索引
    SQL语句如下:
CREATE INDEX BkcmtIdx ON book(comment(50) );

语句执行完毕之后,将在book表的comment字段上建立一个名为BkcmtIdx的单列索引,长度为50。

组合索引

  • 在book表的authors和info字段上建立组合索引,SQL语句如下:
CREATE INDEX BkAuAndInfoIdx ON book ( authors(20),info(50) );

语句执行完毕之后,将在book表的authors和info字段上建立了一个名为BkAuAndInfoIdx的组合索引,authors的索引序号为1,长度为20,info的索引序号为2,长度为50。

全文索引

删除表t6,重新建立表t6,在t6表中使用CREATE INDEX语句,在CHAR类型的info字段上创建全文索引
,SQL语句如下:

  • 首先删除表t6,并重新建立该表,分别输入下面语句:
drop table t6;
Query OK, 0 rows affected (0.00 sec)
  • 重新建立表t6
CREATE TABLE t6(id    INT NOT NULL,info  CHAR(255)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)
  • 使用CREATE INDEX在t6表的info字段上创建名称为infoFTIdx的全文索引:
CREATE FULLTEXT INDEX ON t6(info);

语句执行完毕之后,将在t6表中创建名称为infoFTIdx的索引,该索引在info字段上创建,类型为FULLTEXT,允许空值。

空间索引

删除表t7,重新创建表t7,在t7表中使用CREATE INDEX语句,在空间数据类型字段g上创建名称为spatIdx的空间索引,SQL语句如下:

  • 首先删除表t7,并重新建立该表,分别输入下面语句:
 drop table t7;
Query OK, 0 rows affected (0.00 sec)
  • 重新建立表t6
 CREATE TABLE t7 ( g GEOMETRY NOT NULL )ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)
  • 使用CREATE INDEX语句在表t7的g字段建立空间索引,
CREATE SPATIAL INDEX spatIdx ON t7 (g);
Query OK, 0 rows affected, 1 warning (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 1

语句执行完毕之后,将在t7表中创建名称为spatIdx的空间索引,该索引在g字段上创建。

删除索引

MySQL中删除索引使用ALTER TABLE或者DROP INDEX语句,两者可实现相同的功能,DROP INDEX语句在内部被映射到一个ALTER TABLE语句中。

使用ALTER TABLE删除索引

  • ALTER TABLE删除索引的基本语法格式如下:
ALTER TABLE table_name DROP INDEX index_name;

删除book表中的名称为UniqidIdx的唯一索引

  • 首先查看book表中是否有名称为UniqidIdx的索引,输入SHOW语句如下:
 SHOW CREATE table book \G
*************************** 1. row ***************************Table: book
CREATE Table: CREATE TABLE `book` (`bookid` int(11) NOT NULL,`bookname` varchar(255) NOT NULL,`authors` varchar(255) NOT NULL,`info` varchar(255) DEFAULT NULL,`year_publication` year(4) NOT NULL,UNIQUE KEY `UniqidIdx` (`bookid`),KEY `BkNameIdx` (`bookname`),KEY `BkAuAndInfoIdx` (`authors`(20),`info`(50))
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 查询结果可以看到,book表中有名称为UniqidIdx的唯一索引,该索引在bookid字段上创建,下面删除该索引,输入删除语句如下:
 ALTER TABLE book DROP INDEX UniqidIdx;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • 语句执行完毕,使用SHOW语句查看索引是否被删除:
 SHOW CREATE table book \G
*************************** 1. row ***************************Table: book
CREATE Table: CREATE TABLE `book` (`bookid` int(11) NOT NULL,`bookname` varchar(255) NOT NULL,`authors` varchar(255) NOT NULL,`info` varchar(255) DEFAULT NULL,`year_publication` year(4) NOT NULL,KEY `BkNameIdx` (`bookname`),KEY `BkAuAndInfoIdx` (`authors`(20),`info`(50))
) ENGINE=InnoDB DEFAULT CHARSET=utf8

由结果可以看到,book表中已经没有名称为uniqidIdx的唯一索引,删除索引成功。
⚠️注意:添加AUTO_INCREMENT约束字段的唯一索引不能被删除。

使用DROP INDEX语句删除索引

  • DROP INDEX删除索引基本语法格式如下:
DROP INDEX index_name ON table_name;

删除book表中名称为BkAuAndInfoIdx的组合索引

删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。

 DROP INDEX BkAuAndInfoIdx ON book;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • 语句执行完毕,使用SHOW语句查看索引是否被删除:

查询结果如下,book表中已经没有名称为BkAuAndInfoIdx的组合索引,删除索引成功。

 SHOW CREATE table book \G
*************************** 1. row ***************************Table: book
CREATE Table: CREATE TABLE `book` (`bookid` int(11) NOT NULL,`bookname` varchar(255) NOT NULL,`authors` varchar(255) NOT NULL,`info` varchar(255) DEFAULT NULL,`year_publication` year(4) NOT NULL,KEY `BkNameIdx` (`bookname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

本节有关mysql数据表的索引练习题目已经讲述完,明天再见啦!!
😆 欢迎查看主页 【练小杰的CSDN】
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!


http://www.mrgr.cn/news/82938.html

相关文章:

  • 加速科技荣获“浙江省企业研究院”认定
  • Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)
  • OSPF - LSA对照表
  • 【UE5 C++课程系列笔记】23——多线程基础——AsyncTask
  • 图神经网络(GNN)中的两个问题
  • 深入浅出Node.js-1(node.js入门)
  • 前端 动图方案
  • C#—Task异步的常用方法及TaskFactory工厂类详解
  • ELK实战(最详细)
  • cuda实现flash_attn_mma_share_kv源码分析
  • 用VS C#构建Windows服务【纯操作版,附带项目地址】
  • [开源]自动化定位建图系统
  • A/B实验之置信检验(一):如何避免误判 (I类) 和漏报 (II类)
  • 137. 只出现一次的数字 II
  • 【Rust自学】10.8. 生命周期 Pt.4:方法定义中的生命周期标注与静态生命周期
  • 9. C 语言 循环控制结构详解
  • 数据传送类指令
  • 【Linux】上传、下载、压缩、解压
  • Python 模拟登录网页,或者编写爬虫时模拟登录的详细总结
  • 【Rust自学】10.7. 生命周期 Pt.3:输入输出生命周期与3规则
  • 30天开发操作系统 第 12 天 -- 定时器
  • Java虚拟机面试题:JVM调优
  • [创业之路-241]:《从偶然到必然-华为研发投资与管理实践》-2- IPD流程中的业务线、技术线、职能支撑线
  • Web渗透测试之XSS跨站脚本 原理 出现的原因 出现的位置 测试的方法 危害 防御手段 面试题 一篇文章给你说的明明白白
  • Effective C++读书笔记——item11(自赋值)
  • 来说数据库