1.概述
1.1MySQL简介
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
MySQL是个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来被Oracle公司收购,目前属于Orac旗下。
1.2基本术语:
SQL即Structure Query Language(结构化查询语言)
DB即DataBase(数据库),数据库按照数据结构来组织,存储和管理数据的仓库。数据库提供了很多功能,可以通过SQL语句来定义来操作数据
DBMS即DataBase Management System(数据库管理系统),操作和管理数据库的大型软件,用于建立、使用和维护数据库
RDBMS即Relational DataBase Management System(关系型数据库管理系统),关系型数据库使用表来保存数据,使用表和表之间的关系来处理数据 还为数据的安全性、完整性、并发控制和数据恢复提供了保证。常见的数据库服务软件:Oracle、MySQL(Oracle公司);SQL Server、Access(微软)
(Key):用来标识行的一列或多列。
主关键字(Primary Key):表示为一条记录(行)的唯一标识关键字,一个表中只有一个主键。又称主键。
侯关键字(Candidate Key):唯一的标识表中的一行而又不含多余属性的一个属性集。
公共关键字(Common Key):关系之间的联系是通过相容或相同的属性或属性组来表示。若两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为两个关系的公共关键字。
外关键字(Foreign Key):若公共关键字在一个关系中是主键,那么这个公共关键字被称为另一个关系的外键。所以,表示两个关系之间的联系,又称外键。
!主键和外键的名称可以不同,但类型必须相同!
关系型数据库的常见组件:
数据库:database
- 表:table,由行(row)和列(column)组成
表是一种结构化的文件,可用于存储特定类型的数据,表中的每一行,也称为一条记录
表中的一个字段,所有表都是由一个或多个列组成的。表中的每一列,称为属性,字段。 - 索引:index
将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储。 - 视图:view
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 - 用户:user
- 权限:privilege
- 存储过程:Stored procedure
存储过程就是一条或多条SQL语句的集合,可视为批处理文件,但是其作用不仅用于批处理。 - 存储函数:function
- 触发器:trigger
触发器的执行不是由程序调用,而是由事件来触发、激活从而实现执行。 - 事件调度器:event scheduler
1.3 SQL语句:
DDL:Data Defination Language,数据定义语言
- CREATE:创建
- DROP:删除
- ALTER:修改
DML:Data Manipulation Language,数据操纵语言
- INSERT:向表中插入数据
- DELETE:删除表中数据
- UPDATE:更新表中数据
- SELECT:查询表中数据
DCL:Data Control Language,数据控制语言
- GRANT:授权
- REVOKE:移除授权
2.MySQL安装与配置
2.1 mysql安装
mysql安装方式有三种:
- 源代码:编译安装
- 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
- 程序包管理器管理的程序包:
rpm:有两种- OS Vendor:操作系统发行商提供的
- 项目官方提供的
2.2 安装MySQL
1.下载并安装MySQL官方的下载源
[root@wyt1 ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
[root@wyt1 ~]# ls
anaconda-ks.cfg mysql57-community-release-el7-10.noarch.rpm
2.安装MySQL
[root@wyt1 ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
3.安装MySQL服务器
[root@wyt1 ~]# yum -y install mysql-community-server
4.设置开机自动启动
[root@wyt1 ~]# systemctl enable --now mysqld
5.查看监听端口是否启动
[root@wyt1 ~]# ss -antl|grep 3306
LISTEN 0 80 :::3306 :::*
6.在日志中找到临时密码
[root@wyt1 ~]# grep "password" /var/log/mysqld.log
2020-05-22T04:11:49.636055Z 1 [Note] A temporary password is generated for root@localhost: 103sltNbi9:_
7.用临时密码登录
[root@wyt1 ~]# mysql -uroot -p103sltNbi9:_
8.修改mysql登录密码
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'wyt123';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
8.为避免mysql自动升级,这里需要卸载最开始安装的yum源
[root@wyt1 ~]# rpm -e mysql57-community-release
3. mysql的程序组成
客户端
- mysql:CLI交互式客户端程序
- mysql_secure_installation:安全初始化,强烈建议安装完以后执行此命令
- mysqldump:mysql备份工具
- mysqladmin
服务器端
- mysqld
3.1 mysql工具用法
语法:mysql [OPTIONS] [database]
常用的OPTIONS:
-uUSERNAME //指定用户名,默认为root
-hHOST //指定服务器主机,默认为localhost,推荐使用ip地址
-pPASSWORD //指定用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
-V //查看当前使用的mysql版本
-e //不登录mysql执行sql语句后退出,常用于脚本
root@wyt1 ~]# mysql -V
mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1
[root@wyt1 ~]# mysql -uroot -p'wyt123'
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, 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.01 sec)
MariaDB [(none)]> quit
Bye
[root@wyt2 ~]# mysql -uroot -pwyt123 -h127.0.0.1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
[root@wyt2 ~]# mysql -uroot -p -h127.0.0.1
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
[root@wyt2 ~]# mysql -uroot -p -h 127.0.0.1 -e 'SHOW DATABASES;'
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
3.2 服务器监听的两种socket地址
socket类型 | 说明 |
---|---|
ip socket | 默认监听在tcp的3306端口,支持远程通信 |
unix sock | 监听在sock文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock) 仅支持本地通信 server地址只能是:localhost,127.0.0.1 |
4. mysql数据库操作
4.1 DLL操作
4.1.1 数据库操作
创建数据库
MariaDB [(none)]> create database if not exists wyt;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wyt |
+--------------------+
5 rows in set (0.01 sec)
删除数据库
MariaDB [(none)]> drop database if exists wyt;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
4.1.2 表操作
创建表
MariaDB [(none)]> create database if not exists wyt; //创建wyt数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use wyt //进入wyt数据库
Database changed
MariaDB [wyt]> create table w (id int NOT NULL,name VARCHAR(100) NOT NULL,age tinyint); //创建w表
Query OK, 0 rows affected (0.01 sec)
MariaDB [wyt]> show tables; //查看当前数据库有哪些表
+---------------+
| Tables_in_wyt |
+---------------+
| w |
+---------------+
1 row in set (0.01 sec)
MariaDB [wyt]> desc w; //查看表的结构
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
MariaDB [wyt]> show create table w; //查看建表语句
---+
| w | CREATE TABLE `w` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`age` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
删除表
MariaDB [wyt]> drop table if exists w;
Query OK, 0 rows affected (0.01 sec)
MariaDB [wyt]> show tables; //查看表
Empty set (0.00 sec)
删除列
MariaDB [wyt]> desc w; //查看表的结构
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
MariaDB [wyt]> alter table w drop id;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplica