• 48MySQL数据库基础


    MySQL数据库基础

    数据库的基本概念

    数据(Data)

    描述事物的符号记录;包括数字,文字、图形、图像、声音、档案记录等;以“记录”形式按统一的格式进行存储。

    将不同的记录组织在一起;用来存储具体数据。

    数据库

    表的集合,是存储数据的仓库;以一定的组织方式存储的相互有关的数据集合。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NLuOwFOX-1659955016357)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220804094727653.png)]

    数据库可以完成数据持久化保存+快速提取
    数据如何保存:最外层是mysql服务–》mysgl数据库–》数据表—》记录为行,字段为列—>数据保存在一行行记录中

    想要实现以上功能,需要编写一系列的规则–》SQL语句
    SQL语句按功能分类:增删改查

    数据库类型

    关系型数据库(SQL)

    存储的往往是字符、字符串、数值、布尔值等。

    当今主流数据库介绍

    Mysql(甲骨文公司收购):免费、开源、体积小

    SQL server(微软):面向Vindows操作系统,简单、易用。

    access(微软公司office产品)Oracle(甲骨文公司产品):面向所有主流平台,
    安全、完善,操作复杂。

    DB2(IBM公司):面向所有主流平台,大型、安全、完善。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTL7pSdf-1659955016359)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220804114947687.png)]

    关系数据库系统是基于关系模型的数据库系统
    关系模型的数据结构使用简单易懂的二维数据表
    关系模型可用简单的“实体-关系” (E-R)图来表示
    E-R图中包含了实体(数据对象)、关系和属性三个要素

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DJVn67NV-1659955016359)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220804110733266.png)]

    关系型数据库的优点

    1、易于维护:都是使用表结构,格式一致;

    2、使用方便:SQL语言通用,可用于复杂查询;

    3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

    缺点

    1、读写性能比较差,尤其是海量数据的高效率读写;

    2、固定的表结构,灵活度稍欠;

    3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

    非关系型数据库(NOSQL)

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

    存储的往往是图片、视频、语音等;存储数据不以关系模型为依据,不需要固定的表格式。

    优点:

    1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、 图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。

    2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;

    3、高扩展性与高可用性;

    4、成本低:nosql数据库部署简单,基本都是开源软件。

    缺点:

    1、不提供sql支持,学习和使用成本较高;

    2、无事务处理;

    3、数据结构相对复杂,复杂查询方面稍欠。

    相同点:存储高热数据(在内存中高速运行)
    不同点:redis可以做持久化保存,可以存储对象

    数据库管理系统(DBMS)

    是实现对数据库资源有效组织、管理和存取的系统软件,在操作系统的支持下,支持用户对数据库的各项操作

    数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能

    DBMS主要功能

    1. 数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的转储与恢复、数据库的重组与性能监视等功能。
    2. 数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出。
    3. 数据操纵功能:包括数据查询统计和数据更新两个方面。
    4. 数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控制、数据库内部维护等功能。
    5. 通信功能: DBMS 与其他软件系统之间的通信,如Access能与其他office组件进行数据交换。

    DBMS工作模式

    1. 接受应用程序的数据请求和处理请求
    2. 将用户的数据请求(高级指令)转换为复杂机器代码(底层指令)
    3. 实现对数据库的操作
    4. 从数据库的操作中接受查询结果
    5. 对查询结果进行处理(格式转换)
    6. 将处理结果返回给用户

    数据库系统(DBS)

    是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成;用户可以通过DBMS或应用程序操作数据库。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1arSFMj-1659955016359)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220804100931605.png)]

    MySQL数据库介绍

    一款深受欢迎的开源关系型数据库,Oraclej旗下的产品,遵守GPL协议,可以免费使用与修改。

    特点

    • 性能卓越、服务稳定
    • 开源、无版权限制成本低
    • 多线程、多用户
    • 基于CS(客户端/服务器)架构
    • 安全可靠

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5aQlAMCj-1659955016360)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220804120858211.png)]

    MySQL安装

    1.安装Mysql环境依赖包
    yum -y install \
    gcc \
    gcc-c++ \
    ncurses \				#字符终端下图形互动功能的动态库
    ncurses-devel \			#ncurses开发包
    bison \					#语法分析器
    cmake					#mysql需要用cmake编译安装
    2.创建运行用户
    useradd -M -s /sbin/nologin mysql
    3.编译安装
    cd /opt
    tar zxvf mysql-5.7.17.tar.gz
    tar zxvf boost_1_59_0.tar.gz -C /usr/local/
    mv /usr/local/boost_1_59_0/ /usr/local/boost
    cd mysql-5.7.17/
    cmake \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \		#指定mysql的安装路径
    -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径
    -DSYSCONFDIR=/etc \                             #指定配置文件的存储路径
    -DSYSTEMD_PID_DIR=/usr/local/mysql \            #指定进程文件的存储路径
    -DDEFAULT_CHARSET=utf8  \                       #指定默认使用的字符集编码,如 utf8
    -DDEFAULT_COLLATION=utf8_general_ci \			#指定默认使用的字符集校对规则
    -DWITH_EXTRA_CHARSETS=all \						#指定支持其他字符集编码
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \              #安装INNOBASE存储引擎
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \               #安装ARCHIVE存储引擎 
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \             #安装BLACKHOLE存储引擎 
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \            #安装FEDERATED存储引擎 
    -DMYSQL_DATADIR=/usr/local/mysql/data \         #指定数据库文件的存储路径
    -DWITH_BOOST=/usr/local/boost \          #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
    -DWITH_SYSTEMD=1								#生成便于systemctl管理的文件
    make -j4 && make install
    4.修改mysql 配置文件
    vim /etc/my.cnf								#删除原配置项,再重新添加下面内容
    [client]									#客户端设置
    port = 3306
    socket=/usr/local/mysql/mysql.sock			
    [mysqld]									#服务全局设置
    user = mysql       							#设置管理用户
    basedir=/usr/local/mysql					#指定数据库的安装目录
    datadir=/usr/local/mysql/data				#指定数据库文件的存储路径
    port = 3306									#指定端口
    character-set-server=utf8					#设置服务器字符集编码格式为utf8
    pid-file = /usr/local/mysql/mysqld.pid		#指定pid 进程文件路径
    socket=/usr/local/mysql/mysql.sock			#指定数据库连接文件
    bind-address = 0.0.0.0						#设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开
    skip-name-resolve							#禁用DNS解析
    max_connections=2048						#设置mysql的最大连接数
    default-storage-engine=INNODB				#指定默认存储引擎
    max_allowed_packet=16M						#设置数据库接收的数据包大小的最大值
    server-id = 1								#指定服务ID号
    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	
    
    • 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

    拓展:sql_mode常用值
    NO_ENGINE_SUBSTITUTION
    如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
    STRICT_TRANS_TABLES
    在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
    NO_AUTO_CREATE_USER
    禁正GRANT创建密码为空的用户
    NO_AUTO_VALUE_ON_ZERO
    mysql中的自增长列可以从O开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错
    NO_ZERO_IN_DATE
    不允许日期和月份为零
    NO_ZERO_DATE
    mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
    ERROR_FOR_DIVISION_BY_ZERO
    在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MysQL返回NULL
    PIPES_As_CONCAT
    将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
    ANSI_QUOTES
    启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

    5.更改mysql安装目录和配置文件的属主属组
    chown -R mysql:mysql /usr/local/mysql/
    chown mysql:mysql /etc/my.cnf
    6.设置路径环境变量
    echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
    source /etc/profile
    7.初始化数据库
    cd /usr/local/mysql/bin/
    ./mysqld \
    --initialize-insecure \				#生成初始化密码为空
    --user=mysql \                      #指定管理用户
    --basedir=/usr/local/mysql \        #指定数据库的安装目录
    --datadir=/usr/local/mysql/data		#指定数据库文件的存储路径
    8.添加服务
    cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
    systemctl daemon-reload         #刷新识别     
    systemctl start mysqld.service  #开启服务
    systemctl enable mysqld         #开机自启动
    netstat -anpt | grep 3306       #查看端口
    9.给root账号设置密码
    mysqladmin -u root -p password "123456"
    mysql -u root -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    Mysql数据库日志
    数据库日志文件用于备份,恢复,故障定位、分析是最核心的部分
    mysql与oracle日志有所区别
    mysgl写一条数据,同步到日志中一条
    PS:insert into ky11 (id,name,score)values(1,‘zhangsan’,20)
    oracle:重做日志组
    一个组中至少3个日志成员,轮流存储日志
    还会有另一个组与之同步/备份
    阿里云0SS对象存储,一式三份备份(使用重做日志组思想)
    对象存储:存储大都是一些静态文件,图片、音频、视频不能直接在对象存储中修改数据
    飞天平台,盘古系统(分布式存储),钟馗:安全,伏羲:分布式应用调度系统,女娲:选举/调度,盘古一式三份
    Mysql存储引擎
    myisam和innodb
    myisam:快速读取,不支持事务
    innodb:更注重写,支持事务

    拓展:MySQL部署脚本(source执行脚本,加载到Linux环境中)

    yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
    useradd -M -s /sbin/nologin mysql
    cd /opt
    tar zxvf mysql-5.7.17.tar.gz
    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 -j4 && make install
    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
    auto-rehash
    [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
    chown -R mysql:mysql /usr/local/mysql/
    chown mysql:mysql /etc/my.cnf
    echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
    source /etc/profile
    cd /usr/local/mysql/bin/
    ./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
    systemctl enable mysqld        
    netstat -anpt | grep 3306       
    mysqladmin -u root -p password "123456"
    mysql -u root -p
    
    • 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

    =/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
    systemctl enable mysqld
    netstat -anpt | grep 3306
    mysqladmin -u root -p password “123456”
    mysql -u root -p

  • 相关阅读:
    Android遗漏的动画-矢量动画AnimatedVectorDrawable(上)
    【学习笔记】[EGOI2023] Bikes vs Cars
    Physical 导入模式
    computed()实战vue3项目计算总价
    msyql锁分类
    Vue 3.0 + vite + axios+PHP跨域问题的解决办法
    Web3:Fediverse低效是一种平衡 - berk
    【数据结构】树与二叉树(十八):树的存储结构——Father链接结构、儿子链表链接结构
    基于vue和nodejs的项目外卖点餐订餐餐厅平台
    Apache Doris (四十五): Doris数据更新与删除 - Sequence 列
  • 原文地址:https://blog.csdn.net/qq_49124206/article/details/126233595