数据库结构模型分类
1、层次模型
2、网状模型
3、关系模型
关系模型的组成部分
  • 二维关系

      • row
      • column
    • 索引
      • index
    • 视图
      • view (只包含固定字段,不包含其他字段)
关系型数据库的常见组件:
  • 数据库 : Database
  • : table
    • : row
    • : column
  • 索引 : index
  • 视图 : view
  • 用户 : user
  • 权限 : privilege
  • 存储过程 : procedure
  • 存储函数 : function
  • 触发器 : trigger
  • 事件调度器 : event schedule
DBA的组成部分
  • SQL引擎

    • 分析器
    • 计划执行器
    • 优化器
    • 操作求解器
  • 存储引擎
    • 文件和存储接口
    • 缓冲管理器
    • 磁盘空间管理器
    • 恢复管理器
    • 事务管理器
    • 锁管理器
SQL接口(structured query Language)

类似于OS的shell接口,操作数据库的数据接口,也提供了编程功能

  • SQL接口语言的标准(其由ANSL组织定义)
    • SQL86
    • SQL89
    • SQL92
    • SQL99
    • SQL03
  • SQL接口的语言分类
    • DDL:(Data Defined Language)

      • create
      • alter
      • drop
    • DML:(Data Manapulating Language)
      • insert
      • delete
      • update
      • select
    • DCL: (Data Control Language)
      • grant
      • revoke
DB是否支持事务的测试标准
  • ACID

    • A : 原子性 --> 不可分割的整体
    • C : 一致性 --> 数据的变化是一致性的
    • I : 隔离性 --> 事务彼此之间是隔离的
    • D : 持久性 --> 只要一个事务完成,它都是持久完成的。
  • 事务是将组织多个操作为一个整体,要么全部执行,要全部不执行。其实现机制为:
    • 回滚机制
    • 事务机制
RDBMS设计范式基础概念

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

  • 1) 第一范式(1NF)

    • 所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域,并不可分析
  • 2) 第二范式 (2NF)
    • 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分,即不能有两个行是一样的。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。
  • 3) 第三范式 (3NF)
    • 第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。简而言之,不依赖于非主属性,表与子表中不能有相同的字段。
数据库的运行模型:

数据库为C/S架构,如下:

  • S : server ,监听于套接字止,接收并处理客户端的应用请求
  • C : Client
    • 程序接口

      • CLI
      • GUI
    • 应用编程接口
      • ODBC : Open Database Connection(开放式数据互联)
MYSQL的工作模型
  • 单进程多线程
  • 用户连接通过线程实现
  • 一个线程池可以定义mysql的并发连接
  • 处理用户连接的叫连接线程
  • 数据字典:数据一切的元数据信息,依赖mysql库来存储
数据库的基础概念
  • 1)约束 : Constraint

    • 主键 : 一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行,且必须提供数据,即NOT NULL
    • 唯一键 : 一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行,允许为null
    • 外键 : 一个表中的某字段可填入数据取决于另一个表中的主键已有的数据。
    • 检查性约束 : 表达式约束,取决于表达式的要求
  • 2) 索引 : 将表中的一个或多个字段中的数据复制一份另存,并且这些字段需要按特定的次序排序存储,常见的索引类型:
    • 树形索引(MariaDB默认为Btree索引)
    • bash索引
      索引有利于读请求,但不得写请求
  • 3) 关系运算
    • 选择 : 挑选出符合条件的行(部分)
    • 投影 : 挑选出需要的字段
    • 连接 : 将多张表关联起来
      • 内连接
      • 外连接
        • 左外连接
        • 右外连接
      • 自连接
  • 4)数据抽象 :
    • 物理层 : 决定数据的存储格式,即RDBMS 在磁盘上如何组织文件
    • 逻辑层 : 描述DB存储什么数据,以及数据间存在什么样的关系
    • 视图层 : 描述DB中的部分数据
  • 5) 关系模型的分类
    • 关系模型
    • 实体关系模型
    • 基于对象的关系模型
    • 半结构化的关系模型
      • XML格式就是一种半结构化数据
常见的RDBMS数据库
  • MySQL
  • MariaDB
  • PostgreSQL(pgsql)
  • Oracle
  • MSSQL

=============

MariaDB的特性
  • 插件式存储引擎(注:存储引擎也称之为"表类型")

    • MYISAM --> Aria

      • 不支持事务
    • INNODB --> XtraDB
      • 支持事务
  • 诸多扩展和新特性
  • 提供了更多的测试组件
  • truly open source
Mariadb的安装
通用二进制格式安装过程
a. 准备数据目录以/mydata/data为例;
b. 配置mariadb# groupadd -r -g 306 mysql# useradd -r -g 306 -u 306 mysql# tar xf mariadb-VERSION.tar.xz -C /usr/local# ln -sv mariadb-version mysql# cd /usr/local/mysql# chown -R root:mysql ./*# scripts/mysql_install_db --datadir=/mydata/data --user=mysql# cp supper-files/mysql.server /etc/rc.d/init.d/mysqld# chkconfig --add mysqld
c. 准备配置文件配置格式:类ini格式,为各程序均通过单个配置文件提供配置信息;[prog_name]能用二进制格式安装,配置文件查找次序:
/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnfOS提供的mariadb rpm包安装的配置文件查找次序:
/etc/mysql/my.cnf --> /etc/my.cnf --> --default-extra=/PATH/TO/conf_file --> ~/my.cnf以上两者越靠后就是最后生效的.# mkdir /etc/mysql# cp support-files/my-large.cnf /etc/mysql/my.cnf添加三个选项:[mysqld]datadir = /mydata/datainnodb_file_per_table = onskip_name_resolve = on
MariDB程序的组成
  • Client

    • mysql : CLI交互式客户端程序
    • mysqldump : 备份工具
    • mysqladmin: 管理工具
    • mysqlbinlog : 查看二进制日志工具
  • Server
    • mysqld: 服务端进程
    • mysqld_safe : 服务端进程,默认也是运行的此进程
    • mysqld_multi : 服务端进程, 多实例
    • mysql_upgrade : 升级工具
服务端监听的两种socket地址
  • ip socket

    • 监听在3306/tcp,支持远程通信
  • unix socket
    • 监听在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),仅支持本地通信,通信主机为localhost,127.0.0.1都基于unix socket文件通信
命令行交互式客户端程序---mysql工具
  • options

    • -uUSERNAME : 用户名,默认为root
    • -hHOST : 服务器主机,默认为localhost
    • -pPASSWD : 用户的密码
    • dDB_NAME: 连接到服务端之后,指明默认数据库
    • -e 'SCRIPT' : 连接至MYSQL运行某命令后,直接退出,并返回结果
      ````
      mysql -uroot -h127.0.0.1 -pmagedu -e 'show databases;'
注意: mysql的用户帐号由两部分组成,'username'@'hostname',其中host用于限制此用户可通过哪些主机连接当前的MSYQL服务器
  • 支持通配符:

    • % : 匹配任意长度的任意字符

      172.16.%.%
    • _ : 匹配任意单个字符
  • 内置命令
    • \u DB_NAME : 设定哪个库为默认数据库
    • \q : 退出
    • \d CHAR : 设定新的语句结束符
    • \g : 语句通用结束标记
    • \G : 语句结束标记,但以竖排方式显示
    • \s : 返回客户端与服务端的连接状态
    • \c : 取消命令运行
通过mysql协议发往服务器执行并取回结果,每个命令都必须有结束符,默认为";",示例如下:for i in {1..100};do AGE=$[$RANDOM%100];mysql -uroot -pM8T9cw -e "insert mydb.student(id,name,age) value ($i,\"stu$i\",$AGE);"; done
  • 获取命令帮助

    • help
SQL中的数据类型
  • 字符型

    • 定长字符型 : (最多255个字符)

      • CHAR(#) : 不区分字符大小写
      • BINARY(#) : 区分字符大小写
    • 可变长字符型 :
      • VARCHAR(#) : 不区分字符大小写,需要在字符长度加1,最多65536个字符
      • VARBINARY(#) : 区分字符大小写,需要在字符长度加1,最多65536个字符
      • TEXT : 可存文本(2^32)个字符,只能存纯文本,不区分大小写
        • TINYTEXT
        • TEXT
        • MEDIUMTEXT
        • LONGTEXT
      • BLOB : 文本(2^32)个字符,可以存储图片
  • 内置类型
    • SET : 集合
    • ENUM : 枚举
  • 数值型
    • 精确数值型

      • INT

        • TINYINT : 一个字节
        • SMALLINT : 二个字节
        • MEDINUMINT : 三个字节
        • INT : 四个字节
        • BIGINT : 八个字节
    • 近似数据型
      • FLOAT : 单精度
      • DOBULE : 双精度
  • 日期时间型
    • DATE : 日期型
    • TIME : 时间型
    • DATETIME : 日期时间型
    • TIMESTAMP : 时间戳(从过去到现在经过的秒数)
    • YEAR(2) : 2位年数
    • YEAR(4) : 4位年数
  • 数据类型修饰符
    • 所有类型都适用:

      • NOT NULL : 非空
      • DEFAULT value : 默认值
    • 数值型适用
      • AUTO_INCREMENT : 自增长
      • UNSIGNED : 无符号,通常用于Int后面,进行修饰为正整数
    • 字段修饰符
      • PRIMARY KEY : 主键定义
      • UNIQUE KEY : 唯一键定义

==========

数据库操作语言

数据库操作
  • 使用格式
create database | schema [if not exists]'DB_NAME';
drop database | schema 'DB_NAME';
  • 查看数据库

    • show databases;
  • 创建数据库
    • create database mydb;
  • 删除数据库
    • drop database mydb;
  • 查看支持的所有字符集
    • show character set;
  • 查看支持的所有排序规则
    • show collation;
  • 修改数据库的默认字符集
    • alter database testdb character set utf32;
  • 修改数据库的默认字符排序规则
    • alter database testdb collate utf32_sinhala_ci;
表操作
  • 使用格式
create table [if not exists] tb_name (col1 datatype 修饰符, col2 datatype 修饰符) engine=' '
  • 查看所有的引擎(被支持的)

    • show engines
  • 查看所有数据库中的表
    • show tables;
    • show tables from mysql;
  • 查看表结构
    • desc students;
  • 创建表
    • create table students(id int unsigned not null primary key, name varchar(30) not null, age tinyint unsigned not null,gender enum('F','M'))
  • 向表中添加字段
    • alter table students add second_name char(30);
  • 向表中删除字段
    • alter table students drop second_name;
  • 对表添加主键
    • alter table students2 add primary key (id);
  • 对表删除主键
    • alter table students2 drop primary key;
  • 对表添加索引
    • alter table students2 add index name (name);
  • 对表删除索引
    • alter table students2 drop index name;
    • drop index name on students2;
  • 对表添加唯一键
    • alter table students drop second_name;
  • 对表删除唯一键
    • alter table students drop index name;
  • 修改字段字义属性

    • alter table students modify name char(20);
    • alter table students2 change name new_name char(20) after id;
    • alter table students2 change name new_name char(20);

      modify : 只可以修改字段定义的属性
      change : 可以修改字段名称和定义的字段属性
  • 查看表状态
    • show table status like 'students2'\G
  • 修改表引擎
    • alter table students2 engine[=]myisam;
  • 查看表的字段描述
    • desc students;
  • 查看库中的所有表
    • show tables
    • show tables from mysql;
  • 删除表
    • drop table students2;
向表中插入数据
  • insert weizi value(1,'zhen',30,'F');
  • insert weizi values(3,'wei',30,'F'),(4,'ping',31,'F');
  • insert weizi (id,name) value (5,"weizi");
删除表中的数据
  • delete from weizi where name="zhen";
  • delete from weizi where age is null;
  • delete from weizi where age > 30;
  • delete from weizi where id >=50 and age <=20;
  • delete from weizi order by age asc limit 5;
修改表中的字段值
  • update weizi set age=35 where id=3 and age=30;
  • update weizi set age=age-5 where age=35;
  • update weizi age=age-age;
  • update weizi set age=age-5 where order by id desc limit 10;
  • update weizi set age=age-15 where name not like 'stu%';
Select操作语句
  • 使用格式
select col1,col2,....from tb1_name [where clause] [order y 'col_name'] [limit [m,]n]
  • 字段表示法

    • * : 表示所有字段
    • as : 字段别名, col1 as alias1
  • where clause
    • 操作符:

      • ==
      • <
      • >
      • <=
      • >=
      • !=
      • between....and...
    • 条件逻辑操作
      • and
      • or
      • not
    • 模糊匹配
      • like

        • %
        • _
      • rlike 'pattern' : 基于正则表达式匹配
      • is null
      • is no null
  • 排序
    • desc : 降序
    • asc : 升序
Select示例
  • select name,age from students where age >30 and age<80;
  • select name,age from students where age between 30 and 80;
  • select name from students where name like '%ang%';
  • select name from students where name rlike '^.*ang.*$;
  • select name,age from students where age is null;
  • select name,age form students where age is not null;
  • select id,name from students order by name;
  • select id,name from students order by name desc;
权限及授权管理
  • 用户表示方法:
username@host
  • 管理权限的分类

    • 管理权限
    • 数据库
    • 字段
    • 存储例程
授权:
  • 授权语法格式

    • grant pri_type,...on [object_type] db_name.tbl_name to 'user'@'host' [identified by 'PASSWD']

      • pri_type

        • all privileges : 表示全部权限
      • db_name.tbl_name的表示方法:
        • *.* : 所有库的所有表
        • db_name.* : 指定库的所有表
        • db_name.tbl_name : 指定库的特定表
        • db_name.routine_name : 指定库上的存储过程或存储函数
      • object_type
        • table
        • function
        • procedure
  • 授权示例:
    • grant all privileges on mydb.* to 'zhenping'@'172.16.%.%' identified by 'MT8ddd';
取消权限
  • 取消授权语法格式

    • revoke pri_type,.... on db_name.tb_name from 'user'@'host';
  • 取消授权示例:
    • revoke all privileges on mydb.* from 'zhenping'@'172.16.%.%';
查看用户权限
  • show grants for 'user'@'host';
让新授权的权限立即生效
  • flush privileges;
1 Mariadb服务进程启动时会读取mysql库中的所有授权表至内存中;
2 grant和revoke等执行权限操作时会保存于表中,mariadb的服务进程会自动重读授权表
3 对于不能够或不能及时重读授权表,可手动让服务进程重启授权表,使用flush privileges


作者:魏镇坪链接:http://www.jianshu.com/p/e59afa955a2d來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/logo-fox/p/7813898.html

MariaDB基础详解相关推荐

  1. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...

  2. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  3. 【云原生之k8s】k8s基础详解

    [云原生之k8s]k8s基础详解 前言 一.kubernetes介绍 (1)kubernetes简介 (2)应用部署方式的演变 二.kubernetes组件 (1)kubernetes架构 (2)ma ...

  4. 微信小程序详解 php,微信小程序canvas基础详解

    canvas 元素用于在网页上绘制图形.HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像.本文主要和大家分享微信小程序canvas基础详解,希望能帮助到大家. 一.了 ...

  5. 线程状态,优先级,守护线程基础详解

    线程状态,优先级,守护线程基础详解 线程状态 停止线程 线程休眠 线程礼让 线程强制执行 线程状态检测 线程的优先级 守护线程 线程同步 线程状态 创建状态(new 之后就是创建状态 就绪状态(调用s ...

  6. 03 html基础详解

    02html基础详解 文章目录 02html基础详解 1.HTML编辑器 2.标签 html常用标签 3.元素 4.属性 常用属性 5.标题 水平线 注释 6.段落 折行 7.格式化标签 属性dir ...

  7. 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他

    FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...

  8. linux网络服务详解,Linux网络服务器配置基础详解 (3)

    Linux网络服务器配置基础详解 (3) Linux网络服务器配置基础详解 (3) 第三步:编辑"inetd.conf"文件(vi /etc/inetd.conf),禁止所有不需要 ...

  9. 主线剧情03-NXP-i.MX系列的u-boot移植基础详解

    u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...

  10. 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)

    C++ Socket网络编程基础详解(TCP版) ​    网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...

最新文章

  1. cmake生成so包并调用(C++project,build,cmake)
  2. java启动 守护进程_java守护进程启动和关闭脚本
  3. etcd 集群故障(数据变成只读)
  4. 比特币早期投资家:没有人能够阻止其发展 TechWeb 09-27 09:10 凤凰科技讯 据CNBC网站北京时间9月27日报道,风险投资家、“Social+Capital”基金创始人Chamath
  5. word2vec介绍
  6. h.264 html播放,浏览器 – 我如何播放H264视频?
  7. 解析markdown_markdown-it 原理浅析
  8. 使用Angular2建立项目
  9. 4x root 红米_好激动,红米NOTE4X开发版成功获得完全ROOT教程,非假ROOT!!
  10. SCI/SCIE/SSCI的查询验证链接
  11. 苹果开发——设置iTunesnbsp;Connec…
  12. 计算机初级cad,CAD 初级入门
  13. php 磅和像素的换算,将g/cm³换算为磅每液量加仑(美国) (克每立方厘米换算为磅每液量加仑(美国))...
  14. 如何修改网络连接的网络位置
  15. 简述变分法在泛函极值问题中的应用
  16. matlab表格数据输入方式,matlab输入excel表格数据-matlab怎么把数据写入excel
  17. 关于Android针孔摄像头检测方法
  18. 高颜值!广西730分学霸杨晨煜被清华智班录取,学习人工智能,网友纷纷求开微博!
  19. 与外国教授用email交流
  20. 零氪科技撤回IPO申请:年亏近5亿 中概股上市已停滞9个月

热门文章

  1. asp.net先于iis安装导致iis不能解析aspx的问题(Failed to access IIS metabase,IISメタベースにアクセスできませんでした)...
  2. 【LeetCode】【字符串】题号:383. 赎金信
  3. 从零基础入门Tensorflow2.0 ----九、44.4 签名函数转换成savedmodel
  4. python根据文件名列表筛选满足条件的文件
  5. geemap_01_安装geemap
  6. ArcGIS设置默认金字塔弹出框
  7. 静态的通讯录(C语言)
  8. 使用Rancher搭建Kubernetes集群
  9. Flink 如何支持特征工程、在线学习、在线预测等 AI 场景?
  10. 个人成长过程中最重要的技能是什么?