文字编写时间: 2022-05-08 17:53 (如下内容为本人工作中总结,只是现在才放到博客上,欢迎大家查阅)
1. MySql函数 http://www.baidu.com/index.php?tn=mswin_oem_dg
2. 查询数据库中所有表
SELECT * FROM information_schema.tables WHERE table_schema='数据库名称';
3. 数据库所占空间
SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,CONCAT ( TRUNCATE ( SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_sizeFROM information_schema.tables WHERE TABLE_SCHEMA = '数据库名';
4. 查询表空间使用情况
SELECT '01',CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,CONCAT (TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_sizeFROM information_schema.tables WHERE TABLE_NAME = '表名';
5. 查询表字段并合并
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='表名';
6. 查看分区
查看分区对应的表:INFORMATION_SCHEMA. PARTITIONS查看表具体分区数据量SELECT PARTITION_NAME,TABLE_ROWS,a.index_length,a.data_length,a.* FROM INFORMATION_SCHEMA.
mysql执行计划 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。
可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。
官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html
1、执行计划中包含的信息 Column Meaning id The SELECT identifier select_type The SELECT type table The table for the output row partitions The matching partitions type The join type possible_keys The possible indexes to choose key The index actually chosen key_len The length of the chosen key ref The columns compared to the index rows Estimate of rows to be examined filtered Percentage of rows filtered by table condition extra Additional information id
信号:
一个发出而没有被接收的信号叫做待处理信号,任何时刻,一种类型至多只能发送一个待处理信号。
一个进程有类型为k的待处理信号,那么任何后续发送到这个进程的类型为k的信号都不会排队等待,只是简单的被丢弃。
一个进程可以有选择地阻塞接收某个某种信号,当信号没阻塞时,仍可以被发送,但是产生的待处理信号不会被接收,直到进程取消对这个信号的阻塞。
进程描述符的pending位向量维护着待处理信号集合。
blocked位向量维护着被阻塞的信号集合。
传送了类型为k的信号,内核就会设置pending中的第k位。
只要接收了类型为k的信号,内核就会清楚pending中的第k位。
1、参考 Windows下文件夹映射的实现(将文件夹从一个盘映射到另一个盘) 打开 CMD(命令提示符),执行如下命令:
mklink /j link target
1.下载
没有在官网找到4.0.6的下载页面,只能用这种方式去下载了
进入linux,执行此命令下载,我实在/home目录下下载的,因为空间比较大……
下载地址:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.6.tgz 2.解压
把整个解压后的文件,移动到指定文件夹。 .配置conf与目录 创建db目录和日志文件 创建mongodb.conf文件 #端口号 port=27017 #db目录 dbpath=/usr/local/mongodb/data/db #日志目录 logpath=//usr/local/mongodb/logs/mongodb.log #后台 fork=true #日志输出 logappend=true #允许远程IP连接 bind_ip=0.0.0.0 4.启动测试 启动
连接
测试
测试没问题
添加环境变量 添加红框内的东西
改完配置,使配置文件生效
完事。
完事。
1. 合理使用范式和反范式 MySQL的三范式: 1NF(第一范式):字段不可分; 2NF(第二范式):有主键,非主键字段依赖主键; 3NF(第三范式):非主键字段不能相互依赖;
解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物; 3NF:每列都与主键有直接关系,不存在传递依赖;
在企业中很难能做到严格意义上的范式或者反范式,一般需要混合使用
范式设计和反范式设计的案例:
订单表如果完全按照范式设计,查询订单对应的用户信息时,会用到很多联合查询;如果用反范式设计,会明显提高查询效率。
2. 主键的选择 代理主键:与业务无关的,无意义的数字序列,比如:id
自然主键:事物属性中的自然唯一标识,比如:身份证号
推荐使用代理主键:
它们不与业务耦合,因此更容易维护 一个大多数表,最好是全部表,通用的键策略能够减少需要编写的源码数量,减少系统的总体拥有成本 3. 字符集的选择 mysql字符集
纯拉丁字符能表示的内容,没必要选择 latin1 之外的其他字符编码,因为这会节省大量的存储空间。mysql默认是latin1。 如果我们可以确定不需要存放多种语言,就没必要非得使用UTF8或者其他UNICODE字符类型,这回造成大量的存储空间浪费。 MySQL的数据类型可以精确到字段,所以当我们需要大型数据库中存放多字节数据的时候,可以通过对不同表不同字段使用不同的数据类型来较大程度减小数据存储量,进而降低 IO 操作次数并提高缓存命中率。 如果不存储中文,用latin1就足够了;如果要存储中文,就用utf8mb4。utf8mb4是一种最常用的方式。 4. 存储引擎的选择 mysql默认存储引擎是InnoDB
5. 适当的数据冗余 被频繁引用且只能通过 Join 2张(或者更多)大表的方式才能得到的独立字段。 这样的场景由于每次Join仅仅只是为了取得某个小字段的值,Join到的记录又大,会造成大量不必要的 IO,完全可以通过空间换取时间的方式来优化。不过,冗余的同时需要确保数据的一致性不会遭到破坏,确保更新的同时冗余字段也被更新。 6. 适当拆分 当我们的表中存在类似于 TEXT 或者是很大的 VARCHAR类型的大字段的时候,如果我们大部分访问这张表的时候都不需要这个字段,我们就该义无反顾的将其拆分到另外的独立表中,以减少常用数据所占用的存储空间。这样做的一个明显好处就是每个数据块中可以存储的数据条数可以大大增加,既减少物理 IO 次数,也能大大提高内存中的缓存命中率。
3.4 更新文档
MongoDB通过update函数与save函数来更新集合中的文档。
3.4.1 update函数
update() 函数用于更新已存在的文档。
语法格式:
db.集合名称.update(
<query>,
<update>,
< upsert:boolean>,
< multi:boolean>
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符等,也可以理解为sql update查询内set后面的。
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入这个document,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
首先插入一条文档数据:
db.col.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '北京尚学堂',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
查看插入结果:
在MongoDB中的update是有两种更新方式,一种是覆盖更新,一种是表达式更新。
覆盖更新:顾名思义,就是通过某条件,将新文档覆盖原有文档。
表达式更新:这种更新方式是通过表达式来实现复杂更新操作,如:字段更新、数值计算、数组操作、字段名修改等。
(一) 覆盖更新
DQL中的函数 4.1 单行函数 函数都是数据库提前给我们准备好的,所以我们可以直接调用,使用函数可以让指定的列计算出我们需要的数据
单行函数 : 指的是操作一行数据返回一行数据,操作10行数据返回10行数据
字符串函数 -- 长度 - select ename,length(ename) from emp; -- 截取 - select ename,SUBSTR(ename,1,3) from emp; - select * from emp where substr(ename,5,1)='S'; -- 大小写 - select ename, upper(ename),lower(ename) from emp; -- 拼接 - select CONCAT(empno,'=',ename) from emp; -- 替换 - select ename,REPLACE(ename,'T','—') from emp 日期函数 -- 获取当前系统时间 - select hiredate,sysdate() from emp; - select hiredate,CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP() from emp; -- 日期转换 - select DATE_FORMAT(sysdate(),'%Y-%m-%d %H:%i:%s') - select hiredate, date_format(now(),'%Y年%m月%d日 %H时%i分%s秒') from emp; -- 分别获取 年月日 时分秒 星期 - select - SECOND MINUTE HOUR DAY WEEK MONTH YEAR -- 日期的加减操作 - select hiredate,ADDDATE(hiredate,9),ADDDATE(hiredate,-9) from emp; - select DATE('2022-05-02') ; 数字函数 -- 向上取整 向下取整 - select ceil(12,1),floor(12.
ubuntu 20.04系统安装后的优化-
1. 修改系统语言和输入法
1.1 在设置页面,区域与语言选项,添加语言为“汉语”
设置输入法为汉语拼音
然后重新logout当前用户,在次开启ubuntu即可;
2. 修改镜像源,可参考前面的博客
博客地址:https://www.cnblogs.com/icmzn/p/16244664.html
3. 更新flash问题
FireFox打开b站提示未安装flash,实际上是没有安装播放器或者播放器出了问题 确定包都更新过了以后
执行以下命令:
sudo apt install vlc 参考博客:
https://blog.csdn.net/weixin_45695709/article/details/123513230
表的关联关系
一对一关联
举例:设计学生表,拆为两个表:基础信息表,档案信息表。
一对多关系
举例:客户表和订单表;分类表和商品表;部门表和员工表
多对多关系
举例1:学生信息表,课程信息表,选课信息表(连接表)
举例2:产品表,订单表,订单明细表(连接表)
自我引用