MySQL学习笔记(狂神说Java)
MySQL
- 1、初识MySQL
- 1.1为什么学数据库
- 1.2什么是数据库
- 1.3数据库分类
- 1.4MySQL简介
- 1.5连接数据库
- 2、操作数据库
- 2.1操作数据库
- 2.2数据库的列类型
- 2.3数据库的字段类型(重点)
- 2.4创建数据库
- 2.5数据表的类型
- 2.6修改删除表
- 3.MYSQL数据管理
- 4.DQL查询数据(最重点)
- 6.事务
- 7.索引
- 7.1索引的分类
- 7.2 测试索引
- 7.索引的原则
- 8.权限管理和备份
- 9.规范数据库设计
- 10.JDBC(重点)
1、初识MySQL
JavaEE:企业级Java开发 Web
前端(页面:展示:数据)
后台 (连接点:连接数据库JDBC,连接前端(控制视图跳转,给前端传递数据))
数据库(存数据,Txt,Excel,Word)
只会写代码,学好数据库,
操作系统,数据结构与算法,–>不错的程序员
离散数学,数字电路,体系结构,编译原理+实战经验,高级程序猿
1.1为什么学数据库
岗位需求
现在的世界,大数据时代,得数据者得天下
被迫需求:存数据
数据库是所有软件体系中最核心的存在 DBA
1.2什么是数据库
数据库:(DB,DataBase)
概念:数据仓库,软件,安装在操作系统之(windows,Linux。mac)上的!SQL,可以存储大量的数据,500万!
作用:存储数据,管理数据 Excel
1.3数据库分类
关系型数据库:(SQL)
- MySQL, Oracle, sql Server, DB2, SQLite
- 通过表和表之间,行和列之间的关系进行数据的存储
非关系型数据库:(NoSQL) Not Only SQL
- Redis, MongDB
- 非关系型数据库,对象存储,通过对象自身的属性来决定。
DBMS(数据库管理系统)
数据库的管理软件,科学有效的管理我们的数据,维护和获取
MySQL ,数据管理系统!
1.4MySQL简介
MySQL是一个关系型数据库管理系统
前世: 瑞典MySQL AB 公司
今身: 属于Oracle 旗下产品
MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
开源的数据库软件
体积小,速度快,总体拥有成本低,招人成本比较低。
中小型网站,或者大型网站,集群
官网: https://www.mysql.com/
1.5连接数据库
命令行连接!
mysql -u root -p123456 --连接数据库update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost'; --修改密码flush privileges;--刷新权限
--------------------------------------------------
--所有语句使用;结尾--show databases;--查看所有的数据库mysql> use school--切换数据库, use 数据库名
Database changed--show tables;--查看数据库中所有的表
describe student;--显示数据库中所有的表的信息
create database westos;--创建一个数据库exit;--退出连接--单行注释(sql本来注释)
/*
多行注释
*/
2、操作数据库
操作数据库》操作数据库中的表》操作数据库中表的数据
2.1操作数据库
- 创建数据库
CREATE DATABASE IF NOT EXISTS westos;
2.删除数据库
DROP DATABASE IF EXISTS westos;
3.使用数据库
-- ``,如果你的表名或者字段名是一个特殊字符,需要带``USE 'school'
4.查看数据库
SHOW DATABASES--查看所有数据库
2.2数据库的列类型
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小 3个字节
- int 标准的整数 4个字节(常用)
- bigint 较大的数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节 (精度问题)
- decimal 字符串形式的浮点数,金融计算的时候,一般用
字符串
- char 字符串固定大小 0-255
- varchar 可变字符串 0-65535(常用)
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 (保存大文本)
时间日期
java.util.Date
- date YYYY-MM-DD,日期
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
- timestamp 时间戳 1970.1.1到现在的毫秒数
- year 年份表示
nulll
- 没有值,未知
- 注意,不要使用null进行运算,结果为null
2.3数据库的字段类型(重点)
unsigened:
- 无符号的整数
- 声明该列不能声明负数
zerofill:
- 0填充的
- 10的长度 1 – 0000000001 不足位数用0 填充
自增:
- 通常理解为自增,自动在上一条记录的基础上+1
- 通常用来设计唯一的主键 index,必须是整数类似
- 可以自定义设置主键自增的起始值和步长
非空 NULL not Null
- 假设设置为 not null,如何不给他赋值,就会报错
- NULL 如果不填写,默认为NULL
默认:
- 设置默认的值!
2.4创建数据库
--目标:创建一个schoo1数据库--创建学生表(列,字段)使用SQL 创建--学号int 登录密码varchar(20)姓名,性别varchar(2),出生日期(datatime),家庭住址,emai1--注意点,使用英文(),表的名称和字段尽量使用括起来-- AUTO_ INCREMENT 自增--字符串使用单引号括起来!--所有的语句后面加,(英文的),最后一个不用加-- PRIMARY KEY 主键,一般- 一个表只有一个唯一 -的主键!
CREATE DATABASE school
CREATE TABLE IF NOT EXISTS `student1` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
格式
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型[属性][索引][注释],
`字段名` 列类型[属性][索引][注释],
...
`字段名` 列类型[属性][索引][注释]
)[表类型][表的字符集设置][注释]
常用命令
SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看student数据表的定义语句
DESC student -- 显示表的结构
2.5数据表的类型
-- 关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用*/
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为MYISAM的两倍 |
常规使用操作:
- MYISAM 节约空间,速度较快,
- INNODB 安全性高,事务处理,多表多用户操作
在物理空间存在的位置
- 所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库
- 本质还是文件的存储
MySQL 引擎在物理文件上的区别
- innoDB 在数据库表中,只有一个*.frm文件,以及上级目录下的ibdata1文件
- MYISAM 对应的文件
- *.frm - 表结构的定义文件
- *. MYD -数据文件
- *.MYI 索引文件
设置数据库字符集编码
CHARTSET=UTF8
不设置的话,会是mysql默认的字符集编码-(不支持中文)
可以在my.ini中配置默认的编码
character-set-server=utf8
2.6修改删除表
修改
-- 修改表名 ALTER TABLE 旧表面 AS 新表名
ALTER TABLE student RENAME AS student1
-- 增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE student1 ADD age INT(11)
-- 修改表的字段(重命名,修改约束)
ALTER TABLE student1 MODIFY age VARCHAR(11) -- 修改约束
ALTER TABLE student1 CHANGE age age1 INT(1) -- 字段重命名-- 删除表的字段
ALTER TABLE student1 DROP age1
删除
-- 删除表
DROP TABLE IF EXISTS student1
所有的创建和删除操作尽量加上判断,以免报错
注意点:
- `` 字段名,使用这个 飘
- 注释 - - /**/
- sql 关键字大小写不敏感,建议写小写
- 所有的符号全部用英文
3.MYSQL数据管理
4.DQL查询数据(最重点)
6.事务
7.索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
7.1索引的分类
在一个表中,主键索引只能有一个,唯一索引可以有多个
- 主键索引 (PRIMARY KEY)
- 唯一的标识,主键不可重复,只能有一个列作为主键
- 唯一索引 (UNIQUE KEY)
- 避免重复的列出现,唯一索引可以重复,多个列都可以标识唯一索引
- 常规索引(KEY/INDEX)
- 默认的,index,key关键字来设置
- 全文索引(FULLTEXT)
- 在特点的数据库引擎下才有,MyISAM
- 快速定位数据
-- 索引的使用
-- 1.在创建表的时候给字段增加索引
-- 2.创建完毕后,增加索引-- 显示所有的索引信息
SHOW INDEX FROM 表-- 增加一个索引
ALTER TABLE 表 ADD FULLTEXT INDEX 索引名(字段名)-- EXPLAIN 分析sql执行状况
EXPLAIN SELECT * FROM student -- 非全文索引
7.2 测试索引
CREATE TABLE `app_user` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) DEFAULT '',
`email` VARCHAR(50) NOT NULL,
`phone` VARCHAR(20) DEFAULT '',
`gender` TINYINT(4) UNSIGNED DEFAULT '0',
`password` VARCHAR(100) NOT NULL DEFAULT '',
`age` TINYINT(4) DEFAULT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8-- 插入100万数据
DELIMITER $$ -- 写函数之前必写
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;WHILE i<num DO
-- 插入语句
INSERT INTO app_user(`name`,`email`,`phone`,`gender`,`password`,`age`)
VALUE(CONCAT('用户',i),'534240118@qq.com',FLOOR (CONCAT('18',RAND()*9999999)),FLOOR (RAND()*2),
UUID(),FLOOR (RAND()*100));SET i = i+1;
END WHILE;
RETURN i;END;INSERT INTO app_user(`name`,`email`,`phone`,`gender`,`password`,`age`)
VALUE(CONCAT('用户',i),'534240118@qq.com',FLOOR (CONCAT('18',RAND()*9999999)),FLOOR (RAND()*2),
UUID(),FLOOR (RAND()*100))SELECT mock_data();SELECT * FROM app_user WHERE `name`='用户9999' -- 接近1秒EXPLAIN SELECT * FROM app_user WHERE `name`='用户9999' -- 查询99999条记录-- id _ 表名_字段名
-- create index on 字段
CREATE INDEX id_app_user_name ON app_user(`name`); -- 0.001 s
EXPLAIN SELECT * FROM app_user WHERE `name`='用户9999' -- 查询一条记录
100万条数据不加索引
加了索引之后:
总结:索引在小数据的时候,用处不大,但是在大数据的时候,区别十分明显
7.索引的原则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表不需要加索引
- 索引一般加在常用来查询的字段上
索引的数据结构
Hash 类型的索引
Btree: 默认innodb 的数据结构
阅读: http://blog.codinglabs.org/articles/theory-of-mysql-index.html
面试题:索引的优缺点:
- 索引的优点:
大大加快数据的检索速度
创建唯一性索引,保证数据库表中的每一行数据的唯一性
加速表和表之间的连接
在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
- 索引的缺点:
- 索引文件本身要消耗空间,
- 同时索引会加重插入、删除和修改记录时的负担,另外 MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好
。
不建议用索引:
1、以2000作为分界线。
2、索引的选择性较低
SELECT count(DISTINCT(title))/count(*) AS Selectivity FROM employees.titles;
+-------------+
| Selectivity |
+-------------+
| 0.0000 |
+-------------+
title的选择性不足0.0001(精确值为0.00001579),所以实在没有什么必要为其单独建索引。
InnoDB使用聚集索引,数据记录本身被存于主索引(一颗B+ Tree)的叶子节点上。
这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)。
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如下图所示:
尽量在InnoDB上采用自增字段做主键
面试题2·给一个sql从哪些方面考虑优化查询效率
第一方面:30种mysql优化sql语句查询的方法
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by涉及的列上建立索引。
应尽量避免在 where 子句中使用 !=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
3.应尽量避免在 where 子句中对字段进行== null 值 判断==,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4.应尽量避免在 where 子句中使用== or== 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’
对于 like ‘…%’ (不以 % 开头),可以应用 colunm上的index
http://6.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
7.如果在== where 子句中使用参数==,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num
8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=‘abc’–name以abc开头的id
select id from t where datediff(day,createdate,‘2005-11-30’)=0–'2005-11-30’生成的id
应改为:
select id from t where name like ‘abc%’
select id from t where createdate>=‘2005-11-30’ and createdate<‘2005-12-1’
10.不要在 where 子句中的==“=”【左边】进行函数、算术运算或其他表达式运算==,否则系统将可能无法正确使用索引。
11.在使用索引字段作为条件时,如果该索引是【复合索引】,那么必须使用到该索引中的【第一个字段】作为条件时才能保证系统使用该索引,否则该索引将不会被使用。并且应【尽可能】的让字段顺序与索引顺序相一致。(字段顺序也可以不与索引顺序一致,但是一定要包含【第一个字段】。)
12.不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(…)
13.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
14. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
15.索引并不是越多越好,索引固然可以提高相应的 select 的效率==,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。
17.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
19.任何地方不要使用 select * from t,**用具体的字段列表代替“*”,**不要返回用不到的任何字段。
20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。
21.避免频繁创建和删除临时表,以减少系统表资源的消耗。
22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。
23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。
29.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
30.尽量避免大事务操作,提高系统并发能力。
上面有几句写的有问题。
第二方面:
select Count (*)和Select Count(1)以及Select Count(column)区别
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的
假如表沒有主键(Primary key), 那么**count(1)比count()快*,
如果有主键的話,那主键作为count的条件时候*count(主键)*最快
如果你的表只有一个字段的话那**count(*)**就是最快的
count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,
而count(column) 是不包括NULL的统计
第三方面:
索引列上计算引起的索引失效及优化措施以及注意事项
创建索引、优化查询以便达到更好的查询优化效果。
但实际上,MySQL有时并不按我们设计的那样执行查询。
MySQL是根据统计信息来生成执行计划的,这就涉及索引及索引的刷选率,表数据量,还有一些额外的因素。
当MYSQL认为符合条件的记录在30%以上,它就不会再使用索引,因为mysql认为走索引的代价比不用索引代价大,所以优化器选择了自己认为代价最小的方式。事实也的确如此
是MYSQL认为记录是30%以上,而不是实际MYSQL去查完再决定的。都查完了,还用什么索引啊?!
MYSQL会先估算,然后决定是否使用索引。
8.权限管理和备份
9.规范数据库设计
10.JDBC(重点)
MySQL学习笔记(狂神说Java)相关推荐
- Java入门学习笔记[狂神说Java]
写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...
- spring学习笔记(狂神说Java笔记)
一.IOC本质 控制反转loC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一-种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中,我们使用 ...
- MySQL学习Day01(狂神说Java)
文章目录 1.初识mysql 1.1 为什么学习数据库 1.2 什么是数据库 1.3 数据库分类 1.4 MYSQL简介 1.5 安装MySQL 1.6 安装SQLyog 1.7 连接数据库 1.初识 ...
- MySQL学习笔记8:权限管理、数据库备份与设计
1.前言 学习视频源自:[狂神说Java]MySQL最新教程通俗易懂 B站视频链接:https://www.bilibili.com/video/BV1NJ411J79W [狂神说Java]MySQL ...
- MySQL学习笔记-恶补基础篇
目录 概述 1.初识数据库 1.1.DataBase 1.2.数据库分类 1.3.DBMS(数据库管理系统) 1.4.命令行操作数据库 2.操作数据库 2.1.操作数据库 2.2.数据库列类型 2.3 ...
- MySQL学习笔记-基础篇1
MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...
- 小白终是踏上了这条不归路----小文的mysql学习笔记(1)
**这里真的是一个大佬云集的地方,作为刚刚学习的小白来这里向各位大佬取经,这是学习的时候做的笔记,有什么不对的地方还请兄弟们斧正.卑微小白终究是踏上了这条不归路阿,如果这篇笔记能给你带来帮助,还请大哥 ...
- 小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数
** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...
- MySQL 学习笔记②
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...
- 实用篇 | MySQL 学习笔记
实用篇 | MySQL 学习笔记 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management S ...
最新文章
- centos修改mysql密码_WAMP下修改MYSQL数据库密码
- 自动化运维工具Saltstack详细介绍
- 《黑天鹅》读书笔记(part3)--那些声称注重过程而非结果的人并没有完全讲真话
- 【蓝桥杯嵌入式】【STM32】5_IICEEPROM之软件模拟IIC
- Linux集中日志服务器rsyslog(亲测)
- 微信小程序开发资料汇总
- 谈谈数值分析中的插值(截断)误差,以牛顿法为例
- Javascript:通过服务器相对路径下载文件到本地
- pta 计算圆周率(C语言实现)
- html+上下标+遇乘号无效,html中的特殊符号
- Delphi开发工具的使用
- 计算机房等电位连接,《计算机房屏蔽及等电位防护措施原稿2021版》
- 分享一些免费的网站速度测试工具
- 11.1.5 线程与主线程UI界面交互(友元类)
- 免费天气api 真正可用
- 红米手机5 Plus启用root超级权限的步骤
- 【LabVIEW小技巧】LabVIEW自定义系统按钮时图片项设置说明
- Google退出Android有影响吗?
- 集群服务器上的jupyter配置
- 游客丽江住店被蚊子咬醒 前台:养的宠物 死1只赔100