数据库
长期存储在计算机内,有组织的,可共享的大量数据的集合。
优点:(相对与文件存储数据而言)
- 文件的安全性更高
- 利于数据查询和管理
- 利于海量数据存储
- 在程序中控制更加方便
数据库存储介质:
- 磁盘
- 内存
SQL分类
- DDL数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter - DML数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update- DML中又单独分了一个DQL,数据查询语言,代表指令: select
- DCL数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,
服务器,数据库,表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 客户端和服务端都是一个程序
- 数据库相当于服务端程序管理的文件夹,而数据库表相当于文件夹下的文件
- 数据库服务器、数据库和表的关系如下:
MySQL的原理:
mysqld—>守护进程
先启动守护进程,拉起来mysql的服务端,如果在使用过程中mysql的服务端挂掉了,守护进程会重启来起来mysql的服务端
选择连接的协议:
- 针对本地的mysql客户端,不走网络协议栈,而是通过域套接字来完成客户端和服务端的进程间通信;
- 域套接字:简单的理解,就是在机器当中创建一个文件,客户端和服务端通过文件来进行通信;
服务端:
socket: AF_UNIX, SOCK_STREAM, 0
bind:
struct sockaddr_un server_un;
server_un.sun_family = AF_UNIX;
server_un.sun_path = "[文件名称]"
bind(sockfd, (struct sockaddr*)&server_un, sizeof(server_un));
listen
accept
不在调用 send/recv来发送和接收数据了
而是调用 read/write来读数据和写数据
客户端:
socket(AF_UNIX, SOCK_STREAM, 0)
struct sockaddr_un server_un;
server_un.sun_family = AF_UNIX;
server_un.sun_path = "[文件名称]"
connect(sockfd, (struct sockaddr*)&server_un, sizeof(aerver_un));
read/write;
数据库基本操作
库的操作:
- 创建数据库
create dabase [库名称];
show create database [库名称] -->查看如何创建的库
- 使用数据库
use [数据库名称];
- 查看当前数据库当中的数据表
show tables;
- 删除一个数据库
drop database [数据库名称];
删除一个数据库的时候,一定要三思而行!!!
- 数据库的备份
mysqldump -P[端口] -u [用户] -p[密码] -B [数据库的名称] > 数据库备份的文件路径;
尽量一个星期备份一次,防止有别人删库;
- 表备份
mysqldump -u [用户] -p[密码] 数据库名称 表名称1 表名称2 > 数据表备份存储的文件路径;
字符集和校验规则
字符集
查看系统默认字符集
show variables like 'character_set_database';
查看数据库支持的字符集
show charset;
设置数据库字符集
create database [库名称] charset=[字符集];
- ASCII字符集:采用的是1个字节的低7位表示字符,高位始终为0;
- LATIN1字符集:相对于ASCII字符集做了一个扩展,启用了最高位
- GBK字符集:支持中文的,字符可以使用1个字节,也可以使用两个字节
- UTF8字符集:Unicode字符集(可以表示很多语言)的一种支持了所有国家的文字字符,采用1-4字节来表示字符
乱码的来源就来自于 前后端的字符集不匹配
【注意】:在设计数据库字符集之初,就需要考虑到 浏览器,mysql客户端(集成在服务端的代码中),mysql服务器编码格式设置成为一样,防止乱码的产生
校对规则:
查看系统默认校验规则
show variables like 'collation_database';
查看数据库支持的字符集校验规则
show collation;
- 影响用户对数据查询的排序;有些校对规则,大小写敏感的:名称后缀为_cs;
- 有些是不铭感的:名称后缀为_ci; 后缀为_bin为二进制,大小写敏感
- mysql当中 都是大小写不敏感的;
校对规则的特征:
- 不同的字符集有不同的校对规则
- 每一个字符集有一个默认的校对规则