一、数据库简介
1.使用数据库的必要性
使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。
数据库具有以下特点。
可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
可以有效地保持数据信息的一致性、完整性,降低数据冗余。
可以满足应用的共享和安全方面的要求。
数据库技术是计算机科学的核心技术之一,具有完备的理论基础。对数据库基本概念的掌握,将有助于对数据库的理解。
2.数据库的基本概念
(1)数据
描述事物的符号记录称为数据(Data)。在数据库中,数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。相同格式和类型的数据统一存放在一起,这样,数据的存储就能够井然有序。
(2)数据库和数据库表
不同的记录组织在一起,就形成了数据库(Database,DB)的“表”(Table)。也可以说,表是用来存储具体数据的,那么数据库和表存在什么关系呢?简单地说,数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合。
通常,数据库并不是简单地存储这些数据的,还要表示它们之间的关系。因此关系的描述也是数据库的一部分。
(3)数据库管理系统和数据库系统
数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作。DBMS主要包括以下功能。
数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的转储与恢复、数据库的重组与性能监视等功能。
数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出。
数据操纵功能:包括数据查询统计和数据更新两个方面,
数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控制、数据库内部维护等功能。
通信功能:DBMS 与其他软件系统之间的通信,如Access 能与其他 Office 组件进行数据交换。
数据库系统(Database System,DBS)是一个人—机系统,一般由硬件、操作系统、数据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可以通过 DBMS 操作数据库,也可以通过应用程序操作数据库。
3.经典数据模型
数据是现实世界中“量”的抽象,而数据模型(Data Model)是数据特征的抽象。在数据库系统中,数据模型是它的核心与基础。数据模型表现为数据的结构、定义在其上的操作及约束条件。它从概念层次上描述了系统的静态特征、动态特征和约束条件,为数据库系统
的信息表示与操作提供了一个抽象框架。
在 DBMS 的发展过程中,出现了网状模型、层次模型和关系模型三种经典的数据模型。由于受限于数学基础、编程技术和硬件条件,最初出现的层次模型和网状模型与关系模型相比,在用户接口的上、中层部分更易于实现。所以,这在很长一段时间阻碍了关系模型的发展。
关系模型相比网状模型和层次模型有更为坚实和完整的理论基础。相比层次模型和网状模型而言,关系模型与用户更靠近些,而网状模型和层次模型与底层实现的结合更紧密。这样的特色也更容易让关系模型成为商业数据库的选择。
关系模型建立在关系代数的理论基础上,数据结构使用简单易懂的二维数据表,可以用简单的“实体-关系”(E-R)图来直接表示,E-R图中包含了实体(数据对象)、关系和属性三个要素。
实体:也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物。
实体集:具有相同类型及共享相同性质的实体集合。
属性:实体所具有的某一特性,一个实体可以有多个属性。
联系:实体集之间的对应关系称为联系,也称为关系。
二、关系数据库的基本概念
关系数据库系统是基于关系模型的数据库系统,是关系模型应用到数据库领域的实例化。它的基本概念来自于关系模型。
1.关系数据库的基本结构
关系数据库使用的存储结构是多个二维表格,即反映事物及其联系的数据描述是以平面表格形式体现的。
在每个二维表中,每一行称为一条记录,用来描述一个对象的信息;每一列称为一个字段,用来描述对象的一个属性。数据表与数据库之间存在相应的关联,这些关联用来查询相关的数据。
关系数据库是由数据表之间的关联组成的。其中:
数据表通常是一个由行和列组成的二维表,每一个数据表分别说明数据库中某一特定的方面或部分的对象及其属性。
数据表中的行通常叫做记录或者元组,它代表众多具有相同属性的对象中的一个。
数据表中的列通常叫做字段或者属性,它代表相应数据库中存储对象的共有属性。
2.主键与外键
(1)主键
数据表中的每行记录都必须是唯一的,而不允许出现完全相同的记录,通过定义主键(主关键字,Primary Key)可以保证记录(实体)的唯一性。
键,即关键字,它是关系模型中一个非常重要的元素。主键唯一标识表中的行数据,一个主键值对应一行数据。
主键由一个或多个字段组成其值具有唯一性,不允许取空值(NULL)。一个表只能有一个主键。
(2)外键
一个关系数据库通常包含多个表,通过外键(Foreign Key)可以使这些表关联起来。
外键是用于建立和加强两个表数据之间的链接的一列或多列。通过将表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就称为第二个表的外键。
3.数据库完整性规则
为了维护数据库中的数据与现实世界的一致性,关系数据库的数据与更新操作必须遵守下列四类完整性规则。
(1)实体完整性规则
实体完整性规则要求关系中的元组在主键的属性上不能有空值。如果出现空值,那么主键值就起不到唯一标识元组的作用。
(2)域完整规则
域完整性也称列完整性,指定一个数据集对某一个列是否有效或确定是否允许空值。
(3)引用完整性规则
如果两个表之间相互关联,那么引用完整性规则要求不允许引用不存在的元组
(4)用户定义的完整性规则
用户定义的完整性规则是针对某一具体数据的约束条件,由应用环境决定。它反映某一具体应用所涉及的数据必须满足的语义要求。系统提供定义和检验这类完整性的机制,以便用统一的系统方法进行处理,不再由应用程序承担这项工作。
二、MySQL服务基础
MySQL 是一个真正的多线程、多用户的 SQL 数据库服务,凭借其高性能、高可靠和易于使用的特性,成为服务器领域中最受欢迎的开源数据库系统。在2008年以前,MySQL 项目由 MySQL AB 公司进行开发、发布和支持,之后历经 Sun 公司收购 MySQL AB 公司,0racle 公司收购 Sun 公司的过程,目前 MySQL 项目由 0racle 公司负责运营和维护。
1.源码编译及安装
(1)创建运行用户
为了加强数据库服务的权限控制,建议使用专门的运行用户,如mysql用户。此用户不需要直接登录到系统,可以不创建宿主文件夹。
[root@www ~]# groupadd mysql
[root@www ~]# useradd -M-s /sbin/nologin mysql
(2)解包
将下载的 MySQL源码包解压,移动到/usr/loca/mysql 目录下。
[root@www ~]# tar zxf mysql-5.7.28.tar.gz
[root@www ~]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql
(3)配置
[root@localhost ~]# cd /usr/local/mysql/
[root@localhost mysql]# chown -R mysql:mysql data/
[root@localhost mysql]# cd bin/
[root@localhost bin]# ./mysqld --user=mysql --basedir=/usr/local/mysql/
--datadir=/usr/local/mysql/data/ --initialize
2.安装后的其他调整
(1)建立配置文件
MySQL 通过源码编译方式安装,从5.7.18版本开始在安装包内不提供默认的配置文件my-default.cnf,需要手动创建 MySQL 配置文件/etc/my.cnf。MySQL 的配置参数非常丰富,可以根据不同的需求进行调整。这里只给出基本配置,具体内容如下。
[root@localhost ~]# vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
#绑定监听地址 0.0.0.0
bind-address = 0.0.0.0
skip-name-resolve
#设置 3306 端口
port = 3306
# 设置 mysql 的安装目录
basedir=/usr/local/mysql
# 设置 mysql 数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=2048
# 服务端使用的字符集默认为 utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#表名大小写不敏感
lower_case_table_names=1
#mysql服务允许接受的数据包最大值
max_allowed_packet=16M
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
#pid-file=/var/run/mariadb/mariadb.pid
3.添加系统服务
若希望添加mysqld系统服务,以便通过systemctl进行管理,可以直接使用源码包中提供的服务脚本。找到support-files文件夹下的mysql.server脚本文件,将其复制到/etc/rc.d/init.d目录下,并改名为mysqld,然后再设置执行权限。
[root@www mysql-5.7.28]# cp support-files/mysql.server /etc/init. d/mysqld
[root@www mysql-5.7.28]# chmod +x /etc/init.d/mysqld
将MySQL添加为systemd标准服务,之后方便使用“systemctl”命令进行管理。
[root@www ~]# vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
tExecStop=/etc/rc.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@www~]# systemctl daemon-reload
[root@www~]# systemctl enable mysqld
[root@www~]# systemctl start mysqld
这样,以后就可以使用 systemct1 工具或直接调用/etc/init.d/mysqld 脚本来控制MySQL 数据库服务了。例如,若要启动 mysqld服务,并查看其运行状态,可以执行以下操作。
MySQL 服务器默认通过 TCP 3306端口提供服务。通过编辑/etc/my.cnf 配置文件中[mysqld]配置段的“port = 3306”行,可以更改监听端口。