为什么使用数据库
数据库,用来管理数据。包括数据的增删查改等等操作。数据库的本质其实就是对文件的增删查改而已。
但是为什么需要数据库呢?我们直接写进文件不就ok?
1)不便于管理。
2)不安全。在文件和使用者之间加上一层(即数据库),保护数据安全性,这也是软件设计重要理念之一。
3)自己手工控制,难以解决海量数据。
mysql数据库
mysql数据库是数据库的一种,因为其高效,免费,使用的范围很广。
mysql的服务端 && 客户端:
mysql分为服务端和客户端。服务端叫做mysqld。后面带上d是Linux下守护进程起名字的习惯。一般服务器端在远端机器上,你通过客户端发起命令,然后服务器端进行解析,然后下达给底层。
分层:
我这里将mysql的服务端分为3层。
![](/qrcode.jpg)
最上层负责解析发送过来的命令,是否符合语法,是否安全等等。然后将命令下达给下层。
第二层是一些插件式的存储引擎(storage engine),这些存储引擎负责数据如何存储,什么时候存储,存储到哪儿等一系列具体的存储细节。因为是插件式的,所以mysql可以同时具备多种存储引擎,任意选择。
第三层就是磁盘,真正存储数据的地方。
mysql服务的端口号是3306。
工作原理浅析:
根据以上,我们就可以大致的描绘出mysql工作之原理。
mysql服务基于tcp协议。客户端发送的命令经过网络传输到服务器(这之间就是tcp/ip5层模型),服务器接收到后,解析命令,确认安全,交付给一个存储引擎,存储引擎存储完毕后返回存储结果给解析层,然后重定向到客户端的socket文件中。
由此可见,mysql就是一个网络服务,就是一个tcp套接字。
mysql的结构
mysql是一个大的数据库(database)。你可以在其中创建一些自己的数据库,这些数据库本质上就是一个目录而已。然后在每个database中你可以创建表(tables),这每一个表其实就是文件而已(但是,一张表可能对应好几个文件)。
mysql的配置
mysql支持很多种字符集,校验方式,存储引擎等。所以你创建的每一张表都需要决定使用什么样式的配置。
所谓的字符集(character set)就是存储的方式,支不支持汉字存储等一系列的规则。比如我们的ascii码使用1个字节存储,可能别的字符集就使用2个字节存储。
字符集的校验规则,指的是字符集比较大小的时候依据的准则,比如我们比较a和B的大小,如果不考虑大小写,那么a<B,如果考虑大小写,则a>B,也就是说,同一字符集,不同的比较规则,对某列数据的排序结果也就会产生不同。
配置文件:
这些配置都可以在配置文件中设置为默认的,这样以后所以的表都是默认这种配置。
/etc/my.cnf #配置在此文件中
参考:mysql基础_programing菜鸟的博客-CSDN博客
数据库功能有两种:“数据维护”、“数据访问”。细一点地说,“维护”包括数据库权限、字符集、数据存储等,“访问”包括数据库连接、查询、添加、修改、删除等。
之前Windows安装MySQL数据库是用 mysql-5.5.28-win32.msi ,安装之后控制面板程序里多了个 MySQL Server 5.5,管理工具->服务 里多了个 MySQL 和 MySQLa ,也可以通过DOS命令打开 MySQL 安装目录 bin 文件夹的 mysql.exe 进行数据库操作。
安装服务器之后可以通过 管理->服务 自己开放或者关闭MySQL。通过对 MySQL Server 5.5 目录下的一些文件操作,或者打开 mysql.exe 输入命令,可以打开MySQL的远程连接,使得外界可以通过局域网或互联网访问本机的MySQL数据库。
安装完服务器之后,客户端也同时安装完成了。
单独安装客户端就没试过了,可以预见的是安装完成之后只能远程访问别人的数据库,本地不能存储数据。为了开发方便,在本地安装一个MySQL服务器会好一些,方便项目的开发调试。
另外为了提高开发效率, Navicat for MySQL 和 Navicat_Premium 都挺好用的,我管它们叫“数据库编辑器”。它们就是把MySQL客户端的功能界面化了,所见即所得。可以通过这个访问数据库,不过这两个软件本身也是不能存储数据的。
参考:https://blog.csdn.net/u011704894/article/details/44079635
本质上的区别是:server是执行一个crud操作,client是发送一个crud操作。
server是把sql语句翻译成对内存和文件的操作,也就是说,server是直接操作文件的。
而client是对数据库/表进行操作,不是直接对文件进行操作。
举个例子:
①client:我用一个Navicat去链接一个数据库,这个Navicat就是client。
②server:我有多个mysql服务实例,他们可以位于不同的端口(这句不重要),但是他们是挂载在了宿主机同一个目录下的(这句重要,对内存/文件进行操作了),而且数据共享(这句也不重要)。
小知识点:
①sql只是去知道server如何去操作数据。
②即使C/S在同一台机器上,他们也是通过网络通讯的。
参考:https://blog.csdn.net/AFishhhhhh/article/details/80378274