mysql是基于关系模型的数据库_MySQL系列:MySQL关系型
数据库架构
⼀、RDBMS关系型数据库管理系统概述
1.RDBMS概念
RDBMS:关系型数据库管理系统,是建⽴在关系模型基础上的数据库,借助于集合代数等数学概念和⽅法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均⽤关系模型来表⽰。⼀般为C/S架构,通过专有协议交互。
关系模型是表(⾏,列)组成的⽽为结构,称为⼆维关系
关系模型的分类:关系模型、实体-关系模型、基于对象的关系模型、半结构化关系模型
2.范式
范式是指设计时的规范,各种范式呈递次规范,越⾼的范式数据库冗余越⼩。
⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)
、第四范式(4NF)和第五范式
(5NF,⼜称完美范式)
关系性数据库最低需要满⾜第⼀范式(1NF),⼀般说来,数据库只需满⾜第三范式(3NF)就⾏了。第⼀范式(1NF)所有的域都是原⼦性的,⽆重复的域
第⼆范式(2NF)要求数据库表中的每个实例或记录必须可以被唯⼀地区分
第三范式(3NF)任何⾮主属性不得传递依赖于主属性。
3.SQL(Structure QueryLanguage)结构化查询语⾔
SQL接⼝:Structured Query Language。类似于OS的shell接⼝;也提供编程功能;
ANSI: SQL标准,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
数据定义语⾔(Data Definition Language,DDL)、数据操作语⾔(DataManipulation Language,DML)、数据控制语⾔(Data Control Language,DCL)
4.数据库组成相关概念
(1)相关术语
表:为了满⾜范式设计要求,将⼀个数据集分拆为多个;
视图:虚表的概念
约束:constraint,向数据表插⼊的数据要遵守的限制规则;
主键:⼀个或多个字段的组合,填⼊主键中的数据,必须不同于已存在的数据;不能为空;
外键:⼀个表中某字段中能插⼊的数据,取决于另外⼀张表的主键中的数据;
惟⼀键:⼀个或多个字段的组合,填⼊惟⼀键中的数据,必须不同于已存在的数据;可以为空;
检查性约束:取决于表达式的要求;
索引:将表中的某⼀个或某些字段抽取出来,单独将其组织⼀个独特的数据结构中;有助于读请求,但不利于写请求;
事务(Transaction):组织多个操作为⼀个整体,要么全部都执⾏,要么全部都不执⾏;
(2)数据库三层模型
物理层:表现在物理设备上表空间
逻辑层:数据库内建的组件
视图层:⽤户实际能够看见的相关信息
(3)关系运算
选择:挑选出符合条件的⾏;
投影:挑选出符合需要的列;
连接:将多张表关联起来;
5.RDBMS解决⽅案:
商业解决⽅案:Oracle, Sybase, Infomix, DB2
开源解决⽅案:MySQL, MariaDB, PostgreSQL, SQLite
补充:Mysql开源、关系型、ISAM存储引擎核⼼算法前⾝
Oracle关系型数据库管理系统,技术领先、⼤型企业
DB2⽀持多媒体、WEB关系型数据库
SQL server微软产品
PostgreSQL唯⼀⽀持事务、⼦查询、多版本并⾏控制系统、数据完整性检查等特性⾃由软件
⼆、MySQL基础
1.MySQL架构
mysql是单进程多线程模型:每个⽤户连接都会创建对应的连接线程,⽀持长链接和短链接线程。其架构组件如下:Connection Pool连接池(认证、线程重⽤、线程池连接上限、检查内存、线程缓存...)
SQL InterfaceSQL解释器(DML、DDL、⽀持过程式编程、代码块实现、视图、词法分析语法分析… ...)
Parser分析器(查询翻译、⽤户请求对象访问权限检测)
Optimzer负责评估多条访问路径评估开销,完成对查询请求的优化,⽣成统计数据
Pluggable Storage Engines插件式存储引擎:MyISAM、InnoDB、NDB… ...⽀持⾃编译存储引擎
引擎完后对磁盘路径的转换映射,加载⾄内存中给进程调⽤
Cacehs&Buffers缓存缓冲组件
管理服务⼯具备份恢复、安全、复制⼯具、集服务、管理配置、数据迁移… ...
MySQL数据⽂件类型:
数据⽂件Data、索引⽂件Index
重做⽇志Redo、撤消⽇志Undo、⼆进制⽇志Binary、错误⽇志Error、查询⽇志Query、慢查询⽇志Slow Query、(中继⽇志)
2.监听套接字地址
⽅式⼀:监听在IPv4地址的3306/tcp端⼝
⽅式⼆:Unix Sock(客户端和服务端在同⼀台主机C S: localhost, 127.0.0.1)
其套接字⽂件位置:/var/lib/mysql/mysql.sock(RPM包安装), /tmp/mysql.sock(通⽤⼆进制、源码编译安装)
3.程序的组成
(1)客户端程序:
mysql:CLI交互式客户端程序;
mysqldump:mysql数据备份⼯具;基于Mysql协议发起查询请求并将查询结果转换成insert等写操作语句保存在⽂件中mysqladmin:管理⼯具;基于Mysql协议可远程连接管理
mysqlbinlog:查看⼆进制⽇志⼯具
mysqlimport:数据导⼊⼯具
… ...
(2)Server服务端
mysqld
下载mysql服务端命令mysqld_safe:建议运⾏服务端程序;线程安全的mysql
mysqld_multi:多实例;
myisamchk:检查修复isam表
myisampack: 打包存放myisam表,打包后只能实现查询操作、只读
… ...
4.配置⽂件格式
mysql的配置⽂件是集中式的配置,能够为mysql的各应⽤程序提供配置信息
[mysqld]专⽤于mydqld应⽤程序的配置信息
[mysqld_safe]线程安全mysql相关的配置信息
[mysqld_multi]多实例模型的mysql配置共享参数
[server]服务端
[mysql]专⽤于客户端
[mysqldump]专⽤于数据备份导⼊导出配置段
[client]对客户端都有效的配置
注意:
1)[mysqld]、mysqld_safe]、[mysqld_multi]只会启动⼀个
2)配置⽂件parameter = value,其中parameter有两种风格(skip-name-resolve、skip_name_resolve),建议在配置时同⼀风格
3)查配置⽂件路径如下,会⼀次遍历查询路径:
/
etc/myf--> /etc/mysql/myf --> $MYSQL_HOME/myf -->--default-extra-file=/path/to/somedir/myf --> ~/.myf 5.安装后的设定:
(1) 为所有root⽤户设定密码(三种⽅法)
mysql> SET PASSWORD即使⽣效
mysql>update mysql.user SET password=PASSWORD('your_pass') WHERE cluase;
更新mysql库user表,该⽅案需要需要⼿动刷新授权表
#mysqlamin
(2) 删除所有匿名⽤户
mysql>DROP USER ''@'localhost';
上述两步骤可运⾏命令:mysql_secure_installation
(3)建议关闭主机名反解功能;
三、命令⾏⼯具:mysql
交互式模式(可运⾏命令有两类)
客户端命令:\h,help
服务器端命令:SQL,需要语句结束符;
脚本模式:
#mysql -uUSERNAME -hHOST -pPASSWORD < /path/from/somefile.sql
mysql>source /path/from/somefile.sql
mysql [OPTIONS][database]-u, --user=⽤户名,默认为root;
-h, --host=远程主机(即mysql服务器)地址,默认为localhost;
-p, --passowrd=USERNAME所表⽰的⽤户的密码; 默认为空;
-
P, --port=指明连⼊服务器的端⼝
-S, --socket=套接字⽂件位置,客户端服务端在同⼀主机上时候,-h在localhost、127.0.0.1
-D, --database=连接到服务器端之后,设定其处指明的数据库为默认数据库;
-C, --compress输⼊输出时候是否压缩
-e 'SQL COMMAND;'不⽤进⼊交互模式,数据库执⾏SQL语句,可在脚本中定义
注意:
1) mysql的⽤户账号由两部分组成:'USERNAME'@'HOST';其中HOST⽤于限制此⽤户可通过哪些远程主机连接mysql
2) HOST⽀持使⽤通配符:
%:匹配任意长度的任意字符;172.16.%.%, 172.16.0.0/16
_:匹配任意单个字符;
3.客户端命令:本地执⾏
直接在mysql客户端命令⾏模式下输⼊命令:help显⽰帮助信息
\u db_name设定哪个库为默认数据库
\q退出;
\d CHAR设定新的语句结束符;
\g语句结束标记;
\G语句结束标记,结果竖排⽅式显式;
\s:显⽰客户端版本类型
实例:mysql> \s
4.服务端(mysqld)命令
通过mysql连接发往服务器执⾏并取回结果;可以⽀持DDL, DML, DCL
注意:每个语句必须有语句结束符,默认为分号(;)
5.常⽤的⼀些命令
(1)获取程序默认使⽤的配置:
~] # mysql --print-defaults
~] # mysqld --print-defaults
(2)获取可⽤参数列表:mysqld--help --verbose
(3)获取运⾏中的mysql进程使⽤各服务器参数及其值:
mysql> SHOW GLOBAL VARIABLES;全局配置,管理权限的⽤户
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论