MYSQL数据库
1.数据库介绍
1.1 数据库专有名词
-
** Data:**数据,就是数据厍中存储的基本对象,就是描述事物的符号记录。
-
Database:数据库,就是长期储存在计算机内、有组织的、可共享的大量数据的集合。3. DBMS:数据库管理系统,就是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储与管理数据、高效地获取与维护数据。
-
DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
-
数据模型:就是用来抽象、表示与处理现实世界中的数据与信息的工具,就是对现实世界的模拟,就是数据库系统的核心与基础;其组成元素有数据结构、数据操作与完整性约束。
-
概念模型:也称信息模型,就是按用户的观点来对数据与信息建模,主要用于数据库设计。
-
逻辑模型:就是按计算机系统的观点对数据建模,用于DBMS实现。
-
物理模型:就是对数据最底层的抽象,描述数据在系统内部的表示方式与存取方法,在磁盘或磁带上的存储方式与存取方法,就是面向计算机系统的。
-
实体与属性:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性。
-
E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,就是数据库概念模型设计的主要工具。
-
关系模式:从用户观点瞧,关系模式就是由一组关系组成,每个关系的数据结构就是一张规范化的二维表。
-
型/值:型就是对某一类数据的结构与属性的说明;值就是型的一个具体赋值,就是型的实例。
-
数据库模式:就是对数据库中全体数据的逻辑结构(数据项的名字、类型、取值范围等)与特征(数据之间的联系以及数据有关的安全性、完整性要求)的描述。
-
数据库的三级系统结构:外模式、模式与内模式。
-
数据库内模式:又称为存储模式,就是对数据库物理结构与存储方式的描述,就是数据在数据库内部的表示方式。一个数据库只有一个内模式。
-
数据库外模式:又称为子模式或用户模式,它就是数据库用户能够瞧见与使用的局部数据的逻辑结构与特征的描述,就是数据库用户的数据视图。通常就是模式的子集。一个数据库可有多个外模式。
-
数据库的二级映像:外模式/模式映像、模式/内模式映像。
-
主码:能够唯一地标识一个元组的属性或属性组称为关系的码或候选码。若一个关系有多个候选码则可选其一作为主码或主键(Primary key)。
-
外码:如果一个关系的一个或一组属性引用(参照)了另一个关系的主码,则称这个或这组属性为外码或外键(Foreign key)。
-
关系数据库:依照关系模型建立的数据库称为关系数据库。它就是在某个应用领域的所有关系的集合。
-
关系模式:简单地说,关系模式就就是对关系的型的定义,包括关系的属性构成、各属性的数据类型、属性间的依赖、元组语义及完整性约束等。关系就是关系模式在某一时刻的状态或内容,关系模型就是型,关系就是值,关系模型就是静态的、稳定的,而关系就是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
-
实体完整性:用于标识实体的唯一性。它要求基本关系必须要有一个能够标识元组唯一性的主键,主键不能为空,也不可取重复值。
-
参照完整性:用于维护实体之间的引用关系。它要求一个关系的外键要么为空,要么取与被参照关系对应的主码值,即外码值必须就是主码中已存在的值。
-
用户定义的完整性:就就是针对某一具体应用的数据必须满足的语义约束。包括非空、唯一与布尔条件约束三种情况。
-
SQL:结构化查询语言的简称,就是关系数据库的标准语言。SQL就是一种通用的、功能极强的关系数据库语言,就是对关系数据存取的标准接口,也就是不同数据库系统之间互操作的基础。集数据查询、数据操作、数据定义、与数据控制功能于一体。
-
数据定义:数据定义功能包括模式定义、表定义、视图与索引的定义。
-
嵌套查询:指将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询。
-
数据库角色:被命名的一组与数据库操作相关的权限,就是权限的集合,通过角色授权可简化授权过程。用CREATE ROLE语句创建角色,然后用GRANT语句给角色授权。2.自主存取控制(DAC):通过将不同数据库对象的不同操作权限授予不同的用户,来实现数据安全性控制的一种机制。在这种机制下,DBA与属主用户可以将对象的操作权限自主授予她人,也可随时回收权限。
-
强制存取控制(MAC):就是建立在DAC之上的安全验证机制。这种机制分别对主体与客体施加敏感度标记(许可证与密级),标记与数据就是一个不可分的整体,数据的副本与正本一样拥有密级保护。
-
数据加密:就是根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文)的一种数据保护手段,加密可以使不知道解密算法的人无法获知数据的内容,从而防止数据在存储与传输过程中失密。
-
触发器:就是用户定义在基本表上的一类由事件驱动的特殊过程。由服务器自动激活,能执行更为复杂的检查与操作,具有更精细与更强大的数据控制能力。使用CREATETRIGGER命令建立触发器。
-
数据依赖:反映一个关系内部属性与属性之间的约束关系,就是现实世界属性间相互联系的抽象,属于数据内在的性质与语义的体现。
-
规范化理论:就是用来设计良好的关系模式的基本理论。它通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常与数据冗余问题。
-
函数依赖:简单地说,对于关系模式的两个属性子集X与Y,若X的任一取值能唯一确定Y的值,则称Y函数依赖于X,记作X→Y。
-
非平凡函数依赖:对于关系模式的两个属性子集X与Y,如果X→Y,但YcX,则称X→Y为非平凡函数依赖;如果X→Y,但 Yex,则称X→Y为非平凡函数依赖。
-
完全函数依赖:对于关系模式的两个属性子集X与Y,如果X→Y,并且对于X的任何一个真子集X’,都有X’→Y,则称¥对×完全函数依赖。
-
范式:指符合某一种级别的关系模式的集合。在设计关系数据库时,根据满足依赖关系要求的不同定义为不同的范式。
-
规范化:指将一个低一级范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式的集合的过程。
-
1NF:若关系模式的所有属性都就是不可分的基本数据项,则该关系模式属于1NF。
-
2NF:INF关系模式如果同时满足每一个非主属性完全函数依赖于码,则该关系模式属于2NF。
-
3NF:若关系模式的每一个非主属性既不部分依赖于码也不传递依赖于码,则该关系模式属于3NF。
-
BCNF:若一个关系模式的每一个决定因素都包含码,则该关系模式属于BCNF。
-
数据库设计:就是指对于一个给定的应用环境,构造优化的数据库逻辑模式与物理结构,并据此建立数据库及其应用系统,使之能够有效地存储与管理数据,满足各种用户的应用需求,包括信息管理要求与数据操作要求。
-
数据库设计的6个基本步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行与维护。
-
概念结构设计:指将需求分析得到的用户需求抽象为信息结构即概念模型的过程。也就就是通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS的概念模型。
-
逻辑结构设计:将概念结构模型(基本E-R图)转换为某个DBMS产品所支持的数据模型相符合的逻辑结构,并对其进行优化。
-
物理结构设计:指为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程。包括设计数据库的存储结构与存取方法。
-
抽象:指对实际的人、物、事与概念进行人为处理,抽取所关心的共同特性,忽略非本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。
-
代数优化:指针对关系代数表达式的优化。即通过对关系代数表达式的等价变换(主要为改变查询语句中操作的次序与组合)来提高查询效率。
-
物理优化:指针对存取路径与底层操作算法的优化。即选择高效合理的操作算法或存取路径,求得优化的查询计划以达到查询优化的目的。
-
事务:就是用户定义的一个数据库操作序列,这些操作要么全做,要么全部做,就是一个不可分割的工作单位,就是恢复与并发控制的基本单位;通常以BEGIN TRANSACTION开始,以COMMIT 或ROLLBACK结束。
-
数据库恢复:指把数据库从错误状态恢复到某一已知的正确状态(亦称一致状态或完整状态)的过程。
-
静态转储:指在系统中无事务运行时进行的转储操作。转储期间不允许对数据库的任何存取、修改活动,得到的一定就是一个数据一致性的副本。
-
动态转储:转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改。
1.2 数据库种类
1.2.1 DB2
BM DB2是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本。
DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下。 DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。 DB2以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。
DB2除了可以提供主流的OS/390和VM操作系统,以及中等规模的AS/400系统之外,IBM还提供了跨平台(包括基于UNIX的LINUX,HP-UX,SunSolaris,以及SCOUnixWare;还有用于个人电脑的OS/2操作系统,以及微软的Windows 2000和其早期的系统)的DB2产品。DB2数据库可以通过使用微软的开放数据库连接(ODBC)接口,Java数据库连接(JDBC)接口,或者CORBA接口代理被任何的应用程序访问。
1.2.2 Oracle
Oracle数据库(Oracle Database)是甲骨文公司推出的一个数据库管理系统。
Oracle数据库具有完整数据管理功能、完备关系产品、分布式处理功能、用ORACLE实现数据仓库操作等特色特点。
1.2.3 Sybase
美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。 Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在我国大中型系统中具有广泛的应用。
Adaptive Server Enterprise (ASE) 是 Sybase 的旗舰式 RDBMS 产品,一直致力于以最低的系统总拥有成本 (TCO) 为企业提供一个高性能的数据和事务处理系统。最新版 ASE12.5.1/12.5.2 在继续保持以前版本的关键业务性能和高效计算的同时,在易用性、系统性能和支持新应用程序方面进行了增强和改进, 并进一步提高了系统安全和 Linux 的可扩展性。Sybase Adaptive Server Enterprise 12.5.1 完善和扩展了 ASE 产品系列
1.2.4 Sql server
美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
1.2.5 Access
ACCESS是由微软发布的关系数据库管理系统,也是Microsoft Office的系统程序之一。[1]
它结合了Microsoft Jet Database Engine和图形用户界面两项特点,能够访问Access/Jet、Microsoft SQL Server、Oracle数据库,或者任何ODBC兼容数据库内的数据。
1.2.6 SQLite
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2019年已经有19个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
1.2.7 mySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,[1]属于Oracle旗下产品,是最流行的关系型数据库管理系统之一。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、开放源码等特点,一般中小型网站的开发都选择MySQL作为网站数据库。
2.mysql部署
2.1 准备工作
[root@yyx ~]#yum -y install wget //以下操作需要此命令,提前装上
2.2配置yum源
[root@yyx ~]#wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm //下载源包
[root@yyx ~]# rpm -Uvh mysql57-community-release-el7-10.noarch.rpm //安装包
2.2.1安装mysql
[root@yyx ]# wget https://repo.mysql.com//yum/mysql-5.7-community/el/7/x86_64/mysql-community-server-5.7.37-1.el7.x86_64.rpm //安装server
[root@yyx ]# wget https://repo.mysql.com//yum/mysql-5.7-community/el/7/x86_64/mysql-community-common-5.7.37-1.el7.x86_64.rpm //安装common
[root@yyx ]# wget https://repo.mysql.com//yum/mysql-5.7-community/el/7/x86_64/mysql-community-client-5.7.37-1.el7.x86_64.rpm //安装client
]
[root@yyx ]# wget https://repo.mysql.com//yum/mysql-5.7-community/el/7/x86_64/mysql-community-devel-5.7.37-1.el7.x86_64.rpm //安装devel
[root@yyx ]# wget https://repo.mysql.com//yum/mysql-5.7-community/el/7/x86_64/mysql-community-libs-5.7.37-1.el7.x86_64.rpm //安装libs
[root@yyx ~]# ls //查看当前路径确保没有多余的rpm包
anaconda-ks.cfg mysql-community-devel-5.7.37-1.el7.x86_64.rpm
mysql-community-client-5.7.37-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm
mysql-community-common-5.7.37-1.el7.x86_64.rpm mysql-community-server-5.7.37-1.el7.x86_64.rpm
[root@yyx ]# yum -y install *.rpm//全部一起安装
[root@192 ]# rpm -qa|grep mysql //检查是否安装成功
mysql-community-server-5.7.37-1.el7.x86_64
mysql-community-common-5.7.37-1.el7.x86_64
mysql-community-client-5.7.37-1.el7.x86_64
mysql-community-devel-5.7.37-1.el7.x86_64
mysql-community-libs-5.7.37-1.el7.x86_64
2.3 MySQL
2.3.1启动mysql
[root@yyx2 ~]# systemctl status mysqld //查看MySQL状态
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
[root@yyx2 ~]# systemctl start mysqld //启动mysql
[root@yyx2 ~]# systemctl status mysqld //再次查看MySQL状态
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2022-04-18 20:49:45 CST; 16s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 13291 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD>
Process: 13242 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 13294 (mysqld)
Tasks: 27 (limit: 4724)
Memory: 247.8M
CGroup: /system.slice/mysqld.service
└─13294 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Apr 18 20:49:41 yyx2 systemd[1]: Starting MySQL Server...
Apr 18 20:49:45 yyx2 systemd[1]: Started MySQL Server.
[root@yyx2 ~]# systemctl enable --now mysqld //设置开机自启
[root@yyx2 ~]# systemctl status mysqld //查看是否应用
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2022-04-18 20:49:45 CST; 35min ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
[root@yyx2 ~]# ss -antl //查看3306端口是否启用
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 [::]:22 [::]:*
2.3.2 登陆mysql
[root@yyx2 ~]# grep 'password' /var/log/mysqld.log //查看密码
2022-04-18T12:49:43.183235Z 1 [Note] A temporary password is generated for root@localhost: z:hU;gep2n>y //此处为临时密码,一次性的
[root@yyx2 ~]# mysql -uroot -p'z:hU;gep2n>y' //这里输入临时密码
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> //出现这种标识符就代表登入成功
mysql> set password = password('951Yyx!!'); //进入需要立即设置密码
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql>exit //退出数据库
[root@yyx2 ~]# mysql -uroot -p'951Yyx!! //利用刚刚设置的密码来验证是否设置成功
mysql> //设置成功
//避免数据库自动升级,需要卸载最开始的yum源
[root@yyx2 ~]#rpm -e mysql57-community-release-el7-10.noarch.rpm
2.4 授权登陆
[root@yyx2 ~]# systemctl disable --now firewalld //关闭防火墙
[root@yyx2 ~]# setenforce 0
[root@yyx2 ~]# vi /etc/selinux/config //更改配置
SELINUX=disabled //这一行改为disable
mysql> GRANT all ON *.* TO 'root'@'192.168.222.1' IDENTIFIED BY '951Yyx!!'; //给主机授予所有的权限在所有的数据库中的任何文件
mysql> flush privileges; //重启以至于配置生效
3. 主机连接Mysql
打开Navicat 点击新建连接
利用Navicat 新建连接登陆数据库
授权登陆成功
4. mysql工具使用
//语法:mysql [OPTIONS] [database]
//常用的OPTIONS:
-uUSERNAME //指定用户名,默认为root
-hHOST //指定服务器主机,默认为localhost,推荐使用ip地址
-pPASSWORD //指定用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
// -V 查看当前使用的mysql版本
[root@yyx2 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using EditLine wrapper
//-e //不登录mysql执行sql语句后退出,常用于脚本
[root@yyx2 ~]# mysql -uroot -p -e 'SHOW DATABASES;' //''里接执行语句
Enter password: //此处输入密码
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
过程中出现的问题及其解决方法
问题:
mysql> set password = password('951yyx');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
//不符合密码复杂性要求
解决方法:需要满足有大小写字母,数字,符号任意三种组成8位以上.
//没有给主机授权
解决方法:
mysql> GRANT all ON *.* TO 'root'@'主机ip地址' IDENTIFIED BY '数据库登陆密码';
mysql> flush privileges;
//如果设置过后仍然显示这个问题,这是防火墙没关
解决方法:
[root@yyx2 ~]# systemctl disable --now firewalld //关闭防火墙
[root@yyx2 ~]# setenforce 0
[root@yyx2 ~]# vi /etc/selinux/config //更改配置
SELINUX=disabled //这一行改为disable
问题:
-bash: wget: command not found
原因:没有装wget
解决方法:
[root@yyx ~]#yum -y install wget