5.7.20 发布时间2017年9月
关系型数据库
MySQL
下载二进制包
修改环境变量
清理历史软件包
创建用户
修改目录权限
初始化库
准备启停脚本和创建配置文件
检查端口号(默认是3306)
检查进程是否存在
systemctl status mysqld查看数据库状态
oracle MySQL
MariaDB
由连接层提供链接协议,验证用户账号密码后链接提供给用户一个线程链接,用来传输语句,将用户输入的语句传输给SQL层,SQL层收到后首先验证语法是否正确,其次检查语义属于什么语言(DDL,DCL.DML,DQL),然后检查权限,即用户是否有权限查看表或者修改表,然后有解析器产生多种执行计划,优化器选择其中一种他认为最优的去执行,交给执行器,执行器找到文件放置位置后交给存储引擎层,存储引擎层将16进制的文件交由SQL架构化成表然后有线程返回给用户
mysql_safe方式启动
由mysql/bin/mysqld启动
将mysqld复制到etc/init.d目录下可以使用systemctl start mysqld启动
不管哪一种方式,最终调用的都是mysqld文件
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
命令行参数信息
从上至下,下面的参数信息会覆盖之前读取到的,最终以命令行输入为准
&是将其放在后台加载
命令意思是指定加载的配置文件的位置
首先关闭MySQL,网站挂维护页
停止服务:systemctl stop mysqld(主要看使用什么方式启动的)
然后执行:mysqld_safe --skip-grant-tables --skip-networking &
skip-grant-tables是跳过用户密码验证模块启动
skip-networking是跳过TCP/IP连接方式模块,不允许用户远程连接
& 放在后台运行
然后直接输入用户名登录数据库
因为关闭了密码验证模块,所以密码没有被加载到内存中,手动加载一下
flush privileges;
然后修改密码
alter user root@'localhost' identified by '123'
然后退出数据库,关闭数据库,重新正常启动即可
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言
聚集索引:叶子节点存储的是源文件的内容,聚集索引生成在主键列上,聚集索引是在建表时创建的
辅助索引:叶子节点存放的是数据行在表中的位置,辅助索引可以是任何一列,
explain select * from city where countrycode=‘CHN’ order by population;
执行速度慢,执行计划为空,全局扫描,
解决方案
countrycode列和population创建联合辅助索引
命令改为select * from city where countrycode='CHN'
(2)简述出现以下结果的可能原因
最后的参数没有加引号被识别为了数字,加引号后背时别为字符串,执行过程使用了索引,加快了速度
请简述,影响索引树高度的原因?
受数据量级影响,索引列值过长,和数据类型
查看命令行报错,查看mysql错误日志,
B树索引,R树索引,hash索引
innoDB,MyISAM,memory
事务安全(ACID)
MVCC(Multi-Versioning Concurrency Control,多版本并发控制)
InnoDB 行级别锁定
Oracle 样式一致非锁定读取
表数据进行整理来优化基于主键的查询
支持外键引用完整性约束
大型数据卷上的最大性能
将对表的查询与不同存储引擎混合
出现故障后快速自动恢复
用于在内存中缓存数据和索引的缓冲区池
系统宕机后恢复后,启动数据库,数据库自动去对比和redo(重做日志)中的LSN的日志序列号,查看是数据是否同步,不同步的情况将redo日志中已保存的调回到内存中,然后写入表,直到表数据和redo日志中相符.
RR:可重复读
不管数据是在执行前,执行中,还是已提交之后,其他用户刷新查看到的依旧是之前的内容,除非重新开一个窗口,避免脏读幻读
RC:读已提交
用户修改内容之后使用commit提交了,刷新之后其他用户才可以看到修改之后的内容,不会出现脏读但依旧会产生幻读
RU:读未提交
用户修改之后尚未使用commit提交已经修改的内容,其他用户依然可以看到已经被修改的数据,会出现脏读和幻读
grant all on \*.\* to oldboy@'10.0.0.%' identified by '123'
grant all on wordpress.* to wordpress@'172.16.1.%' identified by '123'
[mysqld]
user=root
datadir=/data/mysql/data
basedir=/data/mysql
socket=/tmp/mysql.sock
server_id=6
log_error=/data/mysql/mysql_errot.log
mysql -uoldboy -p -h10.0.0.51 -p3306
show create database world;
create database oldboy charset GBK;
show create database oldboy
not null:非空,不能为空
default:默认填写什么
auto_increament:自增长,多用于ID列
grant all on oldbooy.* to oldboy@'%' identified by '123';
revoke drop on oldboy.* from oldboy@'%';
show grants for oldboy@'%';
show create table city;
desc city;
insert into db(id,sname) values('1','oldboy');
insert into db(id,sname) values('2','老男孩'),('3','oldboyedu');
select * from db where sname='oldboy';
show engines;
select @@general_log_file;
show session status like 'handler_read%';
alter table db drop id;
alter table db drop id where id='1';
alter table test add primary key idx_id(id);
alter table test add index idx_name(name);
alter table test add index idx_shou(shouji(8));
>show index from db\G;
alter table db drop index name;
alter table db drop index showji;
alter table test add index idx_name_shouji(name(6),shouji(8));
alter table test add unique index idx_shouji(shouji);
select count(xingbie),sname from db where count(xingbie)>1 ;
all :没有使用索引
index:全索引扫描
range:索引范围查找
ref:辅助索引的等值查询
eq_ref:多表连接的表.on的条件是主键或者唯一键
system或const:主键或唯一键的等值查询
null:没有结果
统计世界上每个国家的总人口数.
select countrycode,sum(population) from city group by countrycode;
统计中国各个省的总人口数量(练习)
select District,sum(population) from city where countrycode='chn' group by District;
统计世界上每个国家的城市数量(练习)
select country.name,count(city.name) from city join country on country.code=city.CountryCode group by city.countrycode;
统计中国每个省的总人口数,将总人口数小于100w进行从高到低排序显示
select District,sum(population) from city where countrycode='chn' group by District having sum(population)<1000000 order by sum(population) desc;
SELECT CONCAT("mysqldump -uroot -p ",TABLE_SCHEMA," >/tmp/",TABLE_SCHEMA,"_",TABLE_NAME,".sql") FROM TABLES
INTO OUTFILE '/tmp/bak.sh'