- mysql外键实战 11-25
- MySQL常用操作 11-25
- 降低DevCloud门槛 华为云对开发者送出3大免费 11-25
- mysql的概念以及mysql架构分析 11-25
- Mysql备份恢复 11-25
- MySQL常用函数清单 11-25
- MySQL中的锁 11-25
- MySQL线程 11-25
- linux mysql主从复制配置 11-25
- mysql 中FIND_IN_SET的使用 11-25
mysql外键实战
发布者: superzhang | 发布时间:2017-11-25一、基本概念
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。
3、如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型。
4、外键的使用条件
① 两个表必须是InnoDB表,MyISAM表暂时不支持外键
② 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;
③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如
MySQL常用操作
发布者: superzhang | 发布时间:2017-11-25创建mysql用户和数据表
create database testcom;
grant all on testcom.* to 'cxf'@'localhost' identified by 'cxf';
MySQL的密码重置
设置root密码为123456
mysql -uroot password '123456'
vim /etc/my.cnf
在最后面加一条
skip-grant
不去授权
登录mysql重置密码,重置后要把skip-grant去掉
use mysql;
update user set password=password('123456') where user='root';
刷新磁盘:flush privileges(也可以重启)
mysql登录
mysql -uroot -h127.0.0.1 -P3306 -p123456
授权192.168.31.101远程登录数据库
grant all on *.* to 'root'@'192.168.31.101' identified by '123456' with grant option (授
降低DevCloud门槛 华为云对开发者送出3大免费福利
发布者: superzhang | 发布时间:2017-11-25对软件开发者而言,虽然目前网上基于敏捷、DevOps的开发工具有很多,但大都比较分散单一,一站式软件开发平台却比较少。也许,不少开发者可能已经知道了华为软件开发云(DevCloud),并且对这种全云化的开发模式还比较感兴趣,但是苦于这个东西还是有一定的门槛,各种云服务费挺让人心疼。
近日,在北京举行的华为云软件开发云媒体圆桌会上,华为云软件开发云运营总监张勇向媒体透露,为了降低门槛,让更多的开发者更好的体验到软件开发云,从11月16日起,华为云将为开发者送出三大免费福利。
福利一:软件开发云DevCloud免费
据了解,软件开发云免费限5人以下团队,免费包含以下内容:项目管理、代码托管、测试管理的免费使用额度为用户数5人,存储空间500MB,流水线、代码检查、部署目前限时免费使用,编译构建的免费使用额度为构建时长600分钟,发布的免费使用额度为存储空间500MB;软件开发云中的免费使用额度指的是当前系统中的使用量,而非累计使用量,以上各服务使用量超过免费额
mysql的概念以及mysql架构分析
发布者: superzhang | 发布时间:2017-11-25mysql是目前最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。在给大家分享之前,先介绍下 小编组织的一个学习交流企鹅群:526929231 有什么不懂的问题,都可以在群里问,学习气氛很好,众多大神都很热情。群文件里面也有各种全面的python资料,以及自动化运维学习资料,是一个非常适合学习的地方,小编期待大家的加入,大家一起学习,共同成长!
从图中可以看到MySQL由以下几个部分组成:
连接池
管理服务和工具组件
SQL接口
查询分析器
优化器
缓存
插入式存储引擎
物理文件
物理结构:mysql软件(mysqld)+配置文件+mysql数据文件(磁盘上的文件:datadir)
逻辑的架构:
mysql架构
Mysql备份恢复
发布者: superzhang | 发布时间:2017-11-25备份
1、全库备份
格式:
mysqldump -u用户名 -p密码 --all-databases > 导出的文件名
举例:
mysqldump -uroot -p123456 --all-databases > fulldatabase.sql
把全库备份为fulldatabase.sql
2、备份某一个库
格式:
mysqldump -u用户名 -p密码 数据库名 > 导出的文件名
举例:
mysqldump -uroot -p123456 perdb > perdb.sql
把perdb数据库导出为perdb.sql
3、备份某一个表
mysqldump -u用户名 -p密码 数据库名 表名 > 导出的文件名
4、备份多个库
mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 ... > 导出的文件名
5、备份的其它使用方法
• 备份过程启用压缩
格式:
mysqldump -u用户名 -p密码 数据库名 |gzip > 导出的文件名.g
MySQL常用函数清单
发布者: superzhang | 发布时间:2017-11-25字符串拼接CONCAT(str1,str2,...)字符串长度(字节数)LENGTH(str)字符串长度(字符数)CHAR_LENGTH(str)字符串大小写转换LOWER(str) #转小写UPPER(str) #转大写LCASE(str) #转小写UCASE(str) #转大写字符串替换(区分大小写)REPLACE(str,from_str,to_str)字符串从左/右截取LEFT(str,len) #返回字符串左边的指定字符数RIGHT(str,len) #返回字符串右边的指定字符数字符串截取(按位置)SUBSTRING(str,pos) #从str头的pos位置返回一个字符串,pos为负则从尾截取字符串SUBSTRING(str FROM pos) #同上SUBSTRING(str,pos,len) #从str头的pos位置返回一个指定长度的字符串,pos为负则从尾截取字符串SUBSTRING(str FROM pos FOR len) #同上字符串截取(按分隔符出现次数)SUBSTRING_INDEX(str,delim,count) #返回字符串str中在第count个出现的分隔符delim之前的子串字符串查找INSTR(str,substr) #返回字符串str中子串substr第一次出现的位置,没找到则返回0LOCATE(substr,str) #同INSTR(st
MySQL中的锁
发布者: superzhang | 发布时间:2017-11-25概述
MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁
表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低
行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高
MyISAM表级锁锁模式
show status like 'table%' 可以分析锁争夺情况
表级锁分为两种模式:共享读锁,独占写锁
读读共享,读写互斥,写写互斥,写读互斥(比如写读互斥,当一个用户对user表进行写的时候,会阻塞其他用户的写操作和读操作)
加表锁
在select的时候自动加读锁,在update delete insert时,自动加写锁
一般不需要用户用lock table 命令直接显式加锁
显示加表锁时
session1显示给user表加锁
lock table user read;session1此时不能读取未锁定的class表
MySQL线程
发布者: superzhang | 发布时间:2017-11-25MySQL线程
当MySQL服务器本身遇到性能问题的时候,一般可以通过slow log来找到耗时比较多的SQL语句,并且进一步通过explain来优化和改进SQL执行速度。这种方法有这几方面的限制:首先,并不是所有的问题都是因为异常SQL造成的,当大量SQL请求时间比较长,但不到slow log阈值的时候(通常线上无法将slow log阈值设置的较小),MySQL服务器负载也会很高;其次,MySQL服务器本身的状态会影响SQL的执行,有一些没有问题的SQL语句在MySQL负载较高时,也会进入slow log。
另外一种方法是通过MySQL的Performance Schema、Innodb status以及MySQL status等MySQL统计信息来定位问题;这通常需要对MySQL的实现有相当的了解;并且定位问题不是非常直接。
本人认为除了以上两种办法之外,可以通过strace MySQL的线程来定位性能瓶颈。这种方法可以定位出因为系统IO(包括网络)、内存、线程同步(MySQL锁使用错误)等造成的问题;也就是说,如果能确定MySQL Server不存在大量需要在用户态进行的计算(例如浮点运算、字符串处理等),都可以尝试使用此方法。
下面将介绍MySQL线程相关的一些信息,以MySQL5.6.29为例,MySQL5.7会有一些不一样。
linux mysql主从复制配置
发布者: superzhang | 发布时间:2017-11-25在此不在赘述如何安装mysql数据库,只说它的主从复制,按以下步骤执行:
环境说明:准备两台linux(虚拟)主机
Linux版本CentOS7、MySQL 5.6.17(mysql版本要一致)
IP地址分别为:192.168.1.1、192.168.1.2
创建复制账号mysql会赋予一些特殊的权限给复制线程,因此必须在主库创建一个用户,并赋予其合适的权限,备库I/O线程以该用户名连接到主库并取其二进制日志。
在192.168.1.1 中创建一个192.168.1.2主机中可以登录的MySQL用户,并调用flush privileges刷新权限。
//192.168.1.1 : 主数据库服务器:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'fuzhi'@'192.168.1.2' IDENTIFIED BY 'fuzhi';mysql>FLUSH PRIVILEGES;注意:这个
mysql 中FIND_IN_SET的使用
发布者: superzhang | 发布时间:2017-11-25在mysql中,有时需要得到某字段中包含某个值的记录,此时首先会想到like,使用like可能查到我们不想要的记录,它比like更精准,这时候FIND_IN_SET函数就派上用场了。
1.新建表结构
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `t_test`;
CREATE TABLE `t_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`funlist` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
2.插入测试数据
//插入数据以英文”,”分隔
insert into t_test(funlist) values ('1,3,4,6,78,98,121,245,567');
insert into t_test(funlist) values ('1,3,4,6,7,8,9,10,12,15,18');
3.查询实例
select
