MySQL从入门到精通之基础
1.1. MySQL 5.7安装步骤
1、下载rpm包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
# 如果提示需要账号密码,就用这个方式下载
# wget --http-user=youremail@email.com --http-passwd=yourpassword https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
2、查看系统是否自带mariadb
rpm -qa | grep mariadb
3、将查出的mariadb进行卸载
rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
4、把刚刚下载的mysql tar解压
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
5、在解压目录安装如下4个mysql核心包
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
6、安装到server时缺少依赖报错
error: Failed dependencies:
libaio.so.1()(64bit) is needed by mysql-community-server-5.7.28-1.el7.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.28-1.el7.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.28-1.el7.x86_64
7、安装缺少的依赖
yum -y install libaio
8、再次安装server
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
9、启动mysql服务
service mysqld start
10、查看v5.7版本的默认登录密码
1、数据库目录
/var/lib/mysql/
2、配置文件
/usr/share/mysql(mysql.server命令及配置文件)mysql5.5之后的默认安装路径,mysql5.5之前的是/usr/local/mysql
3、相关命令
/usr/bin(mysqladmin mysqldump等命令)
4、启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
grep password /var/log/mysqld.log
11、登录到mysql命令行,修改默认密码
mysql -rroot -p (input the default password enqueried from the last command)
alter user 'root'@'localhost' identified by 'michael2020'
12、会告诉你密码不符合规范,可以修改校验等级和长度后再次执行上面的语句(choose to execute based on the complexity of your password)
set global validate_password_policy=LOW;
set global validate_password_length=6;
13、账户授权
use mysql;
select host,user from user;
#create a certain user to visit the database
# the user name : michael ; the password : michael2020 ; with any IP
CREATE USER 'michael'@'%' IDENTIFIED BY 'michael2020';
# 所有ip通过michael都可以访问数据库
grant all privileges on *.* to michael@'%' identified by 'michael2020';
# 只有内网网段ip才可访问,并授权账号可以授权其他人
# grant all privileges on *.* to michael@'192.168.%' identified by 'michael2020' with grant option;
flush privileges;
1.2. 学习的基础数据导入
create database michael_admin;
use michael_admin
DROP TABLE IF EXISTS `ad_role`;
CREATE TABLE `ad_role` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`role_name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ad_role` (`id`, `role_name`)
VALUES
(1,'vip1'),
(2,'vip2'),
(3,'vip3');
DROP TABLE IF EXISTS `ad_user`;
CREATE TABLE `ad_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ad_user` (`id`, `username`, `password`)
VALUES
(1,'arry','123456'),
(2,'gavin','1234567'),
(3,'coding','123456');
DROP TABLE IF EXISTS `ad_user_role`;
CREATE TABLE `ad_user_role` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`role_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ad_user_role` (`id`, `user_id`, `role_id`)
VALUES
(1,1,1),
(2,1,2),
(3,1,3),
(4,2,2),
(5,3,3),
(7,2,3);
3. 基础知识回顾
-
where条件解析顺序
- MySQL:自左向右
- Oralce:自右向左
-
SQL执行顺序
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- LIMIT
-
全文索引
- 只有在MyISAM的引擎才可以用,只能使用在CHAR、VARCHAR、TEXT字段使用使用
-
MySQL中SQL执行的过程-MySQL 5.7
- 连接器
- 查询缓存
- 分析器(词法(关键字check)、语法(sql语句语法check))
- 优化器(索引执行顺序和多表查询的时候优先顺序)
- 执行器(执行实际的sql)
sql的两种方式方式
-
statement
- 不能防sql注入
-
preparestatement
- 可以防止sql注入
- 多次执行的时候,sql语句不会执行分析器部分流程
ps:
具体的执行顺序可以参考博文:https://blog.csdn.net/dong_007_007/article/details/78388891
# 声明使用查询缓存,但是不建议这样使用
select SQL_CACHE * from ad_user;
# 注意:MySQL 8.0 把查询缓存这个模块去掉了
- MySQL数据引擎
# MySQL支持的数据引擎
mysql> show engines;
存储引擎 | 说明 |
---|---|
MyISAM | 高速查询引擎,不支持事物 |
InnoDB | v5.5以后是MySQL的默认引擎 |
Archive | 数据压缩存储引擎,便于数据归档 |
Memory | 内存存储引擎 |
对比MyISAM和InnoDB
对比 | InnoDB | MyISAM |
---|---|---|
存储文件的形式 | .frm表定义文件,.ibd存放数据和索引的 | .frm表定义文件,.myd数据文件,.myi索引文件 |
锁 | 表、页、行 | 表 |
事务 | 支持 | 不支持 |
CRUD | 可同时读、写 | 只可同时读,不可同时写 |
# 查询表的引擎
show table status like '%ad_user%';
MySQL数据库数据存储的位置
cd /var/lib/mysql
# 这个目录下存放的是数据库对应的各个数据库的数据文件
MySQL配置文件默认路径(修改数据的访问等设置)
vi /etc/my.cnf