目录
1.数据库
1.1.什么是数据库?
数据库是一个基于数据结构实现出来的软件,是用来保存结构化信息和数据的集合,简单说就是用来管理数据的(增、删、改、查)。
1.2.为什么要用数据库?
1.2.1.数据存储的发展史
- 人工管理阶段:很久很久以前人们将数据刻在动物的骨头上,再是竹片,后来是写到纸上。
- 文件系统阶段:之后人们发展计算机,为管理各种数据,科学家发明了文件系统。
- 数据库阶段:随着数据量越来越大,在文件中修改,查看和保持变得越来越难,于是就有使用数据库。
1.2.2.文件存储的缺点
- 文件的安全性问题。
- 文件不利于数据查询和管理。
- 文件不利于存储海量数据。
- 文件在程序中控制不方便。
而数据库的诞生可以解决以上问题,它用来查询数据,存储数据,权限控制。
1.2.3.数据库系统的特点
- 数据结构化。
- 数据共享性好,冗余度低,易扩充。
- 数据独立性高。
- 数据由DBMS统一管理和控制。
- 数据具有完整性。
1.3.数据库分类
1.3.1.关系型数据库(RDBMS)
是指采用了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。基于标准的SQL,只是内部一些实现有区别。
其展现形式如下,由多个这样的二维表组成。
PS:
- 关系模型的完整性规则是对关系的某种约束,分为实体完整性、参照完整性、用户定义完整性约束。
- 关系型数据库中,关系也称为表,元组也称为行,属性也称为列。
- 关系型数据库文件中的各条记录,前后顺序可以任意颠倒,不影响库中的数据关系。排列顺序与统计结果无关。
- 关系型数据库规范化的目的是为了解决关系型数据库的插入、删除异常及数据冗余问题。不能解决查询速度低(是靠索引解决的)、数据操作复杂、数据安全性和完整性保障问题(是靠事务保障的)。
常用的关系型数据库如:
- Oracle:(世界上公认的最好的数据库,数据库圈子里最牛逼的大佬)甲骨文的产品,收费,服务全面。适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统;适合不差钱、管理的数据特别重要的,如银行。不光要买Oracle的软件,还要搭配IBM的小型机【计算机分为:巨型机(超算),大型机、中型机、小型机(统一叫小型机),微机(平时使用的电脑)】,才能发挥出其全部功力。
-
MySQL:甲骨文的产品,不适合做复杂的业务。【技术变革都是由业务推动: 当时由阿里巴巴牵头,联合各个互联网公司,推进了一个叫"去Oracle"运动,用MySQL代替成本高昂的Oracle。】 开源免费(源代码是开放的,任何人都可以阅读修改源代码,由开源社区里的各路神仙修改bug,加入新特性,变得越来越牛逼~)市场份额非常大。当时网站开发用到四剑客:LAMP(L:Linux;A: Apache;M:MySQL;P:php) 有" ; "。 对于字符串,MySQL是单引号,Java是双引号。
-
SQL Server:微软【比尔盖茨】的产品,安装部署在windows server上,适用于中大型项目。没啥存在感,因为:收费;和Windows系统捆绑销售,而企业中使用的服务器主要是Linux系统。多年之后,微软醒悟,但此时市场份额已被MySQL和Oracle瓜分完了。 无" ; "。微软又搞了C#语言,也是因为和Windows系统捆绑销售,一直没火起来,被其他语言占了市场份额。还搞了云计算、VS Code、收购了github、收购了暴雪、开发TypeScript(新时代开发前端的主力语言,是JS的升级版)。
-
SQLite:非常轻量的数据库,嵌入在安卓系统内部,很多app都在用这个数据库。整个数据库一共只有一个可执行文件,大小500多KB。
-
DB 2 :IBM 出品的数据库(诞生的比MySQL晚,市场份额被MySQL占了)。
-
postgresql:开源免费的数据库。
-
MariaDB:基于 MySQL 的一个开源数据库产品。
1.3.2.非关系型数据库(了解)
互联网:高并发、大数据、分布式、微服务。
数据量太大,一台机器存不下了,需要更多的服务器、硬件资源来存储或提供服务。
存储方式比较灵活,用键值对或文档存储。功能更少,性能更快,能更好地适应分布式环境。不规定基于SQL实现。现在更多是指NoSQL数据库,如:
- 基于键值对(Key-Value)型【功能相对单一,对于复杂业务实现不了】:如 memcached(内存型,性能高,但不能进行持久的数据存储,后来被redis占掉市场份额,现在用得少);redis(内存+磁盘,性能高但单一,将热点的常用的数据存在内存中,除了内存还有一个"备份":会定期把内存的数据刷入到磁盘中,可持久化存储数据,这样即使掉电或停止服务,主要的数据是不会丢的。用得较多)。HashMap:jdk1.7:数组+链表;jdk1.8:数组+链表+红黑树。
- 基于文档型:如 mongodb(相当于对memcached和redis功能的升级)。
- 基于列族型:如 hbase。
- 基于图型:如 neo4j。
1.3.3.关系型数据库和非关系型数据库的区别
- MySQL 和 SQL Server 的 SQL 语句都遵循 T-SQL 标准,语句很像。MySQL 一行语句结尾有分号;SQL Server 一行语句结尾没有分号。
- 文档型数据库 mongodb 使用的是像 json 的数据格式。如查询userid为1003的记录:db.accessToken.find({userid:'1003'})
2.MySQL
2.1.什么是MySQL?
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,后面被 SUN 和 Oracle 公司收购。MySQL 是最流行的关系型数据库管理软件之一。
2.2 数据库和 MySQL 关系?
数据库是“目标”而MySQL是“具体的实现手段”。后面我们常常说的数据库,大部分指的就是MySQL(因为 MySQL 的市场占有率太高了,几乎所有的公司都使用的是此种数据库)。
2.3.MySQL的发展史
MySQL是一个跨世纪的伟大产品,它最早诞生于1979年,比Java的诞生(1991年)还早十几年。
对于MySQL来说2008年是一个重要的一年,因为这一年MySQL被原来的Sun公司以10亿美金收购了,第二年Sun公司又以74亿美金将自己和所有的产品打包卖给了Oracle(甲骨文公司,Java的爸爸~贼溜贼溜的~),从此Oracle DB和MySQL两家并一家都归属Oracle公司了。(Oracle本身很牛逼,但收费,成本高,被开源免费的MySQL占了市场份额,后来Oracle买下了MySQL,是为了维护自身的垄断地位。而一直负责维护MySQL的几位大佬把MySQL的源码重新拉了个分支,仍然作为开源免费的产品——MariaDB,它是MySQL的孪生兄弟)
这里有⼀个小插曲,Oracle在收购了Sun公司的第⼆年就以⼀纸诉状将Google(谷歌公司,搞了个安卓系统,已成为世界上第一大操作系统)告上了法庭,原因是Google侵权使用了Java语言,Oracle要求赔偿88亿美元,这场旷世纪的官司最终在2018年以Oracle的胜诉而告⼀段落,那我们可不可以理解Oracle如果真拿到了88亿美元,在不计算打官司所花的费用来说,既白嫖了Java和MySQL还白赚了14亿美元呢。
谷歌心里很不爽,近几年在搞下一代移动端操作系统,目的是代替安卓,新系统上搭建的编程语言是Dart(谷歌自研,非常简单,语法和Java很像,制霸全平台:不光在安卓、IOS、新移动端系统能开发程序,还能在开发网页程序、开发PC上的客户端程序、服务器端程序。一套代码可生成各个平台的程序!)。Dart & Flutter框架已经演化了好几年,当前写的程序已经能支持这些平台了,但目前还未被广泛使用。
2.4.MySQL的组成
- 客户端:主动发数据的一方。客户端给服务器端发送的数据称为"请求"。服务器端:被动接受数据的一方。服务器端给客户端返回的数据称为"响应"。
- 客户端和服务器端,可以在同一台主机上,也可以在不同的主机上。
- 客户端和服务器端之间,是通过网络来进行通信的。当客户端和服务器端在同一个主机上,电脑不联网不影响数据库的使用,电脑有一个特殊的环回网卡,可以自己发自己收,不通过网线/wifi可以进行通信。
- 一个服务器可以同时给多个客户端提供服务,多个客户端都可以同时给服务器发请求,服务器进行对应的响应。也有特殊情况:一个服务器只给特定的客户端提供服务,一般出现在分布式系统,各个节点之间的通信。
- 服务器端不知道客户端啥时候来,就只能一大早就开门,很晚才关门,甚至是7 * 24小时(一天工作24小时,一周工作7天)运行。
- 一台电脑上MySQL不同的版本号之间默认不能同时工作,除非知道要配置哪些东西:端口和数据目录......SQL Server和MySQL可以在一台电脑上同时存在。
- 彻底卸载干净MySQL——可参考网上文章:
如果卸载不干净,下次安装大概率会出错。
2.4.1.服务器端(服务的提供方,相当于卖家。被动接受数据的一方。存储数据的本体)
组成有四个:
- 数据库database:(相当于java中的包名);
- 表table:(相当于java中的类名)一个数据库对应了多张表;
- 字段:列数据(相当于java类中的属性)xxx.frm;
- 数据:行数据(相当于实例化该对象)xxx.ibd。
so~一个MySQL中可以有多个数据库,一个数据库可以有多张表,每个表中可以有多个列,每个列可以有多个数据。整个数据库都是一对多的关系。
服务器端的服务体现就是:
2.4.2.客户端(服务的使用方,相当于买家,消费者。主动发送数据的一方。和用户交互的部分)
客户端:
- 命令行客户端:自带的客户端。
- 图形化客户端:navicat/mysql workbench/idea自带了客户端。
控制台命令行工具,分两种:mysql自带的连接工具和windows自带的命令行。
- 1.mysql自带的连接工具:MySQL Command Line Client:
使用MySQL Command Line Client就可以连接服务器端,输入正确的密码就可以连接MySQL(服务器端)了:
这种只能连接本地的MySQL服务器端。
- 2.windows自带的命令行(普通控制台连接):
上一篇文章中有讲到如何配置,需要将mysql添加到系统的连接变量中,分两步:
- 找到mysql的安装目录;
- 将mysql配置到系统环境中。
连接命令为:mysql -h 127.0.0.1 -P 3306 -u root -p(注意空格、大小写)
其中:
- -h:host的缩写,连接服务器的ip地址(如果连本机,此项可忽略);
-
-P:port端⼝号的缩写,为 mysql服务器端的端⼝号,默认为 3306 (如果连本机,此项可省略);
-
-u:username的缩写,表示使用用户root进行连接;
-
-p:password 的缩写,表示连接的密码。
-
-D:扩展连接时指定数据库,-D 数据库名。(-D可以省略)
注:
- 在连接时除了-p密码后面不能加空格外,其他项后面都可以加空格,也可不加。
- 末尾不能加分号。
这样可以连接其他人或生产服务器的mysql服务端,还可以连接本机。
服务器端只有一个,而客户端可以多个。上一篇文章我们本机安装了MySQL,说明我们既是服务器端又是客户端。
exit表示退出。
2.5.MySQL在程序中的"位置"
