当前位置: 首页 > news >正文

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、(中继日志)

70923d5c4bcf92611fd1b0b16533f497.png

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

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/my.cnf--> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf -->--default-extra-file=/path/to/somedir/my.cnf --> ~/.my.cnf

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

1.mysql的使用模式:

交互式模式(可运行命令有两类)

客户端命令:\h,help

服务器端命令:SQL,需要语句结束符;

脚本模式:

#mysql -uUSERNAME -hHOST -pPASSWORD < /path/from/somefile.sql

mysql>source /path/from/somefile.sql

2.mysql使用方法

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

fd0eedbd16fbf42b551df2c8af38ba3b.png

4.服务端(mysqld)命令

通过mysql连接发往服务器执行并取回结果;可以支持DDL, DML, DCL

注意:每个语句必须有语句结束符,默认为分号(;)

5.常用的一些命令

(1)获取程序默认使用的配置:

~] # mysql --print-defaults

~] # mysqld --print-defaults

(2)获取可用参数列表:mysqld--help --verbose

(3)获取运行中的mysql进程使用各服务器参数及其值:

mysql> SHOW GLOBAL VARIABLES;全局配置,管理权限的用户

mysql> SHOW [SESSION] VARIABLES;会话配置

注意:其中有些参数支持运行时修改,会立即生效;有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效;有些参数作用域是全局的,且不可改变;有些可以为每个用户提供单独的设置;

(4)修改服务器变量的值:mysql>help SET

全局:

mysql>SET GLOBAL system_var_name=value;

mysql>SET @@global.system_var_name=value;

会话:

mysql>SET [SESSION] system_var_name=value;

mysql>SET @@[session.]system_var_name=value;

(5)状态变量:用于保存mysqld运行中的统计数据的变量;

mysql> SHOW GLOBAL STATUS;

mysql>SHOW [SESSION] STATUS;

(6)查看支持字符集:mysql> SHOW CHARACTER SET;

(7)查看支持的引擎:mysql> SHOW ENGINES ;

(8)查看命令字符集和排序规则

mysql>SHOW CHARACTER SET;

mysql>SHOW COLLATION;

(9)SQLMODE:定义mysqld对约束等的响应行为

修改方式:修改的是默认配置,仅对修改后新创建的会话有效;对已经建立的会话无效;

mysql>SET GLOBAL sql_mode='MODE';

mysql>SET @@global.sql_mode='MODE';

只对当前会话生效

mysql>SET SESSION sql_mode='MODE';

mysql>SET @@session.sql_mode='MODE';

常用MODE(部分):TRADITIONAL、STRICT_TRANS_TABLES、STRICT_ALL_TABLES对于约束的响应级别不同

四、数据类型

1.数据类型概念

在创建表定义表中字段你是时候会确定其数据类型,用于确定数据存储格式、能参与运算种类、可表示的有效的数据范围

2.数据类型种类

(1)字符型:

CHAR, BINARY:定长数据类型;分配固定长度的内存空间

VARCHAR, VARBINARY:变长数据类型;需要结束符;这两个区分在于是否区分字符大小写

TEXT文本对象类别:TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT

BLOB对象存储:TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB

ENUM, SET:内置类型

(2)数值型:

精确数值型

整型数据:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

十进制型:DECIMAL

近似数值型:FLOAT、DOBULE

(3)日期时间型:

日期型:DATE

时间型:TIME

日期时间型:DATETIME

时间戳:TIMESTAMP于格林威治时间对比的秒数,相对时间计时法

年份:YEAR(2),YEAR(4)

3.数据类型修饰符

(1)字符类型修饰符

NOTNULL: 非空约束;

NULL:

DEFAULT'STRING': 指明默认值;

CHARACTER SET '':指明使用的字符集;

COLLATION:使用的排序规则

(2)整型数据修饰型:

NOT NULL不允许为空

NULL空

DEFAULT NUMBER默认长度

(3)AUTO_INCREMENT:

UNSIGNED无符号;字段数据类型的修饰符,紧跟在数据类型之后,不能跟在其他修饰符之后,

PRIMARYKEY|UNIQUE KEY

NOTNULL

(4)日期时间型修饰符:

NOT NULL、NULL、DEFAULT

(5)内建类型SET和ENUM的修饰符:

NOT NULL、NULL、DEFAULT

相关文章:

  • mysql nocount_存储过程之SET NOCOUNT ON/OFF 含义
  • mysql spatial简介_详细介绍mysql索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE
  • mysql联立两个表_mysql同时查询两个表
  • mysql 1308_MySQL恢复数据报ERROR 1308 : LEAVE with no matching label
  • macos 在线安装mysql_在MACOSX上安装MYSQL
  • vb mysql 设置数据源_总结 vb与数据库的连接方法
  • h+后台主题ui框架_开源推荐 - EAdmin开箱即用的后台UI框架
  • include 路径_最短路径的算法:Floyd算法
  • 2表关联查询的mysql代码_两个服务器上的两个数据库表进行关联查询(显示列表)...
  • python compare()_Python Speech Compare
  • n阶完全图边和顶点关系。_抽象代数23 群元素的阶和循环群
  • python中文件操作的相关函数是_python 操作windows下目录的相关函数
  • mysql根据当前时间戳更新不好使_Mysql – 尝试更新时间戳列时.它无法更新
  • linux配置pip源_Python pip源配置修改
  • matlab xlsread参数_Matlab读取Excel数据并绘制二维图
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 78. Subsets
  • ComponentOne 2017 V2版本正式发布
  • Sass Day-01
  • spring-boot List转Page
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • webpack项目中使用grunt监听文件变动自动打包编译
  • zookeeper系列(七)实战分布式命名服务
  • 百度地图API标注+时间轴组件
  • 诡异!React stopPropagation失灵
  • 技术:超级实用的电脑小技巧
  • 简单实现一个textarea自适应高度
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 全栈开发——Linux
  • 设计模式 开闭原则
  • 推荐一个React的管理后台框架
  • 小程序button引导用户授权
  • ​configparser --- 配置文件解析器​
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2)STM32单片机上位机
  • (C#)获取字符编码的类
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (六)软件测试分工
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (算法)Travel Information Center
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)编辑寄语:因为爱心,所以美丽
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .form文件_一篇文章学会文件上传
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net网站发布-允许更新此预编译站点
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决