一、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
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
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