MySQL入门篇!聊聊数据库与MySQL的相关概念

Posted 多栖技术控小董

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL入门篇!聊聊数据库与MySQL的相关概念相关的知识,希望对你有一定的参考价值。

一、数据库(database)

  • 概念:按照数据结构来组织、存储和管理数据的仓库
  • 数据库的发展:四个阶段
    • 人工管理阶段:20世纪50年代,硬件存储只有穿孔卡片,纸片,磁带,软件方面还没有操作系统
    • 文件系统阶段:20世纪50-60年代,计算机有了操作系统,硬盘、磁鼓出现,数据以文件存储在外存,由操作系统管理
    • 数据库系统阶段:上世纪60年代,采用数据模型对数据进行统一管理、控制
    • 高级数据库技术阶段:现代
  • 数据库的种类:不同种类的数据库按不同的数据结构来联系和组织
    • 层次式数据库
    • 网络式数据库
    • 关系式数据库
  • 数据库的特点:
    • 实现数据共享,减少数据冗余
    • 采用特定的数据类型
    • 具有较高的数据独立性
    • 具有统一的数据控制功能
  • 常见的数据库 :
    • Qracel:超大型/收费  ===>甲骨文公司
    • DB2:超大型/收费  ===>IBM(国际商用公司)
    • SQL Server:小型/商业收费  ===>微软(MS)
    • mysql:小型/免费开源  ===>瑞典MySQL AB公司(2008.1.16被sun公司收购(2009.4.20被Qracel收购))
    • Sybase
    • Access
    • SQLite

二、数据库系统

  • 定义:数据库系统由硬件部分和软件部分共同构成。
    • 硬件、主要用于存储数据库中的数据,包括计算机、存储设备等
    • 软件部分则主要包括DBMS、支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等
  • 组成:由数据、DB、DBMS、操作数据库的应用程序、软件平台,数据库有关人员组成。大概分为3个主要组成部分
    • 数据库(DB):用于存储数据的地方。一个数据库可能包含多个文件,一个数据库系统通常包含许多数据库
    • 数据库管理系统(DBMS):用于管理数据库的软件。位于用户与操作系统之间。能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性
    • 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。虽然已经有了DBMS,但是很多情况下,DBMS无法满足对数据管理的要求,数据库应用程序的使用可以满足对数库管理的更高要求,更加直观和友好。
  • 几个概念:
    • DBA(数据库系统管理员):数据库设计,权限控制等
    • RDBMS(关系型数据库管理系统)

三、数据模型

  • 大致分为三种:层次数据模型、网状数据模型、关系数据模型
    • 层次:树状结构
    • 网状:有向图网状模型
    • 关系:使用二维表格(关系表)表示实体之间的数据模型 

  • RDBMS术语
    • 数据表:表是数据的矩阵
    • 记录(元组):表中的行
    • 字段(属性):表中的列
    • 主键:又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键。主键列上不能有两行相同的值,也不能为空值
    • 域:属性的取值范围(例如:性别只有男、女)
    • 冗余:存储两倍数据,降低了性能,但提高数据安全性
    • 超关键字、候选关键字、主关键字

  • 在关系型数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等
  • 例如下面是一个关于作者信息的authros表

数据类型

  • 数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有整数数据类型、浮点数数据类型等等
  • 表中的每一个字段就是某种指定数据类型,比如上图中的"编号"字段为整数类型,"性别"字段为字符型数据

主键

  • 主键(Primary Key)又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值
  • 假如上面定义authros表,该表给每一个作者分配一个"作者编号",该编码作为数据表的主键,如果出现相同的值,将提示错误,系统不能确定查询的究竟是哪一条记录;如果把作者的"姓名"作为主键,则不能出现重复的名字,这与现实中的情况不相符合,因此"姓名"字段不适合作为主键。

四、SQL(结构化查询语言)

  • 能做什么:可以从数据库取回数据,删除数据,添加数据,创建新表、设置表、存储过程和视图权限等
  • SQL有许多不同的类型,有3个主要的标准
    • ANSI(美国国家标准机构) SQL
    • SQL-92SQL2:对ANSI SQL修改后在1992年采纳的标准
    • SQL-99:从SQL2扩充而来并新增了对象关系特征和许多其他新功能
    • 各大数据库厂商提供了不同版本的SQL,这些版本的SQL不但能包括原始的ANSI标准,而且很大程度上支持SQL-92标准
  • SQL包含以下4各部分
    • 数据查询语言(DQL):SELECT语句
    • 数据操作语言(DML):INSERT、UPDATE、DELETE等
    • 数据定义语言(DDL):DROP、CREATE、ALTER等语句
    • 数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等
  • 注意:SQL不区分大小写,但是" "与' '之间区分,语句以分号;结尾

五、数据库访问接口

  • 不同的程序语言会有不同的数据库访问接口,程序语言通过这些接口,执行SQL语句,进行数据库管理
  • 主要的数据库访问接口有:ODBC、JDBC、AOD.NET、PDO

ODBC

  • ODBC(开放数据库互连)技术为访问不同的SQL数据库提供了一个共同的接口
  • DOBC使用SQL作为访问数据的标准,这一接口提供了最大限度的互操作性。一个应用程序可以通过共同的一组代码访问不同的SQL数据库管理系统(DBMS)
  • 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是Access、MySQL还是Oracle数据库,均可用ODBC API进行访问
  • 最大的优点:能以统一的方式处理所有的数据库

JDBC

  • 用于java应用程序连接数据库的标准方法,是一种用于执行SQL语句的java API,由一组用java语言编写的类和接口组成

AOD.NET

  • 是微软在.NET框架下开发设计的一组用于和数据源进行交互的面向对象类库
  • AOD.NET提供了对关系数据、XML和应用程序数据的访问

PDO

  • PDO为PHP访问数据库定义了一个轻量级、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。
  • PDO是php 5新加入的一个重大功能

六、MySQL概述

  • MySQL是一个开放源代码的数据库管理系统,由MySQL AB公司开发、发布并支持的。
  • 跨平台的开源关系数据库管理系统,广泛应用于中小型网站开发中。
  • 体积小,速度快,成本低。

七、MySQL的版本

  • MySQL Community Server(社区版):该版本完全免费,但是官方不提供技术支持。
  • MySQL Enterprise Server(企业版服务器):能够以很高性价比为企业提供数据仓库应用,支持ACID事物处理,提供完整的提交、回滚、崩溃恢复和行级锁定功能。需要付费。

版本命名规范

  • MySQL的命名机制由3个数字和1个后缀组成。
  • 例如:MySQL-5.7.10
    • (1)第1个数字5是主版本号,描述了文件格式,所有版本5的发型版都有相同的文件格式。
    • (2)第2个数字7是发行级别,主版本号和发行级别组合在一起便构成了发行序列号。
    • (3)第3个数字10是在此发行系列的版本号,随每次新分发版本递增。通常选择已经发行的最新版本。

八、MySQL的优势

  • 速度:运行速度快。
  • 价格:对多数人来说是免费的。
  • 容易使用:与其他大型数据库的设置和管理相比,其复杂度较低,易于学习。
  • 可移植性:能够工作在众多的系统平台上,例如:Windows、Linux、Unix Mac OS等。
  • 丰富的接口:提供了用于C、C++等语言的API。
  • 支持查询语句:MySQL可以利用标准的SQL语法和支持ODBC的应用程序。
  • 安全性和连接性:十分灵活和安全的权限和密码系统,允许基于主机的验证。连接服务器时,所有的密码传输均采用加密形式。

、MySQL命令行使用程序

MySQL服务器端实用工具程序

  • mysqld:SQL后台程序(即MySQL服务器进程)。该程序必须运行之后,客户端才能通过连接服务器来访问数据库
  • mysqld_safe:服务器启动脚本。在UNIX和NetWare中推荐使用mysql_safe来启动mysqld服务器
  • mysql.server:服务器启动脚本。在UNIX中的MySQL分发版包括mysql.server脚本。该脚本用于使用包含特定级别的、运行启动服务的脚本、运行目录的系统。它调用mysqld_safe来启动MySQL服务器
  • mysql_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务器
  • myisamchk:用来描述、检查、优化和维护MyISAM表的实用工具
  • mysqlbug:MySQL缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告
  • mysql_install_db:该脚本用默认权限创建的MySQL授权表。通常只是在系统上首次安装MySQL时执行一次

MySQL客户端实用工具程序

  • myisampack:压缩MyISAM表以产生更小的只读表的一个工具
  • mysql:交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具
  • mysqlaccess:检查访问主机名、用户名和数据库组合的权限的脚本
  • MySQLadmin:执行管理操作的客户程序、。例如创建或删除数据库、重载授权表、将表刷新到硬盘上、以及重新打开日志文件。还可以用来检索版本、进程,以及服务器的状态信息
  • mysqlbinlog:以二进制日志读取语句的工具。在二进制日志文件中包含执行过的语句,可用来帮助系统从崩溃中恢复
  • mysqlcheck:检查、修复、分析以及优化表的表维护客户程序
  • mysqldump:将MySQL数据库转储到一个文件中(例如SQL语句或tab分隔符文本文件)的客户程序
  • mysqlhotcopy:当服务器在运行时,快速备份MyISAM或ISAM表的工具
  • mysql import:使用LOAD DATA INFILE将文本文件导入相关表的客户程序
  • mysqlshow:显示数据库、表、列以及索引相关信息的客户程序
  • perror:显示系统或MySQL错误代码含义的工具

十、默认数据库

  • information_schema:信息数据库(保存着数据库名、表、表栏的数据类型与访问权限等)
  • mysql:负责存储数据库的用户、权限设置、关键字等
  • performance_schema:收集数据库服务器性能参数
  • text:测试数据库,一个空数据库,没有任何表,可删除

十一、搜索引擎

  • 常用的为MyISAM、InnoDB、MEMORY、MERGE
  • 默认的为MyISAM,要改为InnoDB(提供事务安全表)

十二、常用命令

  • 结束一条命令:;或\\g
  • 切换/使用数据库:use  数据库名;
  • 进入MySQL:mysql -u root -p;
  • 列出数据库表:show  databases;
  • 列出当前数据库中所有的表:show  tables;
  • 显示数据表的属性:show cloumns from 数据表;
  • 刷新权限:flush  privileges;
  • 退出MySQL:quit;或 exit;
  • 更改密码:update .uesr  set  authentication_string=password('新密码');
  • 帮助:help或\\h

十三、MySQL的历史变迁

版本3.23(2001)

  • 一般认为这个版本的发布是MySQL真正“诞生”的时刻,其开始 获得广泛使用。在这个版本,MySQL依然只是一个在平面文件 (Flat File)上实现了SQL查询的系统。但一个重要的改进是引入 MyISAM代替了老旧而且有诸多限制的ISAM引擎。InnoDB引擎也 已经可以使用,但没有包含在默认的二进制发行版中,因为它太新 了。所以如果要使用InnoDB,必须手工编译。版本3.23还引入了全 文索引和复制。复制是MySQL成为互联网应用的数据库系统的关 键特性(killer feature)

版本4.0(2003)

  • 支持新的语法,比如UNION和多表DELETE语法。重写了复制, 在备库使用了两个线程来实现复制,避免了之前一个线程做所有复 制工作的模式下任务切换导致的问题。InnoDB成为标准配备,包括了全部的特性:行级锁、外键等。版本4.0中还引入了查询缓存 (自那以后这部分改动不大),同时还支持通过SSL进行连接

版本4.1(2005)

  • 引入了更多新的语法,比如子查询和INSERT ON DUPLICATE KEY UPDATE。开始支持UTF-8字符集。支持新的二进制协议和 prepared语句

版本5.0(2006)

  • 这个版本出现了一些“企业级”特性:视图、触发器、存储过程 和存储函数。老的ISAM引擎的代码被彻底移除,同时引入了新的 Federated等引擎

版本5.1(2008)

  • 这是Sun收购MySQL AB以后发布的首个版本,研发时间长达 五年。版本5.1引入了分区、基于行的复制,以及plugin API(包括 可插拔存储引擎的API)。移除了BerkeyDB引擎,这是MySQL最早 的事务存储引擎。其他如Federated引擎也将被放弃。同时Oracle收 购的InnoDB Oy (Oracle也已经收购了MerkeyDB)发布了InnoDB plugin

版本5.5(2010)

  • 这是Oracle收购Sun以后发布的首个版本。版本5.5的主要改善 集中在性能、扩展性、复制、分区、对微软Windows系统的支持, 以及一些其他方面。InnoDB成为默认的存储引擎。更多的一些遗 留特性和不建议使用的特性被移除。增加了PERFORMANCE_SCHEMA 库,包含了一些可测量的性能指标的增强。增加了复制、认证和审 计API。半同步复制(semisynchronous replication)插件进入实用阶 段。Oracle还在2011年发布了商用的认证插件和线程池(thread pooling)。InnoDB在架构方面也做了较大的改进,比如多个子缓 冲池(buffer pool)。

版本5.6

  • 版本5.6将包含一些重大更新。比如多年来首次对查询优化器 进行大规模的改进,更多的插件API(比如全文索引),复制的改 进,以及PERFORMANCE_SCHEMA库增加了更多的性能指标。InnoDB 团队也做了大量的改进工作,这些改进在已经发布的里程碑版本和 实验室版本中都已经包括。MySQL 5.5主要着重在基础部分的改进 和加强,引入了部分新特性。而MySQL 5.6则在MySQL 5.5的基础 上提升服务器的开发和性能。

十四、MySQL的开发模式

  • MySQL的开发过程和发布模型在不同的阶段有很大的变化,但目 前已经基本稳定下来。在Oracle定期发布的新里程碑开发版本中,会包 含即将在下一个GA(意思是通常可用的版本)版本发布的新特性。这样做是为了测试和获得反 馈,请不要在生产环境使用此版本,虽然Oracle宣称每个里程碑版本的 质量都是可靠的,并随时可以正式发布(到目前为止也没有任何理由去 推翻这个说法)。Oracle也会定期发布实验室预览版,主要包含一些特 定的需要评估的特性,这些特性并不保证会在下一个正式版本中包括进 去。最终,Oracle会将稳定的特性打包发布一个新的GA版本
  • MySQL依然遵循GPL开源协议,全部的源代码(除了一些商业版本 的插件)都会开放给社区。Oracle似乎也理解,为社区和付费用户提供 不同的版本并非明智之举。MySQL AB曾经尝试过不同版本的策略,结 果导致付费用户变成了“睁眼瞎”,无法从社区的测试和反馈中获得好 处。不同版本的策略并不受企业用户的欢迎,所以后来被Sun废除了。
  • 现在Oracle为付费用户单独提供了一些服务器插件,而MySQL本身 还是遵循开源模式。尽管对于私有的服务器插件的发布有一些抱怨,但 这只是少数的声音,并且慢慢地在平息。大多数MySQL用户对此并不 在意,有需求的用户也能够接受商业授权的付费插件
  • 无论如何,不开源的扩展也只是扩展而已,并不会将MySQL变成 受限制的非开源模式。没有这些扩展,MySQL也是功能完整的数据 库。坦白地说,我们也很欣赏Oracle将更多的特性做成插件的开发模 式。如果将特性直接包含在服务器中而不是API的方式,那就更加没有 选择了:用户只能接受这种实现,而失去了选择更适合业务的实现的机 会。例如,如果Oracle将InnoDB的全文索引功能以API的方式实现,那 么就可能以同样的API实现Sphinx或者Lucene的插件,这可能对一些用 户更有用。服务器内部的API设计也很干净,这对于提升代码质量非常有帮助,谁不想要这个呢?

以上是关于MySQL入门篇!聊聊数据库与MySQL的相关概念的主要内容,如果未能解决你的问题,请参考以下文章

MySQL高级篇——聊聊MySQL的存储引擎

MySQL高级篇——聊聊MySQL的存储引擎

入门MySQL——备份与恢复

入门MySQL——DML语句篇

入门MySQL——架构篇

MySQL入门篇