标签 - mysql

MySql学习笔记(一)之逻辑架构
0
mysql    2017-09-06 23:26:07    185    0

MySql的逻辑架构

 

一、基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等

 

二、这一层是比较核心的服务功能,包括查询解析、分析、优化、缓存以及所有的内置函数(如:日期、时间、数字和加密函数等),所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等

 

三、存储引擎。主要负责MySql中数据的存储和提取。服务器通过API与存储引擎进行通信。存储引擎API包含几十个底层函数,用于执行诸如“开启一个事物”或者“根据主键查询一条数据”等操作。但是存储引擎不会去解析SQL(InnoDb是一个例外,它会解析外键定义),不同存储引擎之间也不会相互通信,而只是简单的响应上层服务器的请求。

 

MySql的并发控制

 

只要是多个查询需要在同一时间修改数据,就会产生兵法控制的问题。

 

一、读写锁

有两种类型的锁通常可以解决这类并发问题,我们称为共享锁(shared lock)和排他锁(exclusive lock),也叫做读锁和写锁,写锁比读锁的优先级更高。

 

二、锁粒度

为了让锁定对象更有选择性,这是一种提高共享资源并发性的方式。

 

表锁(table lock)

表锁是MySql中最基本的锁策略,并且是开销最小的策略

 

行级锁(row lock)

可以最大程度地支持并发处理(同时也带来了最大的锁开销),行级锁只在存储引擎中实现,而MySql的服务器层没有实现

MySql学习笔记(二)之事物处理
0
mysql    2017-09-06 23:26:01    177    0

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

AMH开启后无法在ssh中连接mysql
0
amh mysql    2017-09-01 00:55:40    186    0

1.确保mysql的用户已经有了可以远程访问的权限。

2.建立一个软连接

  1. ln -s /tmp/mysql-generic-5.5.sock /tmp/mysql.sock

3.在AMH的面板中,开启Madmin应用

在参数配置中,开启监听端口远程访问 (skip_networking)

4.或者

  1. sudo vim /etc/mysql/my. cnf
  2. 在旧版本中找到 skip-networking,把它注释掉就可以了
  3. #skip-networking
MySql主从同步(热备份),读写分离
0
mysql    2017-09-01 00:52:37    206    0

1.主服务器(master[主人])会把自己的每一次改动(每条sql语句)都记录到二进制日志Binarylog中(所以二进制日志要打开)。
2.从服务器(Slave[奴隶]), 会用master上的账号登陆到 master上,读取master的Binarylog,写入到自己的中继日志 Relaylog。
3.然后从服务器自己的sql线程会负责读取这个中继日志,并执行一遍。

就这样主从同步也就是所谓的热备份就完成了,这些步骤都是在mysql里面自动实现的哟,我们只需要一开始配置好就可以了。

主服务器, 配置要记录在binLog里面的数据库,同时设置一个给从服务器登录的账号。
从服务器, 配置relayLog,配置主服务器的地址和端口,还有主服务器给的登录账号。

mysql函数
0
mysql    2017-08-31 13:58:37    155    0

Mysql 函数

  • 数学函数
  • 字符串函数
  • 日期和时间函数
  • 条件判断函数
  • 系统信息函数
  • 加密函数
  • 格式化函数

数学函数

  • abs(x)

    返回x的绝对值 ; SELECT ABS(-1) -- 返回1

  • ceil(x)

    返回大于或等于x的最小整数 ; SELECT CEIL(1.5) -- 返回2

  • floor(x)

    返回小于或等于x的最大整数 ; SELECT FLOOR(1.5) -- 返回1

  • rand()

    返回0->1的随机数 ; SELECT RAND() --0.93099315644334

  • rand(x)

    返回0->1的随机数,x值相同时返回的随机数相同 ; SELECT RAND(2) --1.5865798029924

  • sign(x)

    返回x的符号,x是负数、0、正数分别返回-1、0和1 ; SELECT SIGN(-10) -- (-1)

  • pi()

    返回圆周率(3.141593) ; SELECT PI() --3.141593

  • truncate(x,y)

    返回数值x保留到小数点后y位的值(与ROUND最大的区别是不会进行四舍五入) ; SELECT TRUNCATE(1.23456,3) -- 1.234

  • round(x)

    返回离x最近的整数  SELECT ROUND(1.23456) --1

  • round(x,y)

    保留x小数点后y位的值,但截断时要进行四舍五入 ; SELECT ROUND(1.23456,3) -- 1.235

  • pow(x,y)

    返回x的y次方 ; SELECT POW(2,3) -- 8

  • sqrt(x)

    返回x的平方根 ; SELECT SQRT(25) -- 5

  • exp(x)

    返回e的x次方 ; SELECT EXP(3) -- 20.085536923188

  • mod(x,y)

    返回x除以y以后的余数 ; SELECT MOD(5,2) -- 1

  • log(x)

    返回自然对数(以e为底的对数) ; SELECT LOG(20.085536923188) -- 3

  • log10(x)

    返回以10为底的对数 ; SELECT LOG10(100) -- 2

  • rad

数据库索引
0
mysql    2017-08-31 13:58:14    156    0

MySql数据库索引

Earl     guo@seosite.cn 17.7.15

简介

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

  1. - PRIMARY 主键索引
  2. - INDEX 普通索引
  3. - UNIQE 唯一索引
  4. - FULLTEXT 全文索引

单列索引和组合索引的区别

单列索引,即一个索引只包含单个列[字段],一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列[即把多个字段进行统一索引操作,操作过程种需要注意“最左前缀”]。

组合索引:ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);
这里面 vc_name(10),vc_city,vc_age的组合索引的name_city_age相当于是:

  1. vc_name(10),vc_city,vc_age
  2. vc_name(10)
  3. vc_name(10),vc_city

这三个的集合


优点

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。--- 采自菜鸟教程

缺点

虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTUPDATEDELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。


PRIMARY

这个应该都知道,主键。


INDEX

普通索引,没有任何限制。

创建:

  1. CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

修改:

  1. ALTER mytable ADD I
数据库军规
0
mysql    2017-08-31 13:57:53    165    0

MySql 使用军规整理版

  • 禁止开发测试人员在IDC环境手工删除和修改数据

  • 所有需求通过DB工具系统提交

  • 禁止在IDC(Internet Database Center)环境DB进行测试

  • IDC环境提交的sql语句一定要经过非正式环境验证,且经过explain sql检验过执行计划有走索引

  • IDC环境库表创建统一用小写,库表用英文简称,力求精简

  • 禁止web机器直连DB

  • 每条记录要保存数据的创建和修改时间,表通常要有主键,使用innodb引擎

  • IDC环境db只授权增查改,删除权限DBA评估

  • 预估和控制单表的数据量在百万以内,数据量过大需清理或分表

  • IDC环境禁止使用mysql视图,存储过程,触发器,自定义函数


表的一句话优化

  • int型不超过1000w,含char则不超过500w

    数字和字符装不下的情况,考虑多字段。

  • 按时间分表,按主键取模/hash分表,按量分表

    红包是按量来的。

  • 限制单库表的数量在万级以内

-拒绝text和blob类型

  1. > 实在避免不了要用textblob类型,拆表吧。或者弄成本地保存,多机器分片存储。
  1. 分区的算法可以按时间

    比如天、月,便于针对性的查询,命中率100%


字段的一句话优化

  • 长度可以冗余,可适量10%左右

    tinyint(1Byte)smallint(2Byte)mediumint(3Byte)int(4Byte)bigint(8Byte)认清长度,选择好类型。

  • 你认识null吗?

    避免使用NULL字段,因为NULL字段很难查询优化;NULL字段的索引需要额外空间;NULL字段的复合索引无效。

    错误的例子:Fpacket_name char(32) default null。

    正确的例子:Fpacket_name varchar(60) NOT NULL DEFAULT ''。

    Fface_value int(10) unsigned NOT NULLDEFAULT '0'。"

  • 业务上有关联的字段,要定义相同类型

    相同的类型做语句操作有助于提高操作效率,减少转换成本。

  • 选择类型请