Mysql---学习笔记

----个人学习记录

mysql配置:
1)加载 MySQL 服务,注意之前安装 MySQL 已经加载过 MySQL 服务,为了防止冲突,需要区分: 命令 : mysqld install 分区的mysql号

2)utf8和 utf8mb4的区别 utf8mb4支持4字节编码,所以utf8mb4字符集更大更全面,相对应消耗的空间也更大,一般utf8基本可以满足使用,但utf8mb4支持更广泛的字符范围,性能和安全方面更优3) MySQL 没有开启 binlog 日志的时候,误删除是几乎无法恢复的,所以建议在删除数据库之前做好备份
4)第一范式(1NF):表中字段不可再分则满足1NF
第二范式(2NF): 满足1NF,表中的字段必须完全依赖于全部主键而非部分主键
第三范式(3NF): 满足2NF,非主键外的所有字段必须互不依赖
4NF:满足3NF,消除表中的多值依赖

5) Between 必须与 And 一起使用,如果范围条件是连续的,优先考虑使用 Between,不仅语句更为简洁,而且性能更加优异

6)Union 在合并两个结果集时,默认地去掉了重复值, 这个过程是较为耗时的,如果非必需情况,可使用 Union All。 我们需要保留重复的记录时,就需要使用 Union All

7) Check 可以直接在创建数据表时给字段加上约束。

8)MySQL中不支持 FULL JOIN(全外连接),可以使用sql server测试全外连接 ,SQLite 不支持右连接和全连接

9)SQL SELECT INTO 语句可用于创建表的备份 SELECT [col] INTO [new_table_name] FROM [table_name]; Mysql不支持select into,可以使用create from代替

10)Where 无法与聚合函数一起搭配使用,因此 SQL 增加Having 指令
Having 局限于聚合函数,它无法使用在其它场景下
* WHERE 子句作用于表和视图
* HAVING 子句作用于组。聚合后对组记录查询

11)子查询
在这里插入图片描述

12)事务 :mysql的 InnoDB引擎支持事务,但 原生的 MyISAM 引擎就不支持事务

	1. 脏读:读到了其它事务还未提交的数据;
	2. 不可重复读:两次读到了同一数据的不同结果;
	3. 幻读:读到了其它事务新增但未提交的数据,而且新增数据并未成功。

在这里插入图片描述

13)索引:
#创建索引 CREATE INDEX [index_name] ON table_name;
#删除索引 DROP INDEX [index_name] ON [table_name];
注意:当查询使用联合索引里单个字段时,不一定会走联合索引,只有使用了联合索引中的第一个字段,才会走联合索引,否则还是全表查询

14)显示使用索引
MySQL 支持 Force Index,其它数据库不支持 如:
SELECT * FROM imooc_user FORCE INDEX(username_index) WHERE username = ‘pedro’;

其他):视图:
当数据量很大的时候,百万级甚至千万级数据时,尽量避免使用视图,因为视图可能使用了连接、子查询、函数、排序等操作,会严重拖慢查询的时间,导出数据时,会比同数据量的常规表慢很几十倍,如果必须使用视图,可以通过加索引、优化sql语句的方式优化一下;

15)转换函数
在这里插入图片描述

16)sql注入措施
a)参数校验,判断参数的正确性,拦截非法参数
b)sql预处理(prepare)
Prepare 会先将 SQL 模板传递给 SQL 引擎,SQL 引擎拿到 SQL 模板后,会编译模板生成相应的SQL执行计划,此时 SQL 已经被编译了,则传递过来的值只会当做参数处理,不会再被解析

PREPARE:预定义sql语句模版   
SET:定义sql参数   
EXECUTE:指令携带sql参数执行sql模板   
  
PREPARE finduserbyidstm FROM 'SELECT * FROM imooc_user WHERE id = ?';        
SET @id = 1;       
EXECUTE finduserbyidstm USING @id;       

17)强外键和弱外键
表之间的foreign_key就是强外键,要不都有,要么都没有,但是由于会同步检测好几张表,会拉低数据库性能
强外键是数据库层面上的外键,而弱外键是逻辑层面的上的外键,逻辑上知道是对应关系

18)sql语句优化
a)工具:soar小米开源的sql优化和改写工具,会给所写的sql语句打分、给出安全等级,和提供优化建议:soar在windows下的安装和使用
mysql查询慢的原因和优化参考
b)mysql的explain,explain后面跟上sql语句即可

在这里插入图片描述
explain的解释使用

SQL 优化的落脚点其实就是使用索引,索引能够大幅加快查询速度,提高性能


19)mysql中int类型和varchar类型的检索性能

  • int类型所占的空间小,而且对int类型的查找,mysql是二进制比较,所以查询速度很快。
  • varchar类型所占空间大,查询时mysql会将varchar列转为字符串在进行检索,所以相对较慢,但现在数据库的字符串技术很成熟,查询速度也很快。
  • 当分别对int和varchar类型进行模糊查询时,varchar类型更快,因为int模糊查询时还需要转成varchar类型来对比。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值