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-92或SQL2:对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提供了不同的数据库访问连接驱动,下载相关驱动:https://dev.mysql.com/downloads/
六、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的相关概念的主要内容,如果未能解决你的问题,请参考以下文章