为了满足关系范式:通常一个大的数据集会拆成在一个库(集合内)中多张表表来存储,每一张表就是由行和列组成的二维关系,表与表之间也有关系,查询有时候需要做表链接,而表链接这个过程需要依赖于索引到各种算法来实现尽可能少的产生中间数据。

一、数据库层次关系

1、数据库系统 dbms: database managemnet system

2、数据库 database: 一个数据库系统中有多个数据库;

3、数据表 table: 多行多列的表格;一个数据库中有多个表;

4、字段 field: 一列数据;一个表有多个列;

5、行 row: 一行数据;一个表有多行;

6、数据 data: 具体数据;

3、大小写及命令细节

1、mysql不区分大小写

2、如果是生成文件夹的命令,文件夹名称有大小写之分,不同系统对文件名称有大小写区分;

3、标识符:建议使用字母、数字、下划线,不以数字开关;

4、标识符与系统关键字冲突,最好使用反引号:``

5、数据库名、表名、视图名,建议小写,及下划线命名方式;

https://blog.51cto.com/sonlich/1970069

4、数据的组织结构 :层次型、网状型、关系型、

5、事务:多个操作被当作一个整体对待

A:原子性

C :一致性

I:隔离性

D:持久性

6、SQL:Structure  Query Language

  结构化查询语言

  SQL解析器

  数据存储协议:应用层协议 C/S架构

    S :server 监听于套接字,接受并处理客户端的应用请求

     C : 程序接口:GUI 、CLI

       应用层编程接口 :ODBC  Open DataBase Connection

二、基础概念

 约束:constraint  向数据表提供的数据要遵守的限制

  主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:必须提供数据 即NOT NULL;

  唯一键 :一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:允许为NULL;

  外键:一个表中的某个字段可填入数据取决于另一个表的主键已有的数据;

  检查性:

索引:将表中的一个或多个字段中的数据复制一份另存,并且此需要按特定次序排序存储

关系运算

    选择:挑选出符合条件的行(部分)

    投影:挑选出需要的字段(列)

 数据抽象

    物理层:决定数据的存储格式,即RDBMS在磁盘上如何组织文件

        表和文件并不是一一对应的,如何存储是在物理层决定

       对磁盘而言,看到的内容使二进制数据流

    逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系

    视图层:描述DB中的部分数据

       对用户而言,看到内容是文件

 关系模型的分类

    关系模型

    实体-关系模型

    基于对象的关系模型

    半结构化的关系模型

安装MySQL :

  源代码:编译安装 需cmake

    https://blog.51cto.com/xiexiaojun/1679995

  二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用

     https://blog.51cto.com/sonlich/1970069

https://blog.51cto.com/xiexiaojun/1660813

三、MariaDB,开源RDBMS的实现

特性

  插件式存储引擎【表类型】:逻辑概念转换成磁盘格式【表--->文件】,提供逻辑概念的约束得以执行

  存储引擎也称之为“表类型”

  a)支持更多的存储引擎:
    mysql标准的存储引擎:MyISAM【不支持事务】,InnoDB【事务,间隙锁】
    MariaDB:Aria【myisam的升级版:崩溃后恢复】,InnoDB(XtraDB的别名)   b)诸多的扩展和新特性
  c)较多的测试组件
  d)truly open source

3.1、安装和使用MariaDB

https://blog.51cto.com/xiexiaojun/1679995

  CentOS 7直接提供:yum  -y install mariadb-server

  CentOS 6  通用二进制安装

  CentOS : 通用二进制格式安装MariaDB

        、获取源码
官方站点:www.mariadb.org
、安装MariDB
)添加用户
)准备数据库
)展开及配置
、测试启动服务并登陆MariaDB
、安全初始化
、通用配置 、获取源码
、安装MariaDB
) 添加用户:
# groupadd -r -g mysql
# useradd -r -g -u mysql ) 准备数据库:
# btrfs
# lvm2 快照,数据库备份 # fdisk -l /dev/[sh]d[a-z] //查看所有磁盘
# fdisk /dev/sda //管理指定磁盘
# partx -a /dev/sda
# partx -a /dev/sda # pvcreate /dev/sda3
# vgcreate vg0 /dev/sda3
# lvcreate -L 10G -n mylv vg0 # 查看可被格式的文件系统类型
# cat /proc/filesystems
**没有xfs,xfs比ext文件易扩展,易用
# 查看模块
# lsmod # 安装使用xfs文件系统
# yum search xfs //xfsprogs.i686 : Utilities for managing the XFS filesystem
文件系统组成: 模块、用户空间的管理工具、POSIX
# yum -y install xfsprogs # 安装后查看内核中的模块
# rpm -ql xfsprogs //只提供程序,并未提供模块
# modinfo xfs //没有此模块
# modprobe xfs //如果有则可以安装 # mke2fs -t ext4 /dev/vg0/mylv
# vim /etc/fstab
/dev/vg0/mylv /mydata/data ext4 defaults
# mkdir -p /mydata/data
# chown mysql.mysql /mydata/data
# mount -a 3) 展开及配置:
展开:
# tar xf mariadb-5.5.-linux-i686.tar.gz -C /usr/local/ # cd /usr/local/
# ls //查看文件
# ln -sv mariadb-5.5.-linux-i686 mysql
# ll //查看链接
# cd mysql
# ll //查看权限
# chown -R mysql:mysql ./*
# ll //确认 元数据生成:
# scripts/mysql_install_db --help
--user=user_name
--basedir=path //指明mariadb的安装目录
--datadir=path //MariaDB的数据库的目录
--defaults-extra-file=name //配置文件 # /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/mydata/data/ # ls /mydata/data //查看文件是否生成 准备配置文件:
配置文件读取路径: /etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
# mkdir /etc/mysql
# ls support-files/ //查看提供的文件
1) my*.cnf //均为配置 large(512M内存), meduim(256M), small(64M) 内存4G innodb-heavy-4G.cnf
2) mysql.server //提供的服务脚本 # cp support-files/my-large.cnf /etc/mysql/my.cnf 修改配置文件: 配置文件类ini格式, 相同配置段出现多次时,最后一个配置段为最终生效段. [client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock //客户端通过/tmp/mysql.sock与服务端通信
[mysqld]
port = 3306 //服务端监听的端口
socket = /tmp/mysql.sock //服务端监听在unix socket
# Try number of CPU's*2 for thread_concurrency 线程数为CPU核心数的2倍
thread_concurrency = 4 --------
datadir = /mydata/data //数据库的目录
innodb_file_per_table = on //innodb的特性,每个文件当作一个表
skip_name_resolve = on //跳过IP-->反解为主机名.授权只基于IP即可,加速 准备服务脚本
# ls support-files/ //查看服务脚本的位置及权限
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list mysqld 4)测试启动服务
# ss -tnl //查看3306端口是否被占用
# service mysqld start /usr/local/mysql/bin/mysqld_safe_helper: Can't create/write to file '/var/log/mysqld.log' (Errcode: 13)
# touch /var/log/mysqld.log
# chown root.mysql /var/log/mysqld.log
# chmod 660 /var/log/mysqld.log # /usr/local/mysql/bin/mysql
MariaDB [(none)]> 5) 安全初始化
MariaDB [(none)]> SELECT User,Host,Password FROM mysql.user;
+------+-----------------------+----------+
| User | Host | Password |
+------+-----------------------+----------+
| root | localhost | |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | localhost.localdomain | |
+------+-----------------------+----------+
6 rows in set (0.00 sec)
注意:在本地主机上root,及一个匿名用户没有对应的密码 # /usr/local/mysql/bin/mysql_secure_installation # /usr/local/mysql/bin/mysql -uroot -hlocalhost -pmagedu
MariaDB [(none)]> 6)通用配置
查看安装目录
# ls /usr/local/mysql
bin data include lib mysql-test scripts sql-bench
COPYING EXCEPTIONS-CLIENT INSTALL-BINARY man README share support-files 1、导出PATH变量
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
# . /etc/profile.d/mysql.sh
2、导出库文件
# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
# ldconfig [-v]
3、导出头文件
# ln -sv /usr/local/mysql/include /usr/include/mysql
4、导出man手册
# vim /etc/man.config
MANPATH /usr/local/mysql/man

3.2、MariaDB程序组成

    # ls /usr/local/mysql/bin

        1、服务端程序
mysqld_safe[ps命令即可查询:"线程安全的mysql"]
mysqld_multi["多个mysql,使用不同的端口"]
       mysqld mysql协议:数据存储协议:C/S架构
实现: mysqld
进程间的通信:
同主机通信:unix socket、message queue(signal)、share memory、semphor(旗语)
跨主机:socket、rpc--监听在tcp的3306端口,支持远程通信 mysqld同主机:基于unix socket通信
服务器监听在: server地址: localhost, 127.0.0.1
二进制安装:/tmp/mysql.sock
rpm安装: /var/lib/mysql/mysql.sock 、客户端程序
mysql CLI、GUI(phpMyadmin)
mysqladmin
mysqlbinlog 二进制日志管理
mysqldump CLI交互式客户端程序: mysql使用
mysql [-uUSERNAME] [-hHOST] [-pPASSWORD] 注意:
、mysql用户名: 'USERNAME'@'HOST'
HOST:支持通配符:
% 匹配任意长度的任意字符
_ 匹配任意单个字符
例如: 172.16.0.0/16网络用通配符表示
172.16.%
172.16..%
172.16.%.%
、不给-u: 默认用户名为root
不给-h: 默认HOST为localhost或127.0.0.
不给-p: 默认PASSWORD为空

3.3、SQL接口

 SQL接口: 与mysqld相互
MariaDB [(none)]> 客户端命令:本地执行
命令名 简写格式
help (\?) //获取帮助
clear (\c) //清空输入的内容
ego (\G) 垂直显示结果
quit (\q) //退出mysql,
status (\s) //查看服务器的状态信息
system (\!) //执行shell命令
use (\u) use DB, 设定默认数据库 服务端命令:通过mysql协议发往服务器端,执行并取回结果,命令有结束符";"
> SELECT VERSION();
调用函数并执行
> SELECT +;
> SELECT 0.99^
> SELECT 1.0^

3.4、关系型数据库的常见组件、

SQL 过程是编程,自定义函数(UDF),内置函数(IDF)
数据库:database
表 :table
   行:row
   列:column
索引:index
视图:view 并行多用户访问:
    用户:USER
    权限:PRIVILEGES
------运维需掌握------------

DBA可调用的代码/函数
  存储过程:procedure 没有返回值
  存储函数:function 有返回值
  触发器:触发额外代码执行
  事件调试器:event scheduler [crontab 周期性任务计划]

3.5、SQL语句(注:对mysql命令不区分大小写)

  DDL :Data Defination Language 数据定义语言

     CREATE :创建数据库和数据库的一些对象

     DROP : 删除数据表、索引、触发程序、条件约束以及数据表的权限等(没有回收站,执行动作后数据会从磁盘中抹去)

     ALTER:修改数据表定义及属性

  DML:Data Manipulation Language 数据操作语言 (向表中插入、修改、查询)

     INSERT 、DELETE 、UPDATE 、SELECT

  DCL : Data Control Language 数据控制语言

     Grant : 允许对象的创建者给某用户或某组或所有用户 赋予某些特定的权限

     Revoke : 可以废除某用户或某组或所有用户访问权限

注意:写的格式统一,因为mysql缓存是根据MD5值存储缓存。如果两次输入的字母大小写不同时,其MD5值不同。




3.6、数据库管理

 查看 :SHOW DATABASES;

语法:

  创建数据库 :CREATE DATABASE | [IF NOT EXISTS] "db_name" [create_specification];

  删除数据库 :DROP  DATABASE | [IF NOT EXISTS] "db_name" [create_specification];    <没有回收站>只能基于备份恢复

     create_specification: 

          CHARACTER SET 'charecter set name'   字符集

          COLLATE 'collate name'  排序规则

  查看当前支持哪些字符集和排序规则:

     >SHOW  CHARACTER  SET ;

     >SHOW COLLATION ;

获取命令帮助:

3.7、表:

   CREATE TABLE tb_name  (col1 datatype 修饰符,col2 datatype 修饰符,...) ENGINE=' '

    查看所有的引擎:>SHOW ENGINE;
    查看表:SHOW TABLES [FROM db_name]
    查看表结构:DESC [db_name.]tb_name
    删除表:DROP TABLE tb_name ;

3.8、数据类型、

数据类型: datatype
字符:
定长字符:
不区分大小写 char(#) 用或不用,给1个占10个
区分大小写 binary(#) 变长字符:
不区分大小写 varchar(#) 有结束符,占用一个, 给1个,占2个
区分大小写 varbinary(#) 对象存储:大文本存储
TEXT 不区分大小写
BLOB 区分----二进制的大对象
内置:
ENUM 枚举(给你几种,最多有几种选择)
SET 集合
数值:
精确:整型[int]、十进制[decimal]
int
tinyint 1byte
smallint 2bytes
mediumint 3bytes
int 4bytes
bigint 8bytes 范围: - ^-
近似: 单精度浮点[float]、双精度浮点[double] 修饰
  NOT NULL :非空约束
  DEFAULT NULL :设定默认值

https://blog.51cto.com/sonlich/1970069

   

MySQL 基础之一的更多相关文章

  1. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  2. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  3. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  4. MySQL基础(非常全)

    MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...

  5. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  6. MySQL 基础语句

    MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...

  7. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  8. MySQL基础学习总结

    1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...

  9. MySQL基础(五)——视图

    MySQL基础(五)--视图

  10. MySQL基础(四)——索引

    MySQL基础(四)--索引

随机推荐

  1. 使用jQuery开发datatable分页表格插件

    当系统数据量很大时,前端的分页.异步获取方式就成了较好的解决方案.一直以来,我都希望使用自己开发的 jquery 插件做系统. 现在,学习了 jquery 插件开发之后,渐渐地也自己去尝试着开发一些简 ...

  2. vue和react之间的区别

    1.Vue和React之间的区别 相同点: Vue和其他框架一样,都有组件开发和虚拟dom 都支持props进行父子组件之间的数据通信 都支持数据驱动视图,不直接操作真实dom 都支持服务器端的 渲染 ...

  3. 行内块inline-block元素之间出现空白间隙原因及解决办法

    首先,来看下具体的问题,下面是用inline-block布局实现的两边固定宽度,中间自适应的html代码: 1 2 3 4 5 6 7 8 9 <section class="layo ...

  4. Oracle 11g 物理存储结构

    Oracle 系统的物理存储结构比较具体和直观,它用来描述 Oracle 数据在磁盘上的物理组成情况.Oracle 系统的数据在逻辑上存储在表空间中,而在物理上存储在表空间所包含的物理文件(即数据文件 ...

  5. 动态修改app build版本CFBundleVersion

    1.需求说明 2.操作步骤 2.1 新建脚本,选择Build Phases 2.2 点击加号,选择New Run Script Phase 2.3 为了便于识别,双击重命名为 Dynamic Buil ...

  6. MySQL Network--域名与VIP

    VIP与域名1.域名能在多个IDC切换,而VIP通常在特定网段内切换.2.VIP切换可以立即生效,而域名切换存在一定时间延迟. DNS解析顺序:1.查询本地域名映射配置(/etc/hosts)2.查查 ...

  7. c# Path类

  8. python之变量的数据类型(3)dict 及解构简单介绍

    一.变量的数据类型(3) 1. dict 字典dict 用{}来表示 键值对数据 {key:value} 唯一性 键 都必须是可哈希的 不可变的数据类型就可以当做字典中的键 值 没有任何限制 2.增删 ...

  9. Centos7安装autoconf

    一.原因 安装此插件的原因:在初始化MySQL数据库时出现提示FATAL ERROR: please install the following Perl modules before executi ...

  10. .net core自定义读取配置文件

    新建完成后项目目录下有个 appsettings.json { "Logging": { "LogLevel": { "Default": ...