1.1 什么是数据库存储数据用文件就可以了为什么还要弄个数据库?一般的文件提供数据的存储功能但是文件并没有提供非常好的数据内容的管理能力用户的层面。文件和数据库的本质区别在于文件提供字节的持久化存储。数据对文件系统而言是不透明的它只管你把字节流写进去、读出来不关心内容是什么、结构如何、是否合理。数据库提供数据的逻辑管理与高效访问。它理解并控制数据的结构、关系、约束、并发和事务在你和物理存储之间增加了一个逻辑层让你以声明式的方式操作数据而不是逐字节地手动管理。文件保存数据有以下几个缺点文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库的本质对数据内容存储的一套完整解决方案。它屏蔽了底层的字节布局、索引结构、并发控制、事务日志等所有复杂性对外提供声明式的操作接口如SQL。用户只需告诉数据库“我要什么字段、满足什么条件”数据库负责决定“怎么存、怎么找、怎么保证正确”并把结果直接返回给你。数据库存储介质磁盘内存为了解决上述问题专家们设计出更加利于管理数据的东西——数据库它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标MySQL是目前最流行的关系型数据库之一它的使用方式清晰体现了C/S客户端/服务器模式mysql是数据库服务的客户端。你敲命令的那个工具mysqld是数据库服务的服务器端。真正存储数据、处理SQL的后台进程MySQL的本质基于C(mysql) S(mysqld)模式的一种网络服务mysql是一套给我提供数据存取的服务网络程序数据库一般指的是在磁盘或者内存中存储的特定结构组织的数据 —— 将来在磁盘上存储的一套数据库方案数据库服务 —— mysqld3306 127.0.0.1 MySQL 主端口标准 MySQL 连接端口33060 127.0.0.1 MySQL X Protocol 端口用于 MySQL 8.0 新增的 X DevAPI支持 CRUD 和 NoSQL 风格接口1-2主流数据库SQL Sever 微软的产品.Net程序员的最爱中大型项目。Oracle 甲骨文产品适合大型项目复杂的业务逻辑并发一般来说不如MySQL。MySQL世界上最受欢迎的数据库属于甲骨文并发性好不适合做复杂的业务。主要用在电商SNS论坛。对简单的SQL处理效果好。PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库不管是私用商用还是学术研究使用可以免费使用修改和分发。SQLite 是一款轻型的数据库是遵守ACID的关系型数据库管理系统它包含在一个相对小的C库中。它的设计目标是嵌入式的而且目前已经在很多嵌入式产品中使用了它它占用资源非常的低在嵌入式设备中可能只需要几百K的内存就够了。H2 是一个用Java开发的嵌入式数据库它本身只是一个类库可以直接嵌入到应用项目中。1-3 基本使用1.3.1 MySQL安装https://mp.csdn.net/mp_blog/creation/editor/1611686091.3.2 连接服务器mysql -h 127.0.0.1 -P 3306 -u root -p会显示输入密码但是不会显现你输入的密码注意如果没有写 -h 127.0.0.1 默认是连接本地如果没有写 -P 3306 默认是连接3306端口号1.3.3 服务器管理执行 winr 输入 services.msc 打开服务管理器通过下图左侧停止暂停重启动按钮进行服务管理1.3.4 服务器数据库表关系所谓安装数据库服务器只是在机器上安装了一个数据库管理系统程序这个管理程序可以管理多个数据库一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据一般会在数据库中创建多个表以保存程序中实体的数据。数据库服务器、数据库和表的关系如下1.3.5 数据库的使用案例mysql 是客户端mysqld 是服务端两者通过网络通信。数据库是存储在磁盘上的结构化数据本质是文件/目录而数据库服务mysqld负责管理这些数据。程序员通过 SQL 操作数据库底层的文件操作完全由 mysqld 自动完成。程序员不需要直接操作 Linux 下的目录和文件只需要向mysql客户端发送 SQL 命令mysqld服务接收命令后底层自动完成建目录、建文件、写数据等操作使用mysql客户端建立一个数据库、建立一张表、插入一些数据 —— 对比理解 MySQL 在 Linux 中是如何表现的。注意mysql语句的使用要想起作用一定要分号结尾创建数据库create database helloworld;使用数据库use helloworld;创建数据库表create table student(id int,name varchar(32),gender varchar(2));表中插入数据insert into student (id, name, gender) values (1, 张三, 男);insert into student (id, name, gender) values (2, 李四, 女);insert into student (id, name, gender) values (3, 王五, 男);我在要插入的时候发现我的中文输入用不了但是我之前使用linux终端上面可以但是在mysql不行为啥呢1. 你写 Linux 文件时你是在 Ubuntu 系统本身的终端环境 里系统编码已经是 UTF-8直接往文件里写中文系统直接接收没有中间层拦截所以输入法正常中文直接打进去。2. 你进 MySQL 命令行时一旦输入 mysql 进入数据库你就跳进了 MySQL 自己的会话环境它会单独接管你的输入。别人能用是因为他们要么 SSH 工具本身编码是 UTF-8要么进 MySQL 前先执行了 SET NAMES utf8mb4;要么用的是本地终端不是远程 SSH进 MySQL 后先敲这一句必须每次进都先敲SET NAMES utf8mb4;敲完再切中文输入法直接打中文立马生效。查询表中的数据select * from student;1.3.6 数据逻辑存储这个是我用调过后用中文写的1.4 MySQL架构MySQL 是一个可移植的数据库几乎能在当前所有的操作系统上运行如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。1.5 SQL分类DDL【data definition language】 数据定义语言用来维护存储数据的结构代表指令: create, drop, alterDML【data manipulation language】 数据操纵语言用来对数据进行操作代表指令 insertdeleteupdateDML中又单独分了一个DQL数据查询语言代表指令 selectDCL【Data Control Language】 数据控制语言主要负责权限管理和事务代表指令 grantrevokecommit1.6 存储引擎1.6.1 存储引擎存储引擎是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎支持多种存储引擎。1.6.2 查看存储引擎show engines;1.6.3 存储引擎对比