据库基础
数据库(Database,DB)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
什么是数据库
数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。简单来说可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
数据库系统
数据库系统有3个主要的组成部分。
数据库
数据库(Database System):用于存储数据的地方。
数据库管理系统
数据库管理系统(Database Management System,DBMS):用户管理数据库的软件。
数据库应用程序
数据库应用程序(Database Application):为了提高数据库系统的处理能力所使用的管理数据库的软件补充。
SQL语言
SQL,(Structured Query Language)即结构化查询语言,数据库管理系统专门通过SQL语言来管理数据库中的数据,与数据库通信。
SQL的优点:
- SQL不是某个特定数据库供应商专有的语言。几乎所有重要的 DBMS都支持SQL,所以,学习此语言使你几乎能与所有数据库 打交道。
- SQL简单易学。它的语句全都是由描述性很强的英语单词组成, 而且这些单词的数目不多。
- SQL尽管看上去很简单,但它实际上是一种强有力的语言,灵活 使用其语言元素,可以进行非常复杂和高级的数据库操作。
DBMS专用的SQL:SQL不是一种专利语言,而且存在一个标准委员会,他们试图定义可供所有DBMS使用的SQL语法,但 事实上任意两个DBMS实现的SQL都不完全相同。本课讲的 SQL是专门针对MySQL的,虽然所讲的多数语法也适 用于其他DBMS,但不要认为这些SQL语法是完全可移植的。
SQL为数据库管理系统提供的功能
SQL语言是一种数据库查询和程序设计语言,其主要用于存取数据,查询数据,更新数据和管理数据库系统。具体的,SQL分为4个部分,这里只是大概整理一下,详细的后面我会在SQL相关中仔细整理。
- 数据定义语言(Data Definition Language,DDL):DROP、CREATE、ALTER等语句;数据库定义语言。主要用于定义数据库,表,视图,索引和触发器等。CREATE语句主要用于创建数据库,创建表,创建视图。ALTER语句主要用于修改表的定义,修改视图的定义。DROP语句主要用于删除数据库,删除表和删除视图等。
- 数据操作语言(Data Manipulation Language,DML):INSERT、UPDATE、DELETE语句;数据库操作语言。主要用于插入数据,更新数据,删除数据。INSERT语句用于插入数据,UPDATE语句用于更新数据,DELETE语句用于删除数据。
- 数据查询语言(Data Query Language,DQL):SELECT语句。主要用于查询数据。
- 数据控制语言(Data Control Language ,DCL)语句:数据库控制语言。主要用于控制用户的访问权限。其中GRANT语句用于给用户增加权限,REVOKE语句用于收回用户的权限。
数据库分类
数据库的分类可多了去了,一般咱们分类两类,一类称之为关系型数据库,另一类称之为非关系型数据库.如果想要深入了解各种概念推荐看《数据库系统概论》。
关系数据库
(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
- MySQL
- SQL Server
- Oracle
- Sybase
- 等等...
RDBMS:关系数据库管理系统(Relational Database Management System)的特点:
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。
数据表
关系数据库没有数据表,关键字、主键、索引等也就无从谈起,数据表是关系数据库中一个非常重要的对象,是其它对象的基础,也是一系列二维数组的集合,用来存储、操作数据的逻辑结构。根据信息的分类情况。一个数据库中可能包含若干个数据表,每张表是由行和列组成,记录一条数据数据表就增加一行,每一列是由字段名和字段数据集合组成,列被称之为字段,每一列还有自己的多个属性,例如是否允许为空、默认值、长度、类型、存储编码、注释等
非关系型数据库(NoSQL)
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。当代典型的关系数据库在一些数据敏感的应用中表现了糟糕的性能,例如为巨量文档创建索引、高流量网站的网页服务,以及发送流式媒体。关系型数据库的典型实现主要被调整用于执行规模小而读写频繁,或者大批量极少写访问的事务。
- MongoDB
MongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。
- Redis
Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。
什么是MySQL
MySQL(官方发音为英语发音:/ma? ??skju???l/
My S-Q-L
,但也经常读作英语发音:/ma? ?si?kw?l/
My Sequel
)原本是一个开放源代码的关系数据库管理系统(DBMS),原开发者为瑞典的MySQL AB
公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。在本教程中,会让大家快速掌握MySQL的基本知识,并轻松使用MySQL数据库。
MySQL 介绍
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenS olaris的发展,因此导致自由软件社区们对于Oracle是否还会持续支持MySQL社区版(MySQL之中唯一的免费版本)有所隐忧,因此原先一些使用MySQL的开源软件逐渐转向其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB
数据库。MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。
MySQL 发展历史
很多人以为MySQL是最近15年内才出现的数据库,其实MySQL数据库的历史可以追溯到1979年,那时 Bill Gates 退学没多久,微软公司也才刚刚起步,而Larry的Oracle公司也才成立不久。那时有一个天才程序员 Monty Widenius 用 BASIC 设计了一个报表工具,过了不久,又将此工具使用 C 语言重写,一直到 UNIX 平台,当时只是一个底层的面向报表存储引擎名叫Unireg。
- 1985 年,瑞典的几位志同道合小伙子(David Axmark、Allan Larsson 和Monty Widenius) 成立了一家公司,这就是MySQL AB 的前身。
- 1990年,TcX公司的客户中开始有人要求为他的API提供SQL支持。当时有人提议直接使用商用数据库,但是Monty觉得商用数据库的速度难以令人满意。于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。令人失望的是,效果并不太令人满意,于是,Monty雄心大起,决心自己重写一个SQL支持。
- 1996年,MySQL 1.0发布,它只面向一小拨人,相当于内部发布。
- 1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris下的二进制版本。一个月后,Linux版本出现了。
- 1999~2000年,MySQL AB公司在瑞典成立。Monty雇了几个人与Sleepycat合作,开发出了Berkeley DB引擎, 因为BDB支持事务处理,所以MySQL从此开始支持事务处理了。
- 2003年12月,MySQL 5.0版本发布,提供了视图、存储过程等功能。
- 2008年1月16日,Sun(太阳微系统)正式收购MySQL。
- 2009年4月20日,甲骨文公司宣布以每股9.50美元,74亿美元的总额收购Sun电脑公司。
- 2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎终于变为当前MySQL的默认存储引擎。
- 2013年6月18日,甲骨文公司修改MySQL授权协议,移除了GPL。但随后有消息称这是一个bug。
MySQL 版本
MySQL
针对不同的用户,分了社区版
和企业服务器版
,还提供一些其它版本,是属于MySQL
相关工具。
- MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
- MySQL Enterprise Edition 企业版本,需付费,可以试用30天。
- MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。
- MySQL Cluster CGE 高级集群版,需付费。
- MySQL Workbench(GUI TOOL)一款专为MySQL设计的ER/数据库建模工具。
MySQL 版本命命机制由三个数字组成,例如mysql-5.6.33-osx10.11-x86_64.tar.gz
- 第一个数字(5)主版本号:当你做了不兼容的 API 修改,
- 第二个数字(7)次版本号:当你做了向下兼容的功能性新增,合计,主要和次要的数字构成发布系列号。该系列号描述了稳定的特征集。
- 第三个数字(1)修订号:当你做了向下兼容的问题修正。这是一个新的bugfix释放增加。在大多数情况下,在一系列最新版本是最好的选择。
MySQL 的优势
- 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
- 支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell NetWare、NetBSD、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
- 为多种編程语言提供了API。这些編程语言包括C、C++、C#、VB.NET、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
- 支持多线程,充分利用CPU资源,支持多用户。
- 優化的SQL查询算法,有效地提高查询速度。
- 既能够作为一个单独的应用程序在客户端服务器网络环境中运行,也能够作为一个程序库而嵌入到其他的软件中。
- 提供多语言支持,常见的编码如中文的GB2312、BIG5 UTF-8,日文的Shift JIS等都可以用作數據表名和數據列名。
- 提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
- 提供用于管理、检查、优化数据库操作的管理工具。
- 可以处理拥有上千万条记录的大型数据库。
如何学习MySQL
如何学习 MySQL 这是一个伪命题,每个人都有适合自己的一套学习方法,各不相同,所以如何学习 MySQL 这个活儿,我没有办法告诉你,我的这个学习方法就是你最好的学习方法,所以在学习 MySQL 数据库之前,需要找准自己学习 MySQL 最舒服的姿势。
培养兴趣和动力
首先得培养兴趣爱好,不论学什么技术和什么知识点,兴趣是可以极大的提高学习效率和提供持久的战斗力。当然还有一种兴趣是被逼出来的.
了解基础知识
SQL语句的关键字一定要牢记(牢记关键字的作用和使用语法的要求) .
SQL语句的语法(常用的)没有多少,每天背几个也就记住了,就算你想去背,现实也会逼着你记住的(因为以后每天都要写,邪恶的一笑!!!)
利用好工具
我在学习绘画的时候,老师第一天就告诉你要买绘画笔、水粉、纸、画板、支架子,让你有一个正确的绘画姿势。其实就是准备工具,所以学习前不光要安装好环境,还得安装好工具,比MySql安装以及可视化的视图工具(Navicat)的是使用,利用这些工具的特点来掌握SQL语句,操控数据。除了这些软件工具之外还要正确、有效地利用搜索引擎这个牛逼,刚开始使用百毒,后面使用谷歌(如果你有FQ能力可以一开始使用Google),你可通过搜索引起搜到很多相关的知识点。
多动手实践操作
我个人最不喜欢“纸上谈兵派”,在我学习java的时候,动不动就让我看个底层什么的,我只是写个应用而已,我肩负出活儿的使命,我的宗旨动手实践操作,对于数据库来说它的操作性特别强,如果你不动手操作,在实际应用过程中很难发现问题。你在实际操作中发现问题,并通过各种方法解决问题,这样才能提高实战应用操作能力。在你实战操作的过程中顺带补充基础知识。
记录笔记
你有了上面快速敏捷的学习能力,你还得附带一个技能,才能更好、更快的入门MySQL数据库。这个技能就是做笔记,做笔记在我这里起到三个作用:第一,避免遗忘知识点。知识点太多,知识点偏冷,不常用也容易忘记;第二,知识点分阶段吃透。当你理解的知识点越来越多的时候,还有一些一知半解的知识点,你都需要做一些笔记,记录之后找个时间点好好把这些一知半解的知识点吃透,在每个阶段去看你的笔记你会有一些不同的理解。第三,总结沉淀,当你入门之后总结沉淀很重要,一次总结沉淀很有可能在某个技术上你直接上升一个台阶。