MySQL——知识点集锦

MySQL:
配置文件:
/etc/mt.cnf

服务端将mysqld进程放到内存中执行,就是启动了MySQL服务

上层:server层
	1.连接层:
		1)检查客户端请求是否合法
		2)确定连接协议(TCP/IP,进程间通信)
		3)创建一个线程和客户端通信
	2.SQL层:处理sql语句:
		1)语法检测;
		2)语义检查(权限);
		3)解析预处理
		4)优化器:选择最优方案并执行
		告诉存储引擎,应该在磁盘上哪个地方取数据
	3.查询缓存:当页表来理解
		1)记录日志:记录修改记录
		
下层:引擎层(存储引擎)(Linux的文件系统)

逻辑结构:库(相当于Linux目录) -- 表(相当于Linux文件)
	磁盘:扇区 -> block -> 页 -> 区 -> 段
		扇区大小:512B
		block:4K
		页:将连续的若干个block组成一页--16K
		区:连续的64页组成一个区 -- 1M
		段:将若干个可能连续的区组成一个段
	MySQL中的表由段组成
	
	
DDL 定义数据库
DML 表的增、删、改、查	
	DQL:数据库查询语言
DCL 数据库控制
	
字符集:默认utf8
字符校验规则:


数据库基本操作:
	创建:
		create database db_name charset=utf8;
	修改:
		alter database ...
	查找:
		查看系统有哪些数据库:
			show databases;
		查看一个数据库的创建信息:
			show create database db_name;
	删除:
		drop database db_name;
	备份:
		mysqldump -P3306 -uroot -p[密码] shop > shop.sql

表的基本操作:
	创建:
		create table 表名(列)engine,charset
	查看:
		desc 表名
		show tables
	修改:
		alter table 表名 ADD/MODIFY/drop 
		alter table 表名 rename to 新名
	删除:
		drop table 表名
		
数据类型:
	bit(n):n取值1~64,默认1;显示的是ASCII码
	float(M,D):M表示总长度,D表示小数位数,需要注意的是,float值精确到小数后7bit
	decimal(M,D):用法和float相同,但是精确度高,65bit
	char(n):n最大255,单位是字符
	varchar(n):n的最大值和表的编码相关
		最大65535字节,varchar会用前若干个字节表示数据的长度
		当存储的字符串长度小于255字节时,其需要1字节的空间,当大于255字节时,需要2字节的空间。
		比如汉字utf8下是3B,所以最大能容纳的汉字数目就是
		(65535-3)/ 3 = 21844 n最大就是21844
		GBK:汉字是2B,65532 / 2 = 32766 n最大就是32766
	InnoDB规定一个varchar大小不要超过767B;如果数据流量过大,会变成Text类型
	MySQL中规定一行个字段的大小之和不能超过	65536B
	日期和时间:date,datetime(后者包含时分秒),timestamp(当前时间时间戳)
	enum和set:
	
表的约束:
	1.空属性:在列后面加上 not null
	2.默认值:default 值,都是在列后
	3.列描述:commit 描述,相当于注释,相比较于--,
		它是存储在创建表的代码中的
	4.zerofill:占位不够,前面自动补0
	5.主键:primary key  不重复,不为空
		在最后写时,可以使用复合主键
		create table test(
			id int,
			name varchar(10),
			primary key(id)	--这里就可以写复合主键
		);
	6.auto_increment:自增长,每执行一次插入操作(无论失败还是成功),
					它就加1,
		delete也不会影响此约束,因为delete没有真正从磁盘上把数据删除
		但是truncate会真正删除
	7.unique:唯一键,不能重复,unique key
	8.foreign key:外键,建立两个表之间的联系
		create table class(
			id int primary key,
			name varchar(10) not null,
		);
		create table stu(
			id int primary key,
			name varchar(10) not null,
			cid int,
			foreign key(cid) references class
		);
操作表:
	1.插入:
		1)insert into 表名 values (...),(...);
		--利用‘,’隔开,进行多条插入
		2)插入时更新
			insert into 表名 values (...) 
			on duplicate key update 列1 = ..., 列2 = ...;
		3)替换
			replace into 表名 values(...)
	2.查询:
		select 
		1)去重 distinct (整行相同),all(不去重,默认)
		from
		where
		1)比较 > >= < <= !=  <>
		2)like 模糊查询
			% -- 匹配多个 / 0个 写在后面不要写在前面,否则不走索引
			_ -- 匹配一个
			like只能用于字符类型,不能用于数字
		3)逻辑运算 and or
		4)between ... and ...	闭区间
		5)in 
		group by
		1)必须要和聚合函数结合使用,max、min、avg、count、sum
		2)a.取出表中的列
		   b.按照分组列进行排序
		   c.去重
		   d.把剩下的列通过聚合函数变成一行
		having
		order by
		1)asc 升序	-- 默认
		2)desc 降序
		limit
		1)limit n 		--前n行
		2)limit s,n 	--从s行开始,前n行
		
	内连接:
		select * from A (inner) join B on 条件;
		A 交 B
	外连接:
		select *from A left join B 
		A
		select * from A right join B
		B
MySQL的索引:
	1.聚簇索引
		构建聚簇索引的前提:
			1)设置了主键列 -- 主键列就是聚簇索引
			2)没有主键列,选择唯一索引的列作为聚簇索引
			3)前两者都没有,MySQL会自动增加一列作为聚簇索引列
		作用:
			1)在存放数据时,会按照聚簇索引进行排序放到磁盘上
	2.辅助索引:
		将经常作为查询条件的列设置成辅助索引,需要手动添加
		1)在建表的最后加上 index(列名)
		2)alter table 表名 add index(列)
		3)create index 索引名 on 表名(列)
	3.单列索引和联合索引:
		如果是联合索引,查询时的最左原则:
		eg:
			alter table test add index(a,b,c);
		--走索引	
			select * from test where a=xxx;
			select * from test where a=xxx and b=xxx;
			select * from test where a... b... c...;
			select * from test where c,b,a;		--会被优化器优化成a,b,c
		--不走索引	
			select * from test where b,c;
	4.查看索引:
		desc 表名;
		show index from 表名;
	原则:
		1.经常在where后作为查询条件的列
		2.列的数据尽可能地不要重复
		3.索引不是建地越多越好,因为会消耗磁盘空间
	5.查看查询是否走索引
		explain + 查询语句
		在type那一列可以得到结果:
			all -- 全表扫描,
				1)不加where;
				2)like “%..”都是不走索引
				3)not in (...) 不是主键列时,不走索引
			ref -- 走索引
			index  		< 	range 	< 	ref 	< 	eq_ref 		< 	const	效率依次变高
			全索引扫描	  范围查找	  等值查询   多表驱动表是主键    聚簇索引等值查询
		
事务:
	开启事务:
		1.begin 
		2.start transaction
	保存节点
		savepoint 节点名称
		...
	事务回滚
		rollback 节点名称	(不写名称就回滚到begin的位置)
	提交
		commit
		

事务的隔离级别:
脏读:
	B读到了A在commit之前的数据,A又要进行回滚
不可重复读:
	commit之前查到的数据和commit之后查到的数据不同	
	针对update和delete	
幻读:
	由于insert操作导致的读数据错误

			脏读		不可重复读		幻读	加锁读
读未提交:	1				1			1		不加锁
读已提交:	0				1			1		不加锁
可重复读:	0				0			0		不加锁
可串行化:	0				0			0		加锁

	特性:
		1.原子性:最小执行单位
		2.一致性:简单理解为稳定状态,commit后的状态
		3.隔离性:各个事务的执行互不干扰
		4.持久性:一个事务一旦被提交就会永久存储到库中


视图:就是基表的副本(部分)
	1.修改视图会影响基表
	

设置权限:
	1.grant 权限 on 对象(某个库的某个表) to 用户
		刷新权限:flush privileges;
回收权限:
	revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置'
	
存储引擎:
	InnoDB建表会有两个文件,一个.frm,一个.idb
	MyISAM建表会有三个文件,一个.frm,一个.MYD,一个.MYI

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值