MYSQL数据库
mysql数据库jar方式安装
>>通过官网下载jar
>>解压文件
>>bin同级目录文件
1 新建data文件夹
2 新建 my.ini文件夹(是一个ini文件,名字可自定义)
3 my.ini文件新增配置(包括但不限于如下内容)
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#安装目录
basedir = D:\\mysql\\mysql-5.7.17-winx64\\mysql-5.7.17-winx64
# 修改成自己的路径
# 数据库存放目录
datadir =D:\\mysql\\mysql-5.7.17-winx64\\mysql-5.7.17-winx64\\data
# 修改成自己的路径
#端口
port = 3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
4 通过管理员身份运行cmd,在bin目录下,执行如下语句
mysqld --initialize --console
5 安装服务
mysqld --install
6 启动数据库
net start mysql
7 在第4步中会为root用户生成一个密码,如果需要修改
7.1 登录mysql数据库
mysql -u root -p
输入第4步生成的密码
7.2 执行如下指令
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
锁
共享-lock in share mode
排它-for update
Mysql关键字执行顺序:
from--where--group by--having--select--order by
[
from后面的表关联,是自右向左解析的
where条件的解析顺序是自下而上的
]
[
from-on-join-where-group by-having-select-distinct-union-order by
]
Mysql中where执行顺序
where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个。
索引:
索引:
>目的:为了提高查询,让查询更快
>实现:一般实现了B-Tree或B+查询算法实现
>分类:
主键索引:唯一且不能为空
普通索引:
唯一索引:不允许有重复
全文索引
>创建
唯一索引:
CREATE UNIQUE INDEX 索引名称
ON 表名称 (列名称)
创建简单的索引
CREATE INDEX 索引名称
ON 表名称 (列名称)
删除索引:
drop
索引并非越多越好的原因
1增加了数据库的存储空间
2删除和插入也需要时间维护索引
任何标准表最多可以创建16个索引
设置了索引但是无效的场景:
>以%开头的like语句
>or语句前后没有同时使用索引
>数据类型出现隐式转换
原则:
最左前缀原则;
Mysql性能优化
- 当只要一行数据的时候limit 1
2.选择正确的数据库引擎, MyISAM 适⽤于一些大量查询的应用, InnoDB的写操作 ⽐较优秀
3.⽤not exists代替not in
4.充分使⽤用索引, B-TREE 仍然是高效的索引之中的一
5.⽤ NOSQL 的⽅式使用 MYSQL
行转列
mysql中行转列是通过group_concat()函数来实现的。默认是使用逗号隔开
sql执行计划
MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个"EXPLAIN"
table |
type | const、eq_reg、ref、range、indexhe和ALL
possible_keys | 显示可能应用在这张表中的索引
key | 实际使用的索引。如果为NULL,则没有使用索引
key_len |
ref |
rows |
Extra
分库分表的中间件
Cobar/MyCAT/TDDL/DRDS/Atlas/DBProxy/sharding-JDBC/
union与union all的区别
Union:结果-不重复
Union all:结果-重复
Mysql存储引擎
1>MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快全表锁
2>innodb该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全/行级锁
3>Memory存储引擎使用存在于内存中的内容来创建表/全表锁
4>Merge存储引擎是一组MyISAM表的组合
Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB
游标:
数据结构
Myisam-hash表;
Innodb-b树/b+树
数据备份:
mysqldump