今天学习了数据库给大家概括总结一下,有不对的还望大家指点!
什么是数据库
数据库是指长期存储在计算机内有组织可共享的数据和数据之间关系的集合。数据库中的数据按照一定的数据模型组织、描述和存贮,具有较小的冗余度、较高的数据独立性和易扩展性,并在一定范围内可以被多个用户所共享。
数值和数据。数据=元数据+数值
关系型数据库是建立在关系数据模型基础上的数据库,借助集合代数概念和方法处理数据库中的数据,同时也是一个被组织成拥有正式描述性的表格。该形式的表格实质是装载数据项的收集体,这些表格中的数据能以不同的方式被存取或重新召集而不需要更新组织数据库表格。
主流RDBMS有Oracle、DB2、SQL Server、Sybase、MySQL等。
什么是DBMS
数 据 库 管 理 系 统Database Management System,简称DBMS是位于用户与操作系统之间的一层数据管理软件。
DBMS的用途
科学地组织和存储数据、高效地获取和维护数据
DBMS的主要功能
数据定义功能
- 提供数据定义语言(DDL)
- 定义数据库中的数据对象
数据操纵功能
- 提供数据操纵语言(DML)
- 操纵数据实现对数据库的基本操作(查询、插入、删除和修改)
数据库的运行管理
- 保证数据的安全性、完整性
- 多用户对数据的并发使用
- 发生故障后的系统恢复
数据库的建立和维护功能(实用程序)
- 数据库数据批量装载、数据库转储
- 介质故障恢复、数据库的重组织、性能监视等
数据库特点
- 数据尽可能不重复,以最优方式为多种应用服务
- 数据结构独立于应用
- 对数据的CRUD由统一软件进行管理和控制
数据模型
在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。通俗地讲数据模型就是现实世界的模拟
数据模型分成两个不同的层次
1、概念模型也称信息模型,它是按用户的观点来对数据和信息建模,可以使用ER图进行描述。实体E,关系R。
矩形—实体 椭圆—属性 菱形—关系
数据模型主要包括层次模型、网状模型、关系模型等,它是按计算机系统的观点对数据建模。
ORM对象关系映射:hibernate、mybatis
2、物理数据模型
关系模式是最重要的一种数据模型。也是目前主要采用的数据模型
1970年由美国IBM 公司San Jose研究室的研究员E.F.Codd提出
在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成
它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据
RDBMS的特点
数据以表格的形式出现 -表在数学中被表示为关系:
每行为各种记录名称;
每列为记录名称所对应的数据域 ;
许多的行和列组成一张表单;
若干的表单组成database。
关系模型的优缺点
- 建立在严格的数学概念的基础上。
- 概念单一。
- 数据结构简单、清晰,用户易懂易用。
- 实体和各类联系都用关系来表示。
- 对数据的检索结果也是关系。
- 关系模型的存取路径对用户透明。
- 具有更高的数据独立性,更好的安全保密性。
- 简化了程序员的工作和数据库开发建立的工作。
缺点:存取路径对用户透明导致查询效率往往不如非关系数据模型
为提高性能,必须对用户的查询请求进行优化。增加了开发数据库管理系统的难度
常见的数据库产品
Oracle:运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域。
DB2:速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。
SQL Server:全面,效率高,界面友好,操作容易,但是不跨平台[2019支持windows、Linux和Docker]。适用于于中小型企业领域。
MySQL:开源,体积小,速度快。适用于中小型企业领域。
SQL
SQL结构化查询语言是一种数据库操作的非过程化编程语言,用于存取数据以及查询、更新和管理关系型数据系统,一般数据库脚本文件的扩展名也是.sql。
允许用户在高层数据结构上工作,不要求用户了解数据的存放方式,对于不同底层结构的数据库系统使用相同的数据输入与管理的接口
1986年10月美国国家标准化协会ANSI首先对SQL进行规范化,1987年国际标准化组织ISO定义了国际标准。但是各种数据库系统都对SQL规范进行了某些编改和扩充,所以不同数据库系统的SQL不能完全相互通用。
一个SQL类型的数据库对于使用者是便于理解和组织结构的,通过数据元与数据元之间的关系可以整理出对系统的数据处理逻辑,并且可以进行人为精简数据,达到最优或者较优解。
SQL的特点
- 综合统一、高度非过程化 4GL。
- 面向集合的操作方式。
- 以同一种语法结构提供两种使用方法;即可以直接以命令方式交互使用;也可以嵌入主语言中使用。
- 语言简洁,易学易用;在ANSI标准中,只包含了94个英文单词,核心功能只用6个动词,语法接近英语口语。
NoSQL
NoSQL泛指非关系型数据库。主要是针对超大规模和高并发的SNS类型动态网站的解决方案(Web2.0)。
常见的NoSQL数据库类型有4种
key-value数据库使用hash表存储数据,例如Redis。简单易部署,但是对部分值进行查询或更新时效率低下。
列存储数据库用于应对分布式存储的海量数据,键仍旧存在,只是指向了多个列,例如HBase。
文档型数据库该类型的数据模型是版本化的文档,半结构化的文档以JSON格式存储,例如MongoDB。
图形数据库主要用户关系计算Neo4j。
NoSQL的适用场景:
- 数据模型比较简单需要灵活性很强的IT系统。
- 对数据库性能要求较高不需要数据高度的一致性。
- 对于给定的key比较容易映射复杂值的环境。
SQL vs NoSQL
复杂查询SQL数据库比较擅长SQL数据库不适合分层次的数据存储,而NoSQL数据库可以很好地存储分层次的数据,更适用于大数据。
对于基于大量事务的应用SQL非常适合,更加稳定,能够保证数据的原子性和一致性,而NoSQL对事务的处理能力有限。
SQL数据库厂商对其产品有很好的支持,而NoSQL一般只有社区支持。
性能对比中NoSQL明显优于SQL数据库。一般NoSQL可以充分利用系统的内存资源。
不用考虑数据关系和格式的NoSQL非常方便开发,范式对运维提出了相当高的要求。
什么是Mysql数据库
MySQL®软件提供了十分快速的多线程、多用户、牢靠的SQL(结构化查询语言)数据库服务器。 MySQL服务器定位于任务关键型、重负荷生产系统,并能嵌入在大量部署的软件中
MySQL数据库软件是一种客户端/服务器系统,由支持不同后端的1个多线程SQL服务器,数种不同的客户端程序和库,众多管理工具和广泛的应用编程接口API组成
Mysql数据库应用
MySQL的官方网站引述MySQL是“世界上最受欢迎的开放源代码数据库”。这不是狂妄之语,数字可以证明它有些用户将MySQL用于含60000个表和约50亿行的数据库。
每个表可支持高达64条索引。每条索引可由1~16个列或列元素组成。最大索引宽度为1000字节。索引可使用具备CHAR、VARCHAR、BLOB或TEXT列类型的列前缀。
所有数据均以所选的字符集保存。正常字符串列的比较不区分大小写
MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。
MySQL 8的新特性
MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。
MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载。
从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集
InnoDB 现在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性了,要么失败回滚,要么成功提交。
InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。
Windows下MySQL的安装
从Oracle公司的官方网站上,可以下载到MySql的安装版本和解压缩版本。
https://dev.mysql.com/downloads/mysql/
MySql本来是完全免费的产品,被Oracle收购以后,Oracle将MySql修改成了三个不同的版本为:
- MySql Enterprice Edition 企业版 - 收费或试用
- MySql Community Edition 社区版本 - 免费
- MySql Classic Edition 经典版本-免费
1、初始化操作
mysqld --initialize --console
2、将mysql添加到系统服务中
mysqld --install
3、启动服务
net start mysql
4、登录数据库
mysql -uroot -p
5、修改口令
因为步骤1生成的口令太难记忆了,如果是云平台上的数据库,则建议不要修改。
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;(切记最后的分号)
6、如果忘记口令,则删除data文件夹,重新执行步骤1-5即可
使用quit退出
停止服务:net stop mysql
卸载服务:mysqld --remove
常用mysql服务命令
启动数据库服务器 net start mysql
加粗样式启动客户端登录mysql数据库:mysql -u username -p
例如 mysql -uroot -p123456 有安全隐患,所以一般建议mysql -uroot -p回车后再输入口令
退出mysql客户端:quit
查看mysql版本:select version();
在mysql的命令行客户端中执行。
关闭数据库服务:net stop mysql
数据库服务器开机自启:mysqld --install
创建数据库: create database 数据库名称 default character set utf8;
例如:create database test default character set utf8;
创建成功后,在对应的安装路径下出现一个data/test文件夹
查看所有的数据库 show databases;
选定默认数据库:use dbname;
例如 use test;
查看当前的数据库:select database();
显示当前数据库中所有表:show tables;
创建新表: create table 表名称(列名称 数据类型 约束规则,…) engine=数据库引擎 default charset utf8;
mysql> create table t_student(
-> id bigint primary key,
-> name varchar(20) not null,
-> sex boolean default 1
-> ) engine=innodb default charset utf8;
创建表结束后则会发现文件夹data/test/下出现一个文件t_student.ibd
如果设置engine=myisam则会创建两个文件
myd数据信息文件,是表的数据文件
myi索引信息文件,是表数据文件中任何索引的数据树
查看表中的列定义
简单方法: desc t_student;
查看具体的列定义
show create table t_student;
放弃正在输入的命令:\c
显示命令清单:\h
查看MySQL服务器状态信息:\s
Mysql已存数据库
information_schema – 系统数据库,这个数据库损坏就会导致DBMS无法正常启动,所以这个数据库不要用户使用
schemata – 可以通过此表获取已经有数据库
tables – 可通过此表获知某数据库的所有表.
mysql-系统数据库,其中包括时区、权限等相关配置。也是属于系统数据库,一般不直接修改,仅供DBMS使用
sys系统数据库,其中保存和锁、统计等相关信息,也是属于系统数据库,不直接修改,仅供DBMS使用
performance_schema系统数据库,不直接修改,仅供DBMS使用。
用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况
test – 非系统数据库,测试使用
SELECT * FROM TABLES WHERE TABLE_SCHEMA=‘mysql’ 是查询mysql数据库中的所有表
常见的SQL命令
SQL语言都基于SQL92标准,但各数据库之间又存在差异。目前最新的标准为SQL99,它同样兼容SQL92。
SQL-Structured QueryLanguage结构化查询语言。
Oralce划分为DDL、DML、DCL、TCL
MySQL划分为DDL、DCL、DQL、DML
DDL – 数据定义语言Data Definition Language
建库、建表、设置约束等:create\drop\alter
truncate表的截断
DCL – 数据控制语言 Data Controll Language
数据授权,收回授权。grant\revoke
DQL - 数据查询语言
select
DML-数据操纵语言Data Manipulation Language
主要指数据的增删改。delete\update\insert\call
SQL 对大小写不敏感;例如Insert 和InSerT没有区别
默认字符串比较也不区分大小写
默认分号是在数据库系统中分隔每条SQL语句的标准方法,可以使用delimiter进行修改
数据库涉及字符规范(不是语法硬性规则)
命名采用26个英文字母和0-9这十个自然数,加上下划线’_'组成,共63个字符.不能出现其他字符(注释除外)
以上命名都不得超过30个字符的系统限制.变量名的长度限制为29(不包括标识字符@)
数据对象、变量的命名都采用英文字符,禁止使用中文命名.绝对不要在对象名的字符之间留空格
如果使用特殊符号,请使用反引号括起来。create table t 1
(id int); 注意这里不是单引号,是反引号
小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性.假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型 。
创建数据表的语法规则
CREATE TABLE <表名>
–(<列名> <数据类型> [ <列级完整性约束条件> ]
–[,<列名><数据类型>[ <列级完整性约束条件>] ] …
–[,<表级完整性约束条件> ] );
其中:
- <表名>:所要定义的基本表的名字。
- <列名>:组成该表的各个属性(列)。
- <列级完整性约束条件>:涉及相应属性列的完整性约束条件。
- <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件。
DBMS为了保证数据的有效性,给开发者提供了3种完整性约束,用于定义DBMS在数据入库时进行检查,如果合法则入库,否则报错拒绝
实体完整性—主键约束 primary key ----非空唯一
表定义中不是必须有主键 create table t1(id int)
参照完整性—外键约束 foreign key—表示某个列的取值范围在另外一个列的范围内
用户自定义完整性—4种用于自定义约束 not null/null default check unique
额外:域完整性-----取值范围
删除表: drop table 表名称; 如果存在则删除表,否则报错
drop table if exists t1;
MySQL的数据类型
数值列类型
mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表示的取值范围上是不同的。
整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。
mysql 提供三种浮点类型: float、double和decimal。
create table t1() 在当前数据库中表名称不允许重复,如果重复则报错
create table if not exists t1 如果t1表不存在才执行创建操作,如果已存在则不执行任何操作
无符号的写法:
create table t13(id tinyint unsigned);
定点的浮点数
create table t14(id numeric(8,2)); 表示总位宽为8位,小数为2位,其中的正负号和小数点不进行计算
小数处理采用的是四舍五入
完整性约束
primary key 用于声明主键,非空唯一。一个表只能定义一个主键,但是主键允许使用多个列构成(复合主键)。
4种用户定义约束
null允许为空,默认/not null不允许为空 id int not null表示id列不允许为空,如果插入null值则报错
default设置默认值,如果试图插入null,则加入null,默认值无效;如果不针对当前列进行操作,则默认值生效
check检查型约束,可以定义,语法create table t1(id int check(id>5)); 要求插入的数据必须满足条件id>5,但是在mysql中无效
unique唯一性约束,表示列中的数据不允许重复,否则报错,拒绝操作
字符串列类型
在mysql中使用单引号表示字符串类型,事实上不区分单双引号,但是一般建议使用单引号,允许使用\转义字符。
类型名 | 参数 | 说明 |
---|---|---|
char(n) | 0-255 | 定长字符串 |
varchar(n) | 0-65535 | 可变长字符串 |
create table t1(id char(2)); 表示id为字符串类型,允许最大存储2个字符,不区分中英文.
char(2)表示存储的字符个数为2,如果实际长度大于2则报错;如果实际存放的字符数不足,则自动末尾补充空格。.
varchar(2)表示存储的字符个数最大为2,存放字符数不足时按照实际长度存放.
如果存放字符串末尾是空格时,会自动裁剪到满足长度限制为止,注意不能裁剪开头的和中间的空格.
等值判定时空格不参与