数据库
数据库是数据的汇集,它以一定的形式存储在存储介质上
数据库的发展史
- 萌芽阶段:文件系统,使用磁盘文件来存储数据
- 初级阶段:第一代数据库,出现了网状模型、层次模型的数据库
- 中级阶段:第二代数据库,关系型数据库和结构化查询语言
- 高级阶段:新一代数据库,“关系-对象”型数据库
数据库管理系统和文件管理系统
- 文件管理系统的缺点是:
- 编写应用程序不方便
- 数据冗余不可避免
- 应用程序依赖性
- 不支持对文件的并发访问
- 数据间练习弱
- 难以按照用户视图表示数据
- 无安全控制功能
- 数据库管理系统(DBMS)的优点
- 相互关联的数据的集合
- 较少的数据冗余
- 程序与数据相互独立
- 保证数据的安全、可靠
- 最大限度地保证数据的正确性
- 数据可以并发使用并能同时保证一致性
DBMS是管理数据库的软件,它实现数据库系统的各种功能,是数据库的核心。他的基本功能包括数据定义、数据处理、数据安全、数据备份。 数据库管理员(DBA)负责数据库的规划、设计、协调、维护和管理工作,应用程序指以数据库为基础的应用程序。
- 数据库的架构
- 单机架构:部署在一个计算机上的数据库系
- 大型主机/终端架构:
- 客户/服务器式架构:是在客户/服务器计算机网络上运行的DBS,是将存储、修改和运行功能放在服务器上,而查询放在客户端上的结构
- 分布式架构:将分散存储在计算机网络中的多个节点上的数据库在逻辑上统一管理
- 关系型数据库
- 关系:关系就是二维表,表中的行(row)、列(column)次序并不重要。
- 行:表中的每一行也称为一条记录
- 列:表中每一列称为属性或者字段
- 主键(Primary Key):用于唯一确定一个记录的字段
- 域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值
- 对象关系型数据库(ORDBMS)
- MySQL:MySQL(现为Oracle公司的产品),MariaDB,Percona server
- PostgreSQL:简称pgsql,EnterpriseDB
- Oracle:
- MSSQL:微软的数据库管理系统软件
- 事物transaction:多个操作被当做一个整体对待,事物的特性ACID:原子性、一致性、隔离性、持久性。
- 实体-联系模型
- 实体Entity:客观存在并且可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形表示实体
- 属性:实例所具有的特征或性质
- 联系:是数据之间的关联集合,是客观存在的应用语义链。联系分为实体间的联系和实体内部的联系。实体内部的联系指组成实体的个属性之间的联系。实体之间的联系是指不同实体之间的联系。实体之间的联系用菱形表示。
- 联系类型有一对一联系,一对多联系,多对多联系
- 数据三要素
- 数据结构包含两类,一是与数据类型、内容、性质有关的对象,另一类是与数据之间联系有关的对象,他从数据组织层表达数据记录与字段的结构
- 数据的操作:数据提取是在数据集合中提取感兴趣的内容;数据更新是指变更数据库中的数据
- 数据的约束条件:是一组完整性规则的集合,包括实体完整性(Entity integrity)、与完整性(Domain integrity)和参考完整性(Referential integrity)。
- 简易数据规划流程
- 第一阶段收集数据,得到字段。收集必要且完整的数据项,转换成数据表的字段
- 第二阶段把字段分类,归入表,建立标的关联。分割数据表并建立关联的优点,节省空间,减少输入错误,方便数据修改
- 第三阶段规范化数据库
数据库的正规化分析
- 关系型数据库管理系统设计范式基础概念 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递归次规范,越高的范式数据库冗余越小。
- 关系型数据库的六种范式
- 第一范式:1NF,无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即试题中的某个属性不能有多个值或者不能有重复的属性。第一范式是对关系模式的基本要求。
- 第二范式:2NF,属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常要为表加上一个列,以存储各个实例的唯一标示PK,非PK终端需要与整个PK有直接相关性
- 第三范式:3NF,属性不依赖与其它非主属性,满足第三范式必须满足第二范式。第三范式要求一个表中不包含其他表中已包含的非主关键字信息,非PK字段间不能有从属关系。
- 巴德斯科范式:BCNF(BOyce-Codd Normal Form),是第三范式的一个子集,满足BCNF必须满足第三范式。满足BCNF必须满足所有非主属性对每一个码都是完全函数依赖,所有主属性对每一个不包含他的码也是完全函数依赖,没有任何属性完全依赖于非码的任何一组属性
- 第四范式
- 第五范式又叫完美范式
结构化查询语言SQL
- SQL:Structure Query Language;sql解释器;数据存储协议:应用层洗衣,C/S
- S:server,监听于套接字,接受并处理客户端的应用请求
- C:client程序接口,命令行界面(cli)和图形用户界面(GUI);应用编程借口,开放数据库连接(ODBC)和Java数据库连接(JDBC)
约束
约束Constraint,表中的数据要遵守的限制
- 主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表中只能有一个
- 唯一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标示本行;允许为NULL,一个表中可以存在多个
- 外键:一个表中的某字段可以跳入的数据取决于另一个标的主键或唯一键已有的数据
- 检查:字段值在一段范围内
索引
将表中的一个或多个字段中的数据复制一份另存,并且此些需要按特定次序排序存储 关系运算:选择,挑选出符合条件的行;投影,挑出需要的字段;连接,标间字段的关联
数据模型
- 数据抽象
- 物理层:决定数据的存储格式
- 逻辑层:描述存储什么数据和数据间存在的关系
- 视图层:描述DB中的部分数据
- 关系模型的分类
- 关系模型
- 给予对象的关系模型
- 半结构化的关系模型:XML数据
MySQL
1985年,Michael Widenius创建了TCX公司 1996年,Michael Widenius发布了第一版mysql数据库 2008年,mysql被卖给了sun公司 2009年,Orcale公司收购了sun公司,同一年Michael Widenius退出sun公司创立了mariaDB
MySQL和MariaDB
- 安装
- 下载源代码编译安装
- 二进包制安装:二进制格式程序包展开到特定路径,并经过简单配置后可以使用
- 使用rpm包管理程序,从系统镜像中自带的rpm包安装
- 安装和使用MariaDB:Centos7直接提供yum源;可以根据官方的页面https://downloads.mariaddb.org/mariadb/repositories/增加yum仓库,然后下载。
- MariaDB的特性
- 单进程,多线程
- 插件式存储引擎:存储管理器有多种实现版本,功能和特性可能略有差别;用户可根据需要灵活选择
- 存储引擎称之为”表类型”
- 和mysql的对比
- 更多的存储引擎 MySQL ==> MariaDB MyISAM ==> Aria InnnoDB ==> XtraDB Mysql5.5.8开始InnoDB引擎是mysql的默认引擎,InnoDB对比MyISAM的最大特点就是它支持事物
- 诸多扩展和新特性
- 提供了较多测试组件
- 开源
CentOS 7的MariaDB数据库包括两个包组:MariaDB和MariaDB-client
- mariadb组包括下面的包:
- mariadb-server
- mariadb-bench
- mariadb-test -mariadb-client包括下面包:
- mariadb
- mysql-python
- mysql-connector-odbc
- libdbi-dbd-mysql
- mysql-connector-java
- perl-DBD-MySQL
- 配置文件:/etc/my.cnf和/etc/my.cnf.d/*.cnf
- 命令
- yum groupinstall mariadb mariadb-client //安装mariadb和mariadb命令行客户端
- systemctl start mariadb 启动数据库服务
- systemctl enable mariadb 设置数据库服务开机启动
- firewall-cmd –permament –add-service=mysql 允许访问3306端口
- firewall-cmd –reload 重新加载firewall配置文件,或者重启firewall服务也可以
- 提高安全性:安装完成后执行mysql_secure_installation脚本
- 设置数据库管理员root登录口令
- 禁止root远程登录
- 删除anonymous(匿名)账户
- 删除test数据库
- 配置
- 在配置文件mysqld项下面添加skip-networking=1,表示关闭网络连接,只侦听本地客户端
- socket的配置在/var/lib/msyql/mysql.socket文件中保存,默认没有配置。也可以在/etc/my.cnf中修改保存路径。
客户端工具
- 命令行交互式客户端程序mysql
- -uUSERNAME:用户名
- -hHOST:服务器主机;默认为localhost
- -pPASSWORD:用户的密码,建议使用-p直接回车,可以隐藏密码,默认为空
- mysql账户分为两部分:’USERNAME’@”HOST’
- HOST用于限制此用户可通过那些远程主机连接mysql服务,支持使用通配符:‘%’匹配任意长度的任意字符,‘_’匹配任意单个字符。
- 运行mysql命令:默认空密码登录
- MariaDB [(none)]> use mysql; 切换到mysql数据库
- MariaDB [mysql]> select user(); 查看当前登录用户
- MariaDB [mysql]> select User,Host,Password from user; 查询该数据库有多少用户及其主机和加密后的密码
- 客户端命令可以通过help查看,每个命令都有完整形式和简写格式
- 服务器端命令:通过MySQL协议发往服务器执行并取回结果,每个命令都必须使用命令结束符,默认是分号。
服务器参数
服务器端的工作特性定义方式分别是命令行选项和配置文件参数
- 获取可用参数列表可用命令“mysqld –help –verbose”
- 获取运行中的mysql进程使用各服务器参数和值
- show global variables;
- show [session] variables;
- 注意:其中有些参数支持运行时修改会立即生效;有些不支持,只能通过修改配置文件重启服务区生效;有些参数作用域是全局的,且不可改变;有些可以为每个用户提供单独的设置。
- 修改服务器变量的值 “MariaDB [(none)]> help set;”
- 修改全局变量
- MariaDB [(none)]> set global system_var_name=value;
- MariaDB [(none)]> set @@global.system_var_name=value;
- 状态变量用于保存mysqld运行中的统计数据的变量,不可更改
- MariaDB [(none)]> show global status;
- MariaDB [(none)]> show status;
关系型数据库的常见组件
- 数据库database
- 表table:
- 行row
- 列column
- 索引index
- 视图view
- 用户user
- 权限privilege
- 存储过程procedure,无返回值
- 存储函数function,有返回值
- 触发器trigger
- 时间调度群event scheduler,任务计划
SQL语句构成
keyword组成clause,多条clause组成语句
- 这是一组语句,有select、from、where三个字句构成,这三个词是keyword
- select *
- from products
- where price>400
- SQL语句:
- DDL数据定义语句 create、drop、alter
- DML数据操作语句 insert、delete、update
- DCL权限控制语句 grant、remove
- DQL数据查询语句 select
- SQL语言规范
- 在DMS中,sql语句不区分大小写,单字符常量区分大小写
- sql语句可单行或多行书写,以分号结尾;关键词不能跨多行或者简写
- 用空格和缩进来提高语句的可读性
- 子句通常位于独立行,便于编辑,提高可读性
- 注释:sql标准‘/*注释内容*/’代表多行注释,‘– 注释内容’单行注释,有空格;mysql注释使用‘#’
数据库操作
- 数据库对象的命名规则:必须以字母开头,可包括数字和三个特殊字符(#_$),不能使用mysql保留字,同意数据库下的对象不能同名
- 数据库的创建
create database|schema [if not exists] 'DB_NAME';
character set 'character set name'
collate 'collate name'
- 删除数据库
drop database|schema [if exists] 'DB_NAME';
- 查看支持所有字符集:show character set;
- 查看所有排序规则:show collation;
- 获取命令帮助:help keyword;
- 查看数据库列表:show databases;
表操作
- 创建表
- create table [if not exists] 'tbl_name' (col1 type1修饰符,col2 type2 修饰符,...)
- 字段信息
- col type1
- primary key(col1,...)
- index(col1,...)
- unique key(col1,...)
- 表选项
- engine [=] engine_name
show engines;查看支持的引擎类型
- row_format [=] {default|dynamic|fixed|compressed|redundant|compact}
- 获取帮助
help create table;
- 表操作
- 查看所有的引擎:show engine;
- 查看表:show tables [from db_name];
- 查看表结构:desc [db_name.]tb_name;
- 删除表:drop table [if exists] tb_name;
- 查看表创建命令:show create table tbl_name;
- 查看表状态:show table status like ‘tbl_name’\G;
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89510