MySQL基础

大数据的时代来临了,怎么管理数据将是一个急需解决的问题

1 数据库介绍

数据库的发展史
萌芽阶段 ----- 文件系统
    使用磁盘文件来存储数据
初级阶段-----第一代数据库
    出现了网状模型、层次模型的数据库
中级阶段-----第二代数据库
    关系型数据库和结构化查询语言
高级阶段------新一代数据库
    “关系-对象”型数据库
由于文件管理系统的缺点
  编写应用程序不方便,数据冗余不可避免,应用程序依赖性,不支持对文件的并发访问,数据间联系弱,难以按用户视图表示数据,无安全控制功能
相反数据库管理系统的种种优点
  相互关联的数据的集合,较少的数据冗余,程序与数据相互独立,保证,据的安全、可靠,最大限度地保证数据的正确性,数据可以并发使用并能同时保证一致性
数据库管理系统是数据的汇集,他以一定的组织形式存储在介质上
DBMS: 是管理数据库的系统软件,它实现数据库系统的各种功能,是数据库系统的核心
DBA: 负责数据库的规划,设计,协调,维护和管理等工作
数据库管理的基本功能
  数据定义 数据处理 数据安全 数据备份
数据库系统的架构
  单机架构 大型主机/终端架构 主从架构(C/S) 分布式架构

2 关系型数据库

关系 : 关系就是二维表。并满足如下性质: 表中的行、列次序并不重要
  行row:表中的每一行,又称为一条记录
  列column: 表中的每一列,称为属性,字段
  主键(Primary key): 用于惟一确定一个记录的字段
  域domain: 属性的取值范围,如,性别只能是'男'和'女'两个值
数据库的事物transaction: 多个操作别当做一个整体来运行
ACID
  A atomicity 原子性 整个事务中的所有操作要么全部成功执行,要么全部失败后回滚:
  C consistency 一致性: 数据库总是从一个一致性状态转化为另一个一致性状态
  I Isolation 隔离性:一个事务所做出的操作在提交之前,是不能为其他所见: 隔离有多种隔离级别:
  D durability 持久性: 一旦事务提交,其所作的修改会永久保存于数据库中
基础概念
约束 constraint 向数据表提供的数据要遵守的限制
  主键 一个或多个字段的组合,填入的数据必须能在表中唯一标识本行,必须提供数据,即NOT NULL
    一个表只能存在一个
  唯一键 一个或多个字段的组合,填入的数据必须能够在本表中唯一标识本行,允许为NULL
    一个表可以存在多个
  外键 一个表的某个字段可填入数据取决于另一个表的主键已有的数据
检查性
  索引 将表中的一个或多个字段中的数据复制一份另存,并且此些数据按特定次序排序存储
    索引类型
      聚集索引 非聚集索引 数据是否与索引存储在一起
      主键索引 辅助索引 
      稠密索引 稀疏索引 是否索引了每一个数据项,是就是稠密,不是的话就是 稀疏索引
      B+ Tree,Hash,R Tree 索引
      简单索引 复合索引  将多个字段组合成索引
      左前缀索引
        like 'abc%'
        like '%abc%' 将不会用到索引
      覆盖索引 通过索引就可获取要查找的数据,速度很快
        如将姓名和成绩当作索引
        通过查找姓名直接就可以知道成绩
关系运算
  选择 挑选部分行
  投影 挑选部分列
  连接 多种  内连接(自然连接,相等连接)  外连接(左外连接 右外连接 完整外连接) 交叉连接
  这篇文章写的很好
    http://www.cnblogs.com/youzhangjin/archive/2009/05/22/1486982.html
数据库设计的规划 三范式
  1NF: 无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
  2NF: 属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性
  3NF: 属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
数据抽象
  物理层 决定数据的存储格式,即RDBMS在磁盘上的如何组织文件
  逻辑层 描述DB存储什么数据,以及数据间存在什么样的关系
  视图层 描述DB中的部分数据
关系模型的分类
  关系模型
  实体-关系模型
  基于对象的关系模型
  半结构化的关系模型
数据的约束条件
  实体完整性 域完整性 参考完整性 自定义完整性

3 MySQL介绍

MySQL的体系架构


MariaDB的特性:
  单进程,多线程
  插件式存储引擎:存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择
  存储引擎也称之为“表类型”
1 更多的存储的存储引擎
  MyISAM ==> Aria
  InnoDB ==> XtraDB
    Mysql5.5.8开始innoDB引擎是MYSQL默认引擎,InnoDB对比MyISAM的最大特点就是InnoDB支持事务
2 诸多扩展和新特性
3 提供了较多测试组件
4 开源

4 安装MySQL

MySQL
  centos 6 的版本是 MySQL 5.1
  centos 7 的版本是 MariaDB 5.5
安装方式: 
  1 通过yum源直接安装
  2 通过官网的二进制包进行安装
  3 自己编译进行安装(一般不建议这样安装)
通过二进制安装
1 准备数据目录
    fdisk /dev/sdb
    新建一个 node 为 8e 的新分区
2 创建lvm
    pvcreate /dev/sdb1
    vgcreate myvg /dev/sdb1
    lvcreate -L 10G -n mydate myvg
    mkdir /mydata /
    mount /dev/myvg/mydata /mydata
3 创建 mysql 用户和组
    groupadd -g 306 mysql
    useradd -g 306 mysql
4 将下载的二进制包解压到 /usr/local/mysql中 并创建链接文件 导出库文件 头文件 path
    tar xf mysql-5.5.tar -C /usr/local/mysql-5.5 
    cd /usr/local/
    ln -sv mysql-5.5 mysql
    chown -R root:mysql /mysql
    ln -sv ../local/mysql/lib   ../lib64/mysql
5 创建编辑 /etc/profile.d/mysql.sh
    export PATH=$PATH:/usr/local/mysql/bin
6 cd /mysql
    scripts/mysql_install_db --datadir=/mydata --user=mysql
7 cp support-files/mysql.server /etc/init.d/mysqld
8 chkconfig --add mysqld
    mysql 的配置文件
    配置文件的查找顺序  /etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/path -->~/.my.cnf
9  cp support-files/my-large.conf /etc/my.cnf
    修改参数 thread_concurrent=cpu*2
    datadir=/mydata
    innodb_file_per_table =on
    skip_name_resolve =on

5 管理数据库

SQL 语句
  DDL Data Defination Language 数据定义
    create drop alter
  DML Data Mainipulation Language  数据管理
    insert delete update select
  DCL grant revoke 数据操作
  数据库
    create  database|schema [if not exists] 'DB_NAME';
    drop database database|sshema [if exists] 'DB_NAME'
    character set 'character set name'
    collate 'collate name'
  忘记root 密码
    mysqld_safe --skip-grant-tables&
    mysql -u root mysql
    修改密码
    将安全启动的mysqld 服务关闭
  一些mysql 的命令
    show character set 查看mysql 支持 的字符集
    show collation 查看mysql支持所有的排序规则
  获取命令使用帮助
    mysql> help keyword
  查看mysql支持的mysql引擎
    show engines
    create table tb_name (col1 datatype 修饰符,col2 datatype 修饰符)
  查看表
    show tables [from db_name]
  查看表结构
    desc table  
  查看创建数据库或表的语句
    show create database db_name
    show create table tbl_name
  删除表
    drop table [if exists] tb_name;
  数据类型
    字符型
      定长字符型 char,binary(区分大小写)
      变长字符型 varchar,varbinary(区分字符大小写)
      对象存储
      text  不区分大小写
        small text
      blog  区分字符大小写
      内置类型
        enum
        set
        create table enume_set (en ENUM('a','','1'),se SET('a','1'));
        只能往第一个字段中添加 a或者1
        往第二个字段中可以添加 a,1,a1,1a
    数值型
      精确数值型
       整数 int
         tinyint  1byte
         smallint 2bytes
         mediumint 3bytes
         int    4bytes
         bigint  8bytes
       十进制 decimal
      近似数值型  存储类型 使用二进制科学计数法
       单精度浮点型 float
       双精度浮点型 double
    日期时间型
      date 日期
      time 时间
      timestamp 时间戳
      datetime 日期时间
      year year(2) year(4) 年份
    修饰符
      所有类型适用
        not null 非空字符
      default value 默认数值
        primary key
        unique key
      数值型适用
        unsigned
        auto_increment

6 用户管理及权限

用户账号 'user'@'host'
  user:用户名
  host:此用户访问mysqld服务允许通过哪些主机远程创建链接
    IP 网络地址 主机名 通配符(%和_)
  禁止检查主机名
    skip_name_resolve=on
创建用户账号
  create user 'username'@'host'  [identified by 'password'];
删除用户
  drop user 'username'@'host';
授权
  权限 管理权限 数据库权限 表级别权限 字段级别权限 存储例程
  grant priv_type,... on [object_type] db_name.object_name to 'user'@'host' identified by 'password'  with grant options 将自己的权限下发给其他用户
    *.* 所有库的所有表
    db_name.* 指定库的所有表
    db_name.tab_name 指定库的指定表
    db_name.routine_name 指定库的存储例程
    show grants for 'username'@'%' 查询某个用户的在表中的权限
    show grants for current_user;
回收权限
  revoke priv_type,... on db_anme.object_name from 'username'@'host'
注意 mariadb 服务进程启动时会读取mysql库中的所有权限表至内存
   1 grant 或revoke等执行权限操作会保存于表中,MariaDB 的服务进程会自动重读授权表
   2 对于不能或不能及时重读授权表的命令,可手动让MrariaDB的服务进程重读授权表
      mysql> flush privileges;

你可能感兴趣的:(MySQL基础)