mysql基础1——发展起源、数据类型、基础安装

2023-11-06

一、基本了解

前提背景:

  • mariadb是一种关系型数据库,其前身是5.7版本的mysql数据库。
  • 当时mysql数据库因免费开源就迅速火热起来,直接占领了90%的市场,后来被oracle公司收购后,就开始收费,随后原班团队又基于v5.7mysql打造了mariadb,一出来就是10.0版本。
  • 现很多公司使用的都是5.7版本的myql数据库,也有使用10.0版本的mariadb数据库,两个数据库95%的相似。

什么是关系型数据库?

  • 存放表与表之间具有关联关系表的数据库,称之为关系型数据库。
    在这里插入图片描述

1.1 DBMS数据库管理系统

DBMS与RDBMS:

  • DBMS是用于存储和管理数据的软件,可提供对数据的操作(插入,删除、更新),还可以执行定义,创建,修改和控制数据库的功能。它是专门用于创建和维护数据,并使单个业务应用程序能够提取所需的数据。
  • RDBMS关系数据库管理系统(RDBMS)是DBMS系统的高级版本。与DBMS相比,RDBMS系统还允许组织更有效地访问数据。RDBMS是一个软件系统,用于仅存储需要以表格形式存储的数据。在这种系统中,数据以行和列的形式进行管理和存储,这被称为元组和属性。

DBMS概念:

  • 数据库管理系统,简称DBMS。是针对数据库文件及数据进行【统一管理】的【软件系统】。
  • DNMS作用非常强大,既可以识别我们传输的SQL所表达的意思,对数据库里的表数据进行增删改查,又可以对数据进行管控,限制用户对表数据进行操作的权限,还可以进行数据维护等众多功能。
    在这里插入图片描述

1.2 主流关系型数据库

  • 甲骨文Oracle:Oracle数据库是世界上最受欢迎的企业数据库之一,旨在支撑可靠、安全的存储,检索和处理所有形式的数据。常用于金融、医药类传统行业或者是政府部门。
  • 微软SQL Server:SQL Server由世界第一软件提供商MICROSOFT公司推出,是与Oracle、IBM的DB2齐名的企业级商用数据库“三巨头”之一。与其他数据库相比,其操作性和交互性有着很大的优势,常用于ERP系统、商业智能、零售商、餐饮、事业单位等场景。局限性很大,只有运行在windows和Linux系统才能获得最大的性能支撑。
  • mysql、mariadb:是一款安全、跨平台、高效的,并与PHP、Java等主流编程语言紧密结合的数据库系统。是目前运行速度最快的SQL语言数据库之一,开源免费,简单易用,深受互联网行业喜爱。
    在这里插入图片描述

1.3 数据表概念

  • 数据库:用于存储数据的仓库,按照【特定格式】存储的【数据文件】的集合,由若干数据表组成。

  • 表:由若干字段和若干记录组成的二维表格。

  • 字段:数据类型相同的列,表头称为字段名称。

  • 记录:一行记录就是一条数据。

  • 主键:具有唯一标识记录的字段。

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

    • 主键约束:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行。且必须提供数据,不能为空,一个表只能存在一个。
    • 一键约束:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行。允许为空,一个表可以存在多个。
    • 外键约束:一个表中的某字段可填入数据取决于另一个表的主键已有的数据检查性约束。普遍会和主键约束一起使用,用来确保数据的一致性。对于两个具有关联关系的表来说,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。所以外键就是用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

    在这里插入图片描述

1.4 关系型数据库的组成

关系型数据库常见组件:

  • 数据库:database
  • 表:table,由行(row)和列(column)组成
  • 索引:index
  • 视图:view
  • 用户:user
  • 权限:privilege
  • 存储过程:procedure
  • 存储函数:function
  • 触发器:trigger
  • 事件调度器:event scheduler

mysql数据库程序组成:

  • 客户端:若是安装的mariadb,则客户端是mariadb;若是安装的mysql,则客户端是mysql。
    • mysql/mariadb:CLI交互式客户端程序。
    • mysql_secure_installation:安全初始化,强烈建议安装完以后执行此命令。
    • mysqldump:mysql备份工具。
    • mysqladmin:数据备份工具,也可以设置密码。
  • 服务端: 若安装的是mariadb,则服务端是mariadb-server;若是安装的mysql,则服务端是mysqld。

服务器监听的两种socket地址:

  1. ip socket:默认监听在tcp的3306端口,支持远程通信。
  2. unix sock:监听在sock文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock),仅支持本地通信,server地址只能是:localhost,127.0.0.1。

1.5 数据类型

1.5.1 数值型

1.5.1.1 整数型

基本了解:

  • 1 Bytes=1字节,磁盘空间大小单位。
  • 每在服务器上存一个8位数的二进制数字,就会占用1字节的磁盘空间,例如:10101101
  • 有符号:signed。
  • 无符号:unsigned。

举例:

  • 年龄字段应该为正整数,所以应该设置成Age int unsigned。

理由:

  • Age INT ,默认设置成有符号的,为Age int signed。但年龄不应该存在负数,所以应该设置成无符号的,为:Age int unsigned。

在这里插入图片描述

1.5.1.2 小数型

  1. float 、double超出精度,会自动进行四舍五入处理。
    • 比如Salary float(10,2),如存入数据为1000.005,则获取数据为1000.01。
  2. decimal精度可达28位,用于应对科学、金融、经纬度等数据精度要求高的场景。
    • 比如Salary decimal(10,2)。

在这里插入图片描述

1.5.2 字符串型

1.常用字符串型。

  1. char是定长字符串,varchar是变长字符串。
    • EmployeeID char(20),存入字符串内容:‘EMP-00001’,依然会占据20个字符的空间。
    • EmployeeID varchar(20),存入字符串内容:‘EMP-00001’,则只会占据9个字符的空间。

在这里插入图片描述

2.文本型。

  1. text无法设置长度,占据空间固定。
    • EmployeeID text ,存入字符串内容:‘EMP-00001’,会占据65535个字符的空间。
    • 所以文本型字符串用的少,更多使用varchar字符串型。

在这里插入图片描述

1.5.3 日期时间型

  1. date类型字段,只能存储日期数据。datetime类型字段,则可以存储日期和时间。
    • JoinedAt date,只能存入日期:‘2022-01-05’。
    • JoinedAt datetime,则可以存入日期和时间,‘2022-01-05 10:10:00’。
  2. datetime和timstamp类型字段,都可以存储日期和时间,主要区别在于存储的范围不同。有时区概念,不常用,一般采用datetime类型。
    在这里插入图片描述

1.5.4 枚举型

  1. 枚举类型作用:限制存入内容只能是固定值,任选其一。
    • Gender enum (‘男’,‘女’)
    • JobPosition enum(‘业务经理’,‘开发人员’,‘顾问’)

在这里插入图片描述

二、yum安装mariadb

三种安装方式:

  • 源代码:编译安装。
  • 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用。
  • 程序包管理器管理的程序包:
    • rpm安装:OS Vendor操作系统发行商提供;项目官方提供的。
    • deb安装

注意事项:

  1. mariadb与mysql有些不同,mariadb安装后默认没有密码就可直接登录数据库,而mysql安装后有个默认密码,在/var/log/mysql/mysql.log日志中查找该密码,需使用默认密码方能登录数据库。
  2. mariadb安装后需要设置密码,设置的密码是保存在数据库中的某张表里,采用密文方式保存。
  3. mariadb-server是服务端,mariadb是客户端。
  4. 若使用yum源安装mysql,则需要卸载最开始安装的yum源,防止自动升级,卸载命令rpm -e mysql57-community-release。但在公司中一般都是使用二进制安装。

1.yum安装。

yum -y install mariadb mariadb-common mariadb-devel mariadb-server

2.启动服务,并设置开机自启。

systemctl  start mariadb
systemctl  enable mariadb

3.默认无密码,登录数据库。
在这里插入图片描述
4.设置数据库密码为qingjun,此时登录数据库就需要输入密码才能登录。

set password = password('qingjun');

在这里插入图片描述
5.查看数据库内的保存密码

select * from mysql.user\G;

在这里插入图片描述
6.修改数据库密码。

##方式一。
SET password for 'root'@'localhost'=password('123456');

在这里插入图片描述

##方式二。
UPDATE mysql.user SET password=password('999') WHERE user='root';

flush privileges;

在这里插入图片描述

三、二进制安装mysql

配置文件:

  • mysql的配置文件为/etc/my.cnf,可以在多个位置配置,存在优先级。
  • 配置文件查找优先级:/etc/my.cnf ——> /etc/mysql/my.cnf ——> --default-extra-file=/PATH/TO/CONF_FILE ——> ~/.my.cnf

mysql常用配置文件参数:

参数 说明
port = 3306 设置监听端口
socket = /tmp/mysql.sock 指定套接字文件位置
basedir = /usr/local/mysql 指定MySQL的安装路径
datadir = /data/mysql 指定MySQL的数据存放路径
pid-file = /data/mysql/mysql.pid 指定进程ID文件存放路径
user = mysql 指定MySQL以什么用户的身份提供服务
skip-name-resolve 禁止MySQL对外部连接进行DNS解析
使用这一选项可以消除MySQL进行DNS解析的时间。
若开启该选项,则所有远程主机连接授权都要
使用IP地址方式否则MySQL将无法正常处理连接请求

1.创建系统用户和组。

useradd -r -M -s /sbin/nologin mysql

2.解压安装包,并做软连接。

tar xf mysql-5.7.41-linux-glibc2.12-x86_64.tar
tar zxf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

cd /usr/local/
ln -s mysql-5.7.41-linux-glibc2.12-x86_64/ mysql
chown -R mysql.mysql mysql*

3.配置环境变量。

echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

4.创建数据目录。

mkdir /opt/data
chown -R mysql.mysql /opt/data

5.数据库初始化,注意最后输出的临时密码。

mysqld --initialize --user=mysql --datadir=/opt/data/

6.定义配置文件。

vim /etc/my.cnf 

[mysqld]                        #表示服务端,固定写法
basedir = /usr/local/mysql      #安装目录
datadir = /opt/data             #数据存放位置
socket = /tmp/mysql.sock        #套接字文件存放位置
port = 3306                     #默认端口
pid-file = /opt/data/mysql.pid         #进程文件存放位置
user = mysql                           #那个用户启动服务
skip-name-resolve                      #关闭域名解析域名连接,跳过名称解析

7.配置服务脚本。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

在这里插入图片描述
8.启动服务,并设置开机自启。

service mysqld start
chkconfig --add mysqld

在这里插入图片描述
9.使用临时密码登录数据库,设置密码。若缺少依赖包可以是使用whatprovides来查看安装什么包。

yum whatprovides libncurses.so.5

在这里插入图片描述
10.设置免密登录。注意不同的系统用户需家目录

[root@localhost ~]# vim .my.cnf 
[client]
user = root
password = citms

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql基础1——发展起源、数据类型、基础安装 的相关文章

  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 使用php插入sql数据库时出错

    我有一个带有 MySQL 插入查询的程序 sql INSERT INTO people person id name username password email salt VALUES person id name username p
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • 如何在 Laravel 5 中使用 Orchestral/Tenanti 构建具有多个数据库的多租户应用程序?

    我正在尝试使用 Laravel 5 构建和应用程序 它应该是使用多个数据库的多租户数据库架构 我的雇主出于安全目的要求这样做 我尝试手动管理主数据库迁移和租户迁移 但失败了 所以我决定借助 Laravel 特定包的帮助 这应该是我所需要的
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 使用 php 和 mysql 计算日期差(以小时为单位)

    我如何使用 php 和 mysql 找到以小时为单位的日期差异 Use TIMEDIFF http dev mysql com doc refman 5 1 en date and time functions html function
  • 使用 Sequelize (NodeJS) 代替 * 指定特定字段

    好吧 我在 NodeJS 中有一个项目 我正在其中使用 Sequelize 来实现 MySQL ORM 这件事工作得非常好 但是我试图弄清楚是否有一种方法可以指定在查询的基础上返回哪些字段 或者是否有一种方法可以在某处执行 query 例如
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • MySQL,连接两列

    MySQL 表中有两列 SUBJECT and YEAR 我想生成一个字母数字唯一编号 其中包含主题和年份的串联数据 我怎样才能做到这一点 是否可以使用像这样的简单运算符 您可以使用CONCAT http dev mysql com doc
  • 错误代码:1062。重复条目“PRIMARY”

    因此 我的教授给了我表格将其插入数据库 但是当我执行他的代码时 MySQL 不断给出错误代码 1062 这是冲突表和插入 TABLES CREATE TABLE FABRICANTES COD FABRICANTE integer NOT
  • 如何在 Ansible 中运行 MySQL 查询

    我需要编写一个 Ansible 脚本来在 MySQL 数据库中执行 SQL 查询 这是我尝试过的 你能指导一下吗 hosts localhost tasks name retrive data command mysql u root h
  • MySQL InnoDB引擎是否对只读事务运行任何性能优化

    根据参考文档 只读事务标志可能会提示存储引擎运行一些优化 设置会话事务只读 如果事务访问模式设置为 READ ONLY 则对表进行更改 被禁止 这可能使存储引擎能够提高性能 不允许写入时可能进行的改进 InnoDB引擎是否对只读事务运行这样
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U

随机推荐