Mysql入门
- 一、系统环境
- 二、MYSQL安装
- 方法一:安装mariadb
- 方法二:官网下载安装mysql-server
- 三、MYSQL基本操作
- 四、数据库术语
- 五、MYSQL体系结构
- 六、数据库三范式
- 七、CURD执行过程
- 八、MYSQL配置
- 九、MYSQL权限管理
一、系统环境
[root@localhost rh]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
二、MYSQL安装
一般网上给出的资料都是
#yum install mysql
#yum install mysql-server
#yum install mysql-devel
安装mysql和mysql-devel都成功,但是安装mysql-server失败,如下:
[root@localhost rh]# yum install mysql-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.163.com
No package mysql-server available.
Error: Nothing to do
查资料发现是CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了。
有两种解决办法:
方法一:安装mariadb
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
安装mariadb,大小59 M。
[root@localhost rh]# yum install mariadb-server mariadb
mariadb数据库的相关命令是:
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
所以先启动数据库
[root@localhost rh]# systemctl start mariadb
然后就可以正常使用mysql了
[root@localhost rh]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]>
安装mariadb后显示的也是 MariaDB [(none)]> ,可能看起来有点不习惯。下面是第二种方法。
方法二:官网下载安装mysql-server
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server
安装成功后重启mysql服务。
# service mysqld restart
初次安装mysql,root账户没有密码。
[root@localhost rh]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)
mysql>
设置密码
mysql> set password for 'root'@'localhost' =password('password');
Query OK, 0 rows affected (0.00 sec)
mysql>
不需要重启数据库即可生效。
在mysql安装过程中如下内容:
Installed:
mysql-community-client.x86_64 0:5.6.26-2.el7 mysql-community-devel.x86_64 0:5.6.26-2.el7
mysql-community-libs.x86_64 0:5.6.26-2.el7 mysql-community-server.x86_64 0:5.6.26-2.el7
Dependency Installed:
mysql-community-common.x86_64 0:5.6.26-2.el7
Replaced:
mariadb.x86_64 1:5.5.41-2.el7_0 mariadb-devel.x86_64 1:5.5.41-2.el7_0 mariadb-libs.x86_64 1:5.5.41-2.el7_0
mariadb-server.x86_64 1:5.5.41-2.el7_0
所以安装完以后mariadb自动就被替换了,将不再生效。
[root@yl-web yl]# rpm -qa |grep mariadb
[root@yl-web yl]#
mysql安装的默认路径:
/var/lib/mysql
三、MYSQL基本操作
登录
mysql -u root -p
显示mysql数据库中的所有库
show databases;
显示mysql数据库当前有多少连接
show processlist;
退出数据库
exit
四、数据库术语
- 数据库:数据库是一些关联表的集合;
- 数据表:表是数据的矩阵;
- 列:一列包含相同类型的数据;
- 行:或者称为记录是一组相关的数据;
- 主键:主键是唯一的;一个数据表只能包含一个主键;
- 外键:外键用来关联两个表,来保证参照完整性;MyISAM存储引擎本身并不支持外键,只起到注 释作用;而innodb完整支持外键;
- 复合键:或称组合键;将多个列作为一个索引键;
- 索引:用于快速访问数据表的数据;索引是对表中的一列或者多列的值进行排序的一种结构;
五、MYSQL体系结构
MySQL由以下几部分组成:
连接池组件、管理服务和工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插
件式存储引擎、物理文件。
连接者
不同语言的代码程序和mysql的交互(SQL交互);
连接池
管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求;
网络处理流程:主线程接收连接,接收连接交由连接池处理;
主要处理方式:IO多路复用select + 阻塞的io; memcached
需要理解:MySQL命令处理是并发处理的;
select(,NULL) 一直阻塞
管理服务和工具组件
系统管理和控制工具,例如备份恢复、Mysql复制、集群等;
SQL接口
将SQL语句解析生成相应对象;DML,DDL,存储过程,视图,触发器等;
查询解析器
将SQL对象交由解析器验证和解析,并生成语法树;
查询优化器
SQL语句执行前使用查询优化器进行优化
缓冲组件
是一块内存区域,用来弥补磁盘速度较慢对数据库性能的影响;在数据库进行读取页操作,首先将从磁盘读到的页存放在缓冲池中,下一次再读相同的页时,首先判断该页是否在缓冲池中,若在缓冲池命中,直接读取;否则读取磁盘中的页,说明该页被LRU淘汰了;缓冲池中LRU采用最近最少使用算法来进行管理;
缓冲池缓存的数据类型有:索引页、数据页、以及与存储引擎缓存相关的数据(比如innodb引擎:undo页、插入缓冲、自适应hash索引、innodb相关锁信息、数据字典信息等);
六、数据库三范式
范式一:确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值;
例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为多个字段,省份、城市、详细地址等;
范式二:确保表中的每列都和主键相关,而不能只与主键的某一部分相关(组合索引);
范式三:确保每列都和主键直接相关,而不是间接相关;减少数据冗余;
七、CURD执行过程
八、MYSQL配置
centos mysql 配置文件为/etc/my.cnf
ubuntu mysql 配置为/etc/mysql/my.cnf
九、MYSQL权限管理
创建用户
CREATE USER username@host IDENTIFIED BY password;
host 指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost ,如果想让该用户可以从任意远程主机登陆,可以使用通配符 % ;
授权
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
privileges :用户的操作权限,如 SELECT , INSERT , UPDATE 等,如果要授予所的权限则使用ALL;
databasename.tablename 如果是 . 表示任意数据库以及任意表;
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定 WITH GRANT OPTION 选项导致后来该用户不能使用 GRANT 命令创建用户或者给其它用户授权。
如果不想这个用户有这个grant的权限,则不要加该 WITH GRANT OPTION 选项;
对视图授权
GRANT select, SHOW VIEW ON `databasename`.`tablename` to 'username'@'host';
刷新权限
-- 修改权限后需要刷新权限
FLUSH PRIVILEGES;