当前位置: 首页 > news >正文

MySQL的安装及相关操作

目录

一. 数据库产生的背景

二. 数据库操作系统的组成

2.1 数据库(Database)

2.2 数据库管理系统(DBMS, Database Management System)

2.3 应用程序(Application)

三. 数据库的分类

3.1 关系数据库

3.2 非关系数据库

四. MySQL安装

4.1yum安装

1. Ubuntu

​2. centos

3. centos---- 用清华源安装

4.2 编译安装

4.3 二进制下载

centos

Ubuntu

五. MySQL数据库相关的操作

5.1 登录数据库

5.2 查看数据库结构

1. 查看所有数据库

2. 查看数据库信息

3. 查看指定数据库中的表

4. 查看表的属性

5.3 创建数据库和数据表

1. 创建新的数据库

2. 创建新的表

5.4 删除数据库和数据表

1. 删除指定数据库中的表 

2. 删除数据库

​5.5 管理数据表中的数据记录

1. 查询数据记录

补充:select其他用法

字段使用别名

与算数操作符(+, -, *, /, % )结合

不连续的查询 IN (element1, element2, ...)

2. 向表中插入新的数据

3. 去除重复行

4. like 模糊查询 与 通配符

5. 修改数据表中的数据记录

6.  删除数据表中的数据记录

7. 修改表名和表结构

8. 聚合函数(重要)


一. 数据库产生的背景

在数据库出现之前,数据通常存储在文件系统中,容易导致:

  • 数据冗余:相同的数据可能被多个应用程序重复存储,导致数据冗余。
  • 数据不一致:由于数据冗余,更新数据时容易产生不一致。
  • 数据孤立:数据分散在不同的文件中,难以共享和整合。

二. 数据库操作系统的组成

定义:数据库系统(Database System, DBS)是一个复杂的软件系统,用于存储、管理和操作数据。它由多个组成部分协同工作,共同实现数据的有效管理和使用。

2.1 数据库(Database)

数据库(Database)是用于存储、管理和组织数据的系统或软件。它的核心作用是提供一种系统化的方式来存储和检索信息,以满足不同应用的需求。

2.2 数据库管理系统(DBMS, Database Management System)

用于创建、管理和操作数据库的软件。

2.3 应用程序(Application)

指以数据库为基础的应用程序。

三. 数据库的分类

3.1 关系数据库

  • 关系型数据库(Relational Database,RDB)是基于关系模型的数据库。
  • 数据以表格(Table)的形式存储,表与表之间通过关系连接,表格由行(Row)和列(Column)组成。

关系数据库常用的关系术语

  • 表(Table):存储数据的基本单位。
  • 行(Row):表示一条记录。
  • 列(Column):表示数据的属性。
  • 主键(Primary Key):唯一标识表中的每一行数据,避免数据重复。
  • 外键(Foreign Key):是表中的一个列或列的组合,它引用另一个表的主键;用于建立表与表之间的关系。

  • 关系(Relationship):指表与表之间的关联,通常通过外键实现。

常见关系数据库:

MySQL,PostgreSQL,Oracle

3.2 非关系数据库

非关系数据库是一种灵活的数据存储系统,适用于非结构化或半结构化数据,不需要预先定义严格的模式,数据结构可以动态调整。

多种数据模型

  • 键值对(Key-Value):如Redis

  • 文档型(Document):如MongoDB

  • 列族型(Column-Family):如Cassandra

四. MySQL安装

4.1yum安装

1. Ubuntu

apt search mysql
#在已配置的软件包仓库中,找到你需要的MySQL相关软件包apt-get update
#更新本地的软件包缓存apt install mysql-server-8.0 -ysystemctl start mysqlsystemctl status mysqlapt install mycli
#是一个命令行工具,专门用于与MySQL数据库进行交互

2. centos

yum remove  mysql-libs   #卸载 mariadb的安装联系
#下载软件
rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm 
rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm 
rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm 
rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm systemctl start mysqldsystemctl status mysqldgrep password /var/log/mysqld.logmysql -uroot -p 密码alter user root@'localhost' identified by 'Admin@123';
#修改MySQL中root用户的密码

3. centos---- 用清华源安装

vim /etc/yum.repos.d/mysql-community.repo[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7-$basearch/
enabled=1
gpgcheck=0
#gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022[mysql-tools-community]
name=MySQL Tools Community
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7-$basearch/
enabled=1
gpgcheck=0
#gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022[mysql-8.0-community]
name=MySQL 8.0 Community Server
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-8.0-community-el7-$basearch/
enabled=1
gpgcheck=0
#gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022yum install mysql-community-server -ysystemctl start mysqldgrep password /var/log/mysqld.logmysql -uroot -p 密码alter user root@'localhost' identified by 'Admin@123';

4.2 编译安装

yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel#依赖环境
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake#添加用户
useradd -s /sbin/nologin  mysql#将MySQL源代码包放在 /opt目录下
cd /opttar xf mysql-boost-5.7.20.tar.gz #解压cd mysql-5.7.20#编译
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_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=boost \
-DWITH_SYSTEMD=1#安装
make -j2 && make install 
#进入配置文件,把内容全删掉,然后加入以下内容
vim /etc/my.cnf[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
server-id = 1sql_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#更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf#设置路径环境变量
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile	
source /etc/profile#数据库初始化
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data#添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#能用systemd启动systemctl daemon-reload          刷新识别     
systemctl start mysqld.service   开启服务
systemctl enable mysqld          开机自启动ss -natp | grep 3306        查看端口#修改用户mysql 的登录密码
mysqladmin -u root -p password "123abc" 
#开始初始密码为空,回车即可,然后输入新密码

4.3 二进制下载

centos

mkdir -p /datacd /data下载压缩包tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 


mkdir /data/mysql   -pgroupadd mysqluseradd -r -g mysql -s /bin/false mysqlcd /data/mysql-5.7.20-linux-glibc2.12-x86_64//bin./mysqld --initialize-insecure --user=mysql --datadir=/data/mysql --lc-messages-dir=/data/mysql-5.7.20-linux-glibc2.12-x86_64/share
#会出现warm警告,选择无视即可ln -s /data/mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
#ln -s /data/mysql文件名 /usr/local/mysql
#建立软连接#准备配置文件cp /etc/my.cnf{,.bak}
vim /etc/my.cnf
#清空内容
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock        
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sockcp /data/mysql-5.7.20-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysqld
#为 MySQL 服务创建一个系统服务脚本chkconfig --add mysqldsystemctl start mysqldsystemctl status mysqldecho 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh. /etc/profile.d/mysql.sh

Ubuntu

groupadd -r  -g  306 mysql
useradd  -r  -g  306 -u 306 -d /data/mysql mysqlmkdir /data/mysql   -p
chown mysql:mysql /data/mysqlcd /data
#下载mysql压缩包
tar xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 
ln -s /data/mysql-5.7.44-linux-glibc2.12-x86_64   /usr/local/mysqlvim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock        
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sockecho 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.shmysqld --initialize   --user=mysql --datadir=/data/mysqlcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldsystemctl daemon-reload
systemctl  start  mysqldgrep password /var/log/mysqld.log
mysql -u root -p '密码'
alter user root@'localhost' identified by 'abc123';create user test@'192.168.%.%' identified by '123123';
grant all privileges on *.* to test@'192.168.%.%';
ALTER USER 'test'@'192.168.%.%' IDENTIFIED WITH mysql_native_password BY 'Admin@123';

五. MySQL数据库相关的操作

5.1 登录数据库

mysql -u root -p password "密码" #设置密码mysql -u root -p #没有设置密码

5.2 查看数据库结构

1. 查看所有数据库

show databases;						#大小写不区分,分号“;”表示结束

2. 查看数据库信息

show create database 数据库名;

3. 查看指定数据库中的表

use 表名;
show tables;

4. 查看表的属性

use 数据库名;
desc 表名;

5.3 创建数据库和数据表

1. 创建新的数据库

create database 数据库名;

举例:我要建立一个名为dhf的数据库

create database dhf;

2. 创建新的表

CREATE TABLE 表名 (列名1 数据类型 [列约束],列名2 数据类型 [列约束],...[表约束]
);列名:
列名是表中每一列的名称,需符合 MySQL 的命名规则。数据类型:
数据类型定义了列中存储的数据类型,常用数据类型:
整数:INT、BIGINT、TINYINT
浮点数:FLOAT、DOUBLE
字符串:VARCHAR(n)、CHAR(n)、TEXT
日期时间:DATE、DATETIME、TIMESTAMP
布尔值:BOOLEAN 或 TINYINT(1)列约束:
列约束用于限制列中数据的规则。
常用列约束:
NOT NULL:列值不能为空。
UNIQUE:列值必须唯一。
PRIMARY KEY:列作为主键,唯一标识每一行。
AUTO_INCREMENT:列值自动递增(通常用于主键)。
DEFAULT 默认值:为列指定默认值。
CHECK (条件):列值必须满足指定条件(MySQL 8.0+支持)。表约束:
表约束用于定义表级别的规则。
常用表约束:
PRIMARY KEY (列名):定义主键。
FOREIGN KEY (列名) REFERENCES 另一表名(列名):定义外键。
UNIQUE (列名):定义唯一约束。
CHECK (条件):定义表级别的检查约束(MySQL 8.0+ 支持)。

举例:我将建立一个名为dhf的数据库,并在其中建立一个名为students的数据表

create database dhf;use dhf;
CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY, -- 学生ID,主键,自动递增name VARCHAR(100) NOT NULL,               -- 学生姓名,不能为空gender ENUM('男', '女', '其他') NOT NULL,  -- 性别,枚举类型,不能为空birth_date DATE,                          -- 出生日期email VARCHAR(100) UNIQUE,               -- 邮箱,唯一phone VARCHAR(20),                        -- 电话address VARCHAR(255),                     -- 地址class_id INT                             -- 班级ID
);desc students;
#查看表

5.4 删除数据库和数据表

1. 删除指定数据库中的表 

方法一:
use 数据库名;
drop table 表名;方法二:
drop table 数据库名.表名;				#不用USE进入库中,需加上数据库名

2. 删除数据库

drop database 数据库名;

5.5 管理数据表中的数据记录

接下来以hellodb数据库中的students数据表为操作对象

1. 查询数据记录

select 字段名1,字段名2[,...] from 表名 [where 条件表达式];

举例1:我要查询hellodb数据库下的students表中的所有记录

select * from students;

举例2:我只要查看students表中Name的记录

举例3:我只要查看students表中Name和Age的记录

select Name from students;select Name,Age from students;

举例4:查询students表中年龄大于等于20,小于等于30的

方法一:
select * from students where age>=20 and age<=30;方法二:
select * from students where age between 20 and 30;

补充:select其他用法

字段使用别名
select  age 年龄,classid 班级 from students;

与算数操作符(+, -, *, /, % )结合
select 2*3;

用别名进一步优化 

select 2*3 as result;

不连续的查询 IN (element1, element2, ...)

举例:查询年龄在20,22,30的人

select * from students where age  in (20,22,30);

2. 向表中插入新的数据

insert into表名(字段1,字段2[,...]) values(字段1的值,字段2的值,...);

 举例1:

insert into students (StuID,Name,Age,Gender,ClassID,TeacherID) values(26,"Ding Huangfei",23,M,4,6);

3. 去除重复行

select distinct column1, column2, ...from 表名;

举例:从 students 表中查询所有学生的年龄,并返回不重复的年龄值

select distinct age from students;

4. like 模糊查询 与 通配符

select "字段" from "表名" where "字段" like   "匹配表达式";

SQL 中常用的通配符有两种:

(1) %(百分号)

  • 表示 任意长度的任意字符(包括 0 个字符)。

  • 示例:

    • 'a%':匹配以 a 开头的字符串。

    • '%a':匹配以 a 结尾的字符串。

    • '%a%':匹配包含 a 的字符串。

(2) _(下划线)

  • 表示 单个任意字符

  • 示例:

    • 'a_':匹配以 a 开头且长度为 2 的字符串。

    • '_a':匹配以 a 结尾且长度为 2 的字符串。

 举例:

select * from students where name like 's%';   #找到名字以s开头的
select * from students where name like '%s%';  #找到名字包含s

5. 修改数据表中的数据记录

UPDATE 表名
SET column1 = value1, column2 = value2, ...
WHERE 限制条件;

 举例:将StuID为1的学生的年龄更新为 29

UPDATE students
SET age = 20
WHERE StuID = 1;

6.  删除数据表中的数据记录

delete from 表名 where 条件表达式;

举例:删除students表中StuID为3的记录

delete from students where StuID=3;

7. 修改表名和表结构

#修改表名
alter table 旧表名 rename 新表名;#扩展表结构(增加字段)
alter table 表名 add 新字段 数据类型 [字段属性];#修改字段(列)名,
alter table 表名 change 旧字段 新字段 数据类型 [字段属性];#删除字段
alter table 表名 drop 字段名;

举例:

#将students重命名为stu
alter table students rename stu;#在stu表中添加一个height列,数据类型为FLOAT,不允许为空
alter table stu add height float not null; #删除height列
alter table stu drop height;

8. 聚合函数(重要)

函数名函数意
avg()返回指定列的平均值
count()返回指定列中非 NULL 值的个数
min()返回指定列的最小值
max()返回指定列的最大值
sum(x)返回指定列的所有值之和

#avg平均值select avg(age) from students;   #avg  所有人的平均值
select avg(age) from students where classid=1;  #求1班年龄平均值

 

#count返回指定列中非NULL值的个数select count(classid) from students;       #统计非空classid 字段 一共有多少行记录select count(distinct classid) from students;  #一共有几个班级 去重select count(classid) from students;       #统计一共有多少个班级
select count(*) from students;             #统计一共有多少条数据

 

#min最小值
select min(age) from students;#max最大值
select max(classid) from students;

 

#sum求和
select sum(age) from students;  #求年龄总和
select sum(age) from students where classid=1;   #求1班的年龄总和

相关文章:

  • MySQL 自启动时报错can‘t create PID file: No such file or directory
  • 基于天猫 API 的高效商品详情页实时数据接入方法解析
  • 麒麟系统编译osg —— 扩展篇
  • 系统架构设计(十六):敏感点、权衡点、风险点和非风险点
  • EtherCAT通信协议
  • 题解:AT_abc244_e [ABC244E] King Bombee
  • vue+three.js 五彩烟花效果封装+加载字体
  • Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
  • idea 插件开发自动发布到 nexus 私服中(脚本实例)
  • 随记1-LLM多轮对话的陷阱
  • LTX-Videov本地部署教程:时空扩散+多尺度渲染,重塑AI视频研究范式
  • 至此(day1-day4)代码详解(ai辅助整理)
  • Python代码加密与发布方案详解
  • 计算机图形学Games101笔记--几何
  • leetcode字符串篇【公共前缀】:14-最长公共前缀
  • NebulaGraph学习笔记-SessionPool之Session not existed
  • 常见高速电路设计与信号完整性核心概念
  • SVA 断言16.9 Sequence operations序列运算翻译笔记(12)
  • 香港科技大学(广州)智能制造理学硕士招生宣讲会——深圳大学专场
  • Nextjs App Router 开发指南
  • 围绕加快科创中心建设,上海市委中心组学习会听取专题辅导报告
  • 夜读丨永不掉电的陪伴
  • 财政部:4月份中央收入增长1.6%,今年以来首月实现正增长
  • 住建部:截至去年底常住人口城镇化率达到67%
  • 张核子“限高”次日即被解除,前员工的执行款3个月后仍未到账
  • 特朗普与泽连斯基通话