MariaDB or MySQL:
非精准描述:
数据的存储是在硬盘上以数据流形式存在,读取文件时,文件先被加载到内存中,然后在内存中查找所需要的字段,当文件特别大时,文件无法放进内存中,而且搜索一个字段也相当浪费时间,所以数据库诞生
数据库是以某种特定格式(格式化或半格式化数据)存储, 之后可以建立INDEX(索引)来查找定位某一个数据(索引可以分多级),内存中就可以只加载索引信息,索引对应的数据存储在磁盘上则可以找到数据,大大的节约了时间
发展历史:
层次模型 --> 网状模型 --> (Codd) 关系模型
DBMS 数据库管理系统 --> RDBMS 关系型数据库管理系统
RDBMS:
范式:第一范式、第二范式、第三范式;
表:row(行), column(列);
关系运算:
选择: 挑选出符合条件的数据
投影: 挑选出指定字段
数据库概念:表、索引、视图(虚表)、SQL、存储过程、存储函数、触发器、事件调度器;
DDL
DML
约束:
主键约束:惟一、非空;一张表只能有一个;定义成为能够唯一表示一行数据在整个表中的内容的(一个字段或多个字段的组合)
惟一键约束:惟一,可以存在多个;
外键约束:参考性约束;表和表之间存在约束关系.被引用的表上存在主键,在引用表上的某一字段一定是在被引用表上存在的数据
检查性约束:check; 定义的数据的范围
三层模型:
物理层 数据以数据流形式存储在硬件上 文件系统级别 (系统工程师)
逻辑层 将数据流通过特定的结构转化成 (DBA)
视图层 可视化文本(表) (程序员)
实现:
Oracle, DB2, Sybase, Infomix, SQL Server;
MySQL, MariaDB, PostgreSQL, SQLite;
MySQL:
5.1 --> 5.5 --> 5.6 --> 5.7
MariaDB:5.5.x --> 10.x
特性:
插件式存储引擎
单进程多线程(32位系统只能使用3G内存)
安装MySQL:
OS Vendor:rpm
MySQL:
source code:cmake (编译器)
binary package: 通用二进制包
i686, x86_64;
glibc VERSION (要求glibc的版本 )
prepackage:rpm, deb
os, arch,
配置文件:
读取多处的多个配置文件,而且会以指定的次序的进行;
# my_print_defaults 查看配置生效次序
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
不同的配置文件中出现同一参数且拥有不同值时,后读取将为最终生效值;
修改默认读取的配置文件(mysqld_safe命令):
--defaults-file=file_name
于读取的默认配置文件之外再加载一个文件:
--defaults-extra-file=path
配置文件格式:ini风格的配置文件,能够为mysql的各种应用程序提供配置信息:
配置段:
[mysqld]
[mysqld_safe] 线程安全的MySQL
[mysqld_multi] 一台主机上运行多个MySQL
[server]
[mysql] 客户端配置
[mysqldump] 备份 客户端程序
[client]
...
PARAMETER:
innodb_file_per_table 有些发行版是 “-”.”_”通用的 而有些是只其中一种
innodb-file-per-table
程序文件:
服务端程序:mysqld_safe, mysqld_multi
客户端程序:mysql, mysqldump, mysqladmin 通过mysql协议能连接到mysql发起请求并获取相应的
工具程序:myisampack, ...
Yum安装的mysql启动后会自动初始化数据库 二进制格式安装则不会
mysql --> mysql protocol --> mysqld
mysql:交互式CLI工具;
mysql [options] db_name
常用选项:
--host=host_name, -h host_name:服务端地址;
--user=user_name, -u user_name:用户名;
--password[=password], -p[password]:用户密码;
--port=port_num, -P port_num:服务端端口;
--protocol={TCP|SOCKET|PIPE|MEMORY}:
本地通信:基于本地回环地址进行请求,将基于本地通信协议;
Linux:SOCKET
Windows:PIPE,MEMORY
非本地通信:使用非本地回环地址进行的请求; TCP协议;
--socket=path, -S path
--database=db_name, -D db_name:
--compress, -C:数据压缩传输
--execute=statement, -e statement:非交互模式执行SQL语句;
--vertical, -E:查询结果纵向显示;
mysql命令的使用帮助:
# man mysql
# mysql --help --verbose
sql脚本运行:
mysql [options] [DATABASE] < /PATH/FROM/SOME_SQL_SCRIPT
mysqld服务器程序:工作特性的定义方式
命令行选项