数据库基础

一、数据库概述

​ 数据:描述事物的符号记录,可以是数字,也可以是文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。

​ 数据库:存储数据的仓库,是长期存放在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定数据模型组织、描述和存储,具有较小的冗余度,较高的独立性和易扩展性,并为各种用户共享,即数据库有永久存储、有知识和可共享三个基本特点。

数据库服务器的基本概念
DBMS 数据库管理系统(能够操作和管理数据库的大型软件)

1.层次模型(Hie`rchical)

层次模型是数据库系统最早使用的一种模型,它的数据结构是一棵“有向树”。根结点在最上端,层次最高,子结点在下,逐层排字段。层次模型的特征是:
有且仅有一个结点没有父结点,它就是根结点;
其他结点有且仅有一个父结点。图所示为一个系教务管理层次数据模型,图(a)所示的是实体之间的联系,图(b)所示的是实体型之间的联系。
最有影响的层次模型的DBS是20世纪60年代末,IBM公司推出的IMS层次模型数据库系统。

2.网状模型(Network)

​ 网状模型以网状结构表示实体与实体之间的联系。网中的每一个结点代表一个记录类型,联系用链接指针来实现。网状模型可以表示多个从属关系的联系,也可以表示数据间的交叉关系,即数据间的横向关系与纵向关系,它是层次模型的扩展。网状模型可以方便地表示各种类型的联系,但结构复杂,实现的算法难以规范化
其特征是:
​ 允许结点有多于一个父结点;
​ 可以有一个以上的结点没有父结点。

下图所示为一个系教务管理网状数据模型。

3.关系模型(Relation)

​ 关系模型以二维表结构来表示实体与实体之间的联系,它是以关系数学理论为基础的。关系模型的数据结构是一个“二维表框架”组成的集合。每个二维表又可称为关系。在关系模型中,操作的对象和结果都是二维表。关系模型是目前最流行的数据库模型。支持关系模型的数据库管理系统称为关系数据库管理系统,Access就是一种关系数据库管理系统。图所示为一个简单的关系模型,其中图(a)所示为关系模式,图(b)所示为这两个关系模型的关系,关系名称分别为教师关系和课程关系,每个关系均含3个元组,其主码均为“教师编号”。

描述的一致性,不仅用关系描述实体本身,而且也用关系描述实体之间的联系;

可直接表示多对多的联系;

关系必须是规范化的关系,即每个属性是不可分的数据项,不许表中有表;

关系模型是建立在数学概念基础上的,有较强的理论依据。

在关系模型中基本数据结构就是二维表,不用像层次或网状那样的链接指针。记录之间的联系是通过不同关系中同名属性来体现的。例如,要查找“刘晋”老师所上的课程,可以先在教师关系中根据姓名找到教师编号“1984030”,然后在课程关系中找到“1984030”任课教师编号对应的课程名即可。通过上述查询过程,同名属性教师编号起到了连接两个关系的纽带作用。由此可见,关系模型中的各个关系模式不应当是孤立的,也不是随意拼凑的一堆二维表,它必须满足相应的要求。

RDBMS 关系式数据库

​ 1.数据以表格的形式出现
​ 2.每行为各种记录名称
​ 3.每字段为记录名称所对应的数据域
​ 4.许多的行和字段组成一张表单(table)
​ 5.若干的表单组成库(database)

数据表

​ 记录(数据)
​ 字段(id name …)
​ 字段类型

​ 数据类型用于指定特定字段所包含数据的规则,它决定了数据保存在字段里的方式,包括分配给字段的宽度,以及值是否可以是字母、数字、日期和时间等。任何数据或数据的组合都有对应的数据类型,用于存储字母、数字、日期和时间、图像、二进制数据等。数据类型是数据本身的特征,其特性被设置到表里的字段。

SQL语言最基本的数据类型是:
字符串类型(char(0-255),varchar(0-65535))
数值类型(int、float)
日期和时间类型(date)
NULL数据类型(任意类型)

约束
域约束:数据类型约束
外键约束:引用完整性约束
主键约束:某字段能惟一标识此字段所属的实体,并且不允许为空,一张表中只能有一个主键
惟一性约束:每一字段都不允许出现相同值,可以为空,一张表中可以有多个

索引
索引是一个单独的、物理的数据库结构,它是某个表中一字段或若干字段值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。通常,索引页面相对于数据页面来说小得多。数据检索花费的大部分开销是磁盘读写,没有索引就需要从磁盘上读表的每一个数据页,如果有索引,则只需查找索引页面就可以了。所以建立合理的索引,就能加速数据的检索过程。


数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

数据库逻辑关系:
表示层:表(数据)
逻辑层:存储引擎(提供存储、创建、更新、查询数据的实现方法)
物理层:文件

数据库存储和查询:
存储管理器(实现存储的功能,通过DDL创建数据表的结构,再通过DML来保存数据)
事务管理器:提供事务功能
文件管理器:保存数据库数据和文件的对应关系
权限及完整性管理器:设置存储权限
缓冲管理器:管理缓冲空间
查询管理器:(实现查询的功能,接收用户的查询请求、理解用户查询请求,将查询请求提交给存储管理器、实现最终存储)

DML 解析器:用来操作数据库中的数据
INSERT
DELETE
SELECT
UPDATE

DDL 解析器:用来建立数据库、定义数据关系
CREATE
DROP
ALTER

DCL 解析器:用来控制数据库组建的权限
GRANT
REVOKE

程序跟数据库的连接方式:
JDBC:(动态SQL):程序设计语言使用函数(mysql_connect())与RDBMS服务器建立连接,并进行交互;通过建立连接向SQL服务器发送查询语句,并将结果保存至变量中而后进行处理
ODBC:(嵌入式SQL)与动态SQL类似,但其语言必须程序编译时完全确定下来

mysql 支持的存储引擎
MYISAM
默认引擎、插入和查询速度较快
不支持事务、行级锁和外键约束等功能
注:事务:一段sql语句的批处理、为了保证数据原子性

锁:行级锁(冲突少、速度慢);表级锁(冲突多、速度快);页级锁(折中方案)
INNODB
支持事务、行级锁和外键约束等功能

​ MEMORY
​ 工作在内存中,通过散列字段保存数据,速度快、不能永久保存数据

事务(Transaction)是并发控制的基本单位。
所谓的事务,它是一个操作序字段,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
针对上面的描述可以看出,事务的提出主要是为了解决并发情况下保持数据一致性的问题。

事务具有以下4个基本特征。
1.Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
2.Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
3.Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
4.Durability(持久性):事务结束后,事务处理的结果必须能够得到固化

数据库工作模式
单进程多线程的工作模式
守护线程
应用线程(用户线程)

mysql优化
1.垂直扩展
2.线程重用
3.缓存机制(redis、mongodb)

E-R模型
实体关系模型
实体:数据对象,即看得见摸得着
联系:表示一个或多个实体之间的关联

数据库的版本
社区版
企业版
集群版

二、命令

数据库的安装

1.专用软件包管理器(二进制)
deb 、rpm等
mysql MySQL客户端程序和共享库
mysql-server MySQL服务器需要的相关程序

2.源代码软件包(编译安装)
configure、cmake
数据库常用的配置选项
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql ----指定安装路径(默认的就是/usr/local/mysql)
-DMYSQL_DATADIR=/data/mysql ----mysql的数据文件路径
-DSYSCONFDIR=/etc ----配置文件路径
-DWITH_INNOBASE_STORAGE_ENGINE=1 ----使用INNOBASE存储引擎
-DWITH_READLINE=1 ----支持批量导入mysql数据
-DWITH_SSL=system ----mysql支持ssl
-DWITH_ZLIB=system ----支持压缩存储
-DMYSQL_TCP_PORT=3306 ----默认端口3306
-DENABLED_LOCAL_INFILE=1 ----启用加载本地数据
-DMYSQL_USER=mysql ----指定mysql运行用户
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock ----默认套接字文件路径
-DEXTRA_CHARSETS=all ----是否支持额外的字符集
-DDEFAULT_CHARSET=utf8 ----默认编码机制
-DWITH_DEBUG=0 ----DEBUG功能设置

3.服务:mysqld
4.端口:3306
5.主配置文件:/etc/my.cnf
6.初始化脚本:mysql_install_db
7.启动命令:mysqld_safe
8.数据目录 : rpm: /var/lib/mysql
源码: PREFIX/data
9.套接字文件:rpm: /var/lib/mysql/mysql.sock
源码: PREFIX/data/mysql.sock
自定义路径:/tmp
#当意外关闭数据库时,再开启时假如开启不了,找到这个,删除再启动
#mysql.sock文件的路径要保证 mysql 的进程有权限进行创建文件
mysql的进程需要对目录具有 w 权限,才能在目录内创建 mysql.sock 文件
10.进程文件:/var/run/mysqld/mysqld.pid

登录及退出mysql环境

a)   设置密码 mysqladmin  -uroot  password '123'
b)   登录    mysql -u 用户名 -p
						-p 用户密码 
						-h 登陆位置(主机名或ip地址)
						-P 端口号(3306改了就不是了)
						-S 套接字文件(/var/lib/mysql/mysql.sock)
c)   退出    exit && ctrl+d

Mysql sql语句

Mysql命令 功能
show databases; 查看服务器中当前有哪些数据库
use 数据库名; 选择所使用的数据库
create database 数据库名; 创建数据库
drop database 数据库名; 删除指定的数据库
MySQL命令 功能
create table 表名 (字段1 类型1,…); 在当前数据库中创建数据表
show tables; 显示当前数据库中有哪些数据表
describe 表名; 显示当前或指定数据库中指定数据表的结构(字段)信息
drop table 表名; 删除当前或指定数据库中指定的数据表
alter table 旧表名 rename 新表名; 修改数据表的名称
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮-00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值