• MySQL的概念


    一.数据库的基本概念

    1、数据(Data)

    • 描述事物的符号记录

    • 包括数字,文字,图形,图像,声音,档案记录等

    • 以“记录”形式按统一的格式进行存储

    2、表

    • 将不同的记录组织在一起

    • 用来存储具体数据

    3、数据库

    • 表的集合,是存储数据的仓库

    • 以一定的组织方式存储的相互有关的数据集合

    4、数据库管理系统(DBMS)

    数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能

    • 是实现对数据库资源有效组织、管理和存取的系统软件

    数据库管理系统主要分为以下两类:

    4.1 关系数据库

    ​ 关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示.几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。

    ​ 典型代表有:MySQL、Oracle、Microsoft SQL Server、Access及PostgreSQL等

    4.2 非关系型数据库 NoSQL

    ​ 非关系型数据库是对不同于传统的关系数据库的数据库管理系统的统称。与关系数据库最大的不同点是不使用SQL作为查询语言。

    ​ 典型代表有:Reids、BigTable(Google)、Cassandra、MongoDB、CouchDB;

    ​ 还包括键值数据库:Apache Cassandra(Facebook)、LevelDB(Google)

    5、数据库系统

    • 是一个人机系统,由硬件、os、数据库、DBMS、应用软件和数据库用户组成

    • 用户可以通过DBMS或应用程序操作数据库

    结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。

    作用:用于存取数据、查询、更新和管理关系数据库系统。

    6、访问数据库的流程

    在这里插入图片描述

    二.数据库系统发展史

    1.第一代数据库

    • 自20世纪60年代起,第一代数据库系统问世

    • 是层次模型与网状模型的数据库系统

    • 为统一管理和共享数据提供了有力的支撑

    2.第二代数据库

    • 20世纪70年代,第二代数据库—关系数据库开始出现

    • 20世纪80年代,IBM公司的关系数据库系统DB2问世,开始逐步取代层次与网状模型的数据库,成为行业主流

    • 到目前为止,关系数据库系统仍占领数据库应用的主要地位

    3.第三代数据库

    • 自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现

    • 面向对象的数据库系统,实用性强,适应面广

    • 20世纪90年代后期,形成了多种数据库系统共同支撑应用的局面

    • 一些新的元素被添加进主流数据库系统中
    例如,Oracle支持的 “关系-对象"数据库模型

    三、当今主流数据库介绍

    1.SQL Server (微软公司产品)

    • 面向Windows操作系统
    • 简单、易用

    2、Oracle (甲骨文公司产品)

    • 面向所有主流平台,
    • 安全、完善,操作复杂

    3、DB2 (IBM公司产品)

    • 面向所有主流平台
    • 大型、安全、完善

    4.MySQL (甲骨文公司收购)

    • 免费、开源、体积小

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。

    MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。

    四、关系数据库

    • 关系数据库系统是基于关系模型的数据库系统

    • 关系模型的数据结构使用简单易懂的二维数据表

    • 关系模型可用简单的“实体关系”(E-R) 图来表示

    • E-R图中包含了实体(数据对象)、关系和属性三个要素
    在这里插入图片描述

    1、实体

    • 也称为实例,对应现实世界中可区别于其它对象的“事件”或“事物”

      • 如银行客户、银行账户等

    2、属性

    • 实体所具体的某一特性,一个实体可以有多个属性

      • 如“银行客户”实体集中的每个实体均具有姓名、住址、电话等属性

    3、联系

    • 实体集之间的对应关系称为联系,也称为关系

      • 如银行客户和银行账户存在“储蓄”的关系

      • 所有实体及实体之间联系的集合构成一个关系数据库

      • 关系数据库的存储结构是二维表格

    在每个二维表中

    • 每一行称为一条记录,用来描述一个对象的信息

    • 每一列称为一个字段,用来描述对象的一个属性

    4、关系数据库

    • Oracle , MySQL
    • SQLServer、Sybase
    • Informix、access
    • DB2、FoxPRO

    5、关系数据库的应用

    12306用户信息系统------------Oracle,MySQL

    淘宝账号系统---------------------SQLServer、Sybase

    联通手机号信息系统----------- Informix、access

    银行用户账号系统---------------DB2、FoxPRO

    网站用户信息系统---------------PostgreSQL

    六、非关系数据库

    非关系数据库也被称作NoSQL (Not Only SQL)

    存储数据不以关系模型为依据,不需要固定的表格式

    1、非关系型数据库的优点

    • 数据库可高并发读写

    • 对海数据高效率存储与访问

    • 数据库具有高扩展性与高可用性

    2、常用的非关系数据库

    Redis、mongoDB等

    七、MySQL的介绍

    1 MySQL数据库介绍

    一款深受欢迎的开源关系型数据库

    Oracle旗下的产品

    遵守GPL协议,可以免费使用与修改

    特点:

    性能卓越、服务稳定

    开源、无版权限制、成本低

    多线程、多用户

    基于C/S(客户端/服务器)架构

    安全可靠

    2、MySQL商业版与社区版

    MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用

    MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维护,可以免费使用

    两者区别

    商业版组织管理与测试环节更加严格,会比社区版更稳定

    商业版不遵守GPL,社区版遵从GPL可以免费使用

    商业版可获得7*24小时的服务,社区版则没有

    3、 MySQL产品阵营

    第一阵营:5.0-5.1阵营,可说是早期产品的延续

    第二阵营:5.4-5.7阵营,整合了MySQL AB公司、社区和第三方公司开发的存储引擎,从而提高性能

    第三阵营:6.0-7.1阵营,就是MySQL Cluster版本, 为适应新时代对数据库的集群需求而开发

    下载网址:
    http://www.dev.mysql.com/downloads

    八、编译安装MySQL数据库

    脚本一键安装部署

    #!/bin/bash
    
    yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
    
    #创建程序用户管理
    useradd -s /sbin/nologin mysql
    
    cd /opt
    tar zxvf mysql-5.7.17.tar.gz -C /opt
    cd /opt
    tar zxvf boost_1_59_0.tar.gz -C /usr/local/
    mv /usr/local/boost_1_59_0 /usr/local/boost
    cd /opt/mysql-5.7.17
    
    cmake \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    -DSYSCONFDIR=/etc \
    -DSYSTEMD_PID_DIR=/usr/local/mysql \
    -DDEFAULT_CHARSET=utf8  \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_EXTRA_CHARSETS=all \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    -DMYSQL_DATADIR=/usr/local/mysql/data \
    -DWITH_BOOST=/usr/local/boost \
    -DWITH_SYSTEMD=1
    
    make -j2 && make install
    
    
    #创建普通用户管理mysql
    useradd -s /sbin/nologin mysql
    chown -R mysql:mysql /usr/local/mysql/
    #更改管理主/组
    chown mysql:mysql /etc/my.cnf
    
    
    #调整配置文件
    
    echo '[client]
    port = 3306
    default-character-set=utf8
    socket = /usr/local/mysql/mysql.sock
    
    [mysql]
    port = 3306
    default-character-set=utf8
    socket = /usr/local/mysql/mysql.sock
    
    [mysqld]
    user = mysql
    basedir = /usr/local/mysql
    datadir = /usr/local/mysql/data
    port = 3306
    character_set_server=utf8
    pid-file = /usr/local/mysql/mysqld.pid
    socket = /usr/local/mysql/mysql.sock
    bind-address = 0.0.0.0
    skip-name-resolve
    max_connections=2048
    default-storage-engine=INNODB
    max_allowed_packet=16M
    server-id = 1
    
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
    ' > /etc/my.cnf
    
    #设置环境变量
    echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
    source /etc/profile
    
    #初始化数据库
    cd /usr/local/mysql/bin/
    echo "wait..."
    ./mysqld \
    --initialize-insecure \
    --user=mysql \
    --basedir=/usr/local/mysql \
    --datadir=/usr/local/mysql/data
    
    cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
    
    #数据库开启
    systemctl daemon-reload
    systemctl start mysqld.service
    systemctl enable mysqld
    
    yum -y install expect &> /dev/null
    source /etc/profile
    #设置Mysql密码
    /usr/bin/expect <<-EOF
    spawn mysqladmin -u root -p password  
    expect {
    "Enter password"
    {send "\r";exp_continue}
    "New password"
    {send "123456\r";exp_continue}
    "Confirm new password"
    {send "123456\r"}
    }
    expect eof
    EOF
    echo "mysql密码为123456"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
  • 相关阅读:
    【java】java线程池
    扫描电镜下的人体感官结构,超震撼
    Java基础面试-多线程
    最佳归并树
    如何在Windows电脑上使用多开工具管理多个项目?
    “益路同行”栏目人物专访第0001期—笨爸爸工房创始人张旭健先生
    【算法】----选择排序与直接插入排序(java实现)
    【Java面试】Mysql为什么使用B+Tree作为索引结构
    SwiftUI Swift 内功之 Swift 中的属性观察者 didSet 与 willSet
    go拾遗(2)-函数返回数组、多个值、不显示指定返回
  • 原文地址:https://blog.csdn.net/m0_73459977/article/details/128067604