一、数据库概念?
mysql是一套基于CS模式,给我们一个提供数据存取服务的网络程序。日常口语中的数据库其实是指在磁盘或内存中存储的特定组织结构的数据。
存储数据最常见的方式就是直接用文件存储。但文件存储存在诸多缺陷:
- 安全性问题!普通文件没有权限约制,数据可以随意被访问,存在数据安全问题。
- 文件不利于海量数据的查询和管理。比如需要在100万数据中查找主机ip为198.1.1.0的ip地址的个数。对于文件而言需要程序员将文件打开,然后按行遍历、判断、统计等工作。非常麻烦,效率低下。 但对于数据库而言,数据库本质其实就是一套对数据内容存取的一套解决方案。程序员将相关字段和要求传给数据库即可,数据库会将结果直接反馈呈现给程序员!
- 文件在程序中不方便控制。文件系统缺乏事务管理、并发控制等机制,难以保证数据的一致性和完整性。MySQL架构
宏观上数据库是指:数据库客户端、服务端以及数据库文件。而口语中思的数据库指数据在磁盘上存取的一套解决方案(create databases创建出来的数据库)
在Linux中,数据库本质就是/var/lib/mysql
目录下的一个目录文件,而建表本质就是该该目录下的一些普通文件。
二、MySQL架构
第一层主要解决连接和安全问题。第二层类似于编译器主要进行词法分析、语法分析、以及mysql语句优化。第三次为各种存储引擎,是真正和OS系统进行交换,实现功能的。
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法(show engines;
查看)
三、SQL语句分类
sql语言分为以下3类:
- 数据定义语言(DDL),用于维护存储数据的结构。代表指令:
create
、drop
。 - 数据操纵语言(DML),用来对数据进行操作。代表指令:
insert
、delete
、update
。 - 数据控制语言(DCL),主要负责权限管理和事务。代表指令:
grant
、revoke
、commit
。
四、数据库操作
4.1 数据库创建
指令:create database [if not exists] db_name [charset = xxx] [collate = xxx];
- charset (或character set):数据库字符集,数据库存储数据的编码格式!
- collate :数据库校验集,数据库将数据读取出来时所采用的编码格式!
4.2 数据库字符集和校验规则
作用 | 指令 |
---|---|
查看系统默认字符集 | show variables like 'character_set_database'; |
查看系统默校验规则 | show variables like 'collation_database'; |
查看数据库支持的字符集 | show charset; |
查看数据库支持的校验规则 | show collation; |
4.3 数据库修改
指令:alter database db_name [charset = xxx] [collate = xxx];
- 数据库的修改主要是对数据库的字符集和校验规则进行修改,但需要保证修改后的字符集和校验规则匹配,否则数据的存储或读取可能出现乱码。
4.4 数据库删除
指令:drop database db_name [if not exists];
- 数据库的创建本质就是在
/var/lib/mysql
下创建的目录文件,而数据库删除的本质就是该目录文件被删除。 - 数据库删除后,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。
4.4 数据库备份和恢复
作用 | 指令 | 样例 |
---|---|---|
数据库备份 | mysqldump -P3306 -u root -p -B 数据库名 > 文件路径 |
mysqldump -P3306 -u root -p123456 -B mytest > mytest.sql |
数据库恢复 | source 文件路径; |
source D:/mysql-5.7.22/mytest.sql; |
备份表 | mysqldump -u root -p 数据库名 表名1 表名2 > mytest.sql; |
|
备份多个数据库 | mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径 |
- 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据
库,再使用source来还原。
其他
- 查看连接情况指令:
show processlist;
五、表操作
5.1 创建表
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
- field指明表结构的列名,datatype指明列名类型。
- 对于字符集、校验规则、存储引擎如果没有显示指定,默认采用表所在的数据库相关属性。
5.2 修改表
修改表的结构有,比如字段名字,字段大小,字段类型