1 简介

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB公司开发,属于 Oracle 旗下产品,是当今最流行的关系型数据库管理系统之一,在 WEB应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

以Linux作为操作系统,Apache 或Nginx作为 Web服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为 “LAMP“或“LNMP”组合。

1.1 常见版本

  • MySQL 5.x 系列

MySQL 5.5:早期版本,仍被一些服务器使用,提供基本数据库功能,但存在安全漏洞,建议升级。
MySQL 5.6:广泛使用的版本,引入了并行复制、半同步复制、InnoDB性能改进等新特性。
MySQL 5.7:在5.6基础上增强了性能和功能,支持JSON数据类型、多源复制、全文搜索索引增强等。

  • MySQL 8.0

最新版本,于2018年发布,引入了许多重大改进,如更好的性能、增加的功能和改进的安全性。其中一些新特性包括支持基于角色的访问控制,窗口函数,新的数据字典,以及性能优化,如多线程复制和并行查询。

2 Linux安装MySQL

在Linux系统上安装MySQL可以通过多种方式进行,具体步骤取决于使用的发行版。这里提供一个适用于 Ubuntu系统的示例。

2.1 安装

  • 更新软件包列表
apt update
  • 安装MySQL服务器
apt install mysql-server
  • 查看MySQL服务状态
# 安装完成后,MySQL服务会自动启动
systemctl status mysql

2.2 配置

为了提高安全性,建议运行安全脚本来移除一些默认的不安全设置。
按照提示操作即可,包括设置root密码、移除匿名用户、禁止root远程登录等。

mysql_secure_installation

2.3 测试

  • 登录
mysql -u root -p

输入在安全脚本中设置的root密码后,看见MySQL shell提示符,表示安装成功
没有密码直接回车即可

  • 退出
exit;

3 数据库操作

3.1 数据库

  • 进入MySQL
mysql -u root -p
  • 查看所有数据库
show databases;
  • 创建数据库
create database test default charset utf8;
create database test1 default charset utf8;
  • 删除数据库
drop database test;
  • 选择数据库
use test1;
  • 查看库中所有表
show tables;
  • 查看创建数据库的语句
show create database test1;

3.2 表结构

3.2.1 约束

关键字描述
auto_increment自增长
not null非空
default ‘xx’默认值
unique唯一
primary key主键
froeign key外键
charset指定字符集

3.2.2 操作

  • 创建表
create table student(id int auto_increment primary key,name varchar(5) not null,sex varchar(3) default '女',address varchar(50),phone varchar(15) not null unique,age int
);
  • 删除表
drop table student;
  • 改表名
alter table student rename students;
  • 修改列属性
alter table students modify name varchar(10);
  • 修改列名
alter table students change name newname varchar(10);
alter table students change newname name varchar(10);
  • 添加新的列
alter table students add grade float after sex;
  • 查看建表语句
show create table students;
  • 查看表结构
desc students;

3.3 表数据

create table emp(empno    int,ename    varchar(10),job      varchar(9),mgr      int,hiredate varchar(10),sal      float,comm     float,deptno   int
);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, '17-12-1980', 800, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, '20-02-1981', 1600, 300, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, '22-02-1981', 1250, 500, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, '02-04-1981', 2975, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN',7698, '28-09-1981', 1250, 1400, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, '01-05-1981', 2850, null, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, 'CLARK', 'MANAGER', 7839, '09-06-1981', 2450, null, 10);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, '19-04-1987', 3000, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, '17-11-1981', 5000, null, 10);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698, '08-09-1981', 1500, 0, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, '23-05-1987', 1100, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, '03-12-1981', 950, null, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, '03-12-1981', 3000, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, '23-01-1982', 1300, null, 10);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (3399, 'ZX', null, null, '07-08-2025', null, null, null);
create table dept(deptno int,dname  varchar(14),loc    varchar(13)
);
insert into DEPT (deptno, dname, loc)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (deptno, dname, loc)
values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (deptno, dname, loc)
values (30, 'SALES', 'CHICAGO');
insert into DEPT (deptno, dname, loc)
values (40, 'OPERATIONS', 'BOSTON');

3.3.1 增删改

  • 插入
insert into students(name,sex,phone) values('zs','男',1001);
insert into students(name,sex,phone) values('ls',null,1002);
insert into students(name,sex,phone) values('ls','',1004);
  • 删除
# 删除指定数据
delete from students where phone=1004;
# 删除表中所有数据,自增长继续
delete from students;
# 删除表中所有数据,自增长从头再来
truncate students;
  • 修改
update students set name='ww' where phone=1004;
# 不指定条件修改所有
update students set sex='女';

3.3.2 事务

在MySQL中执行命令时,通常都直接被确定提交了。也就是说用户不用在意此事,所有的命令都会被自动 COMMIT。

  • 取消自动提交
set autocommit=0;
insert into students(name,sex,phone) values('zs','男',1001);
insert into students(name,sex,phone) values('ls',null,1002);
  • 提交
commit;
  • 回滚:未提交的操作,回滚会全部失效
insert into students(name,sex,phone) values('zs','女',1003);
insert into students(name,sex,phone) values('ls',null,1004);
rollback;
  • 回滚点:回滚后,回滚点之后的操作全部失效
insert into students(name,sex,phone) values('zs','女',1003);
savepoint a;
insert into students(name,sex,phone) values('ls',null,1004);
rollback to a;
  • 开启自动提交
set autocommit=1;

3.3.3 查询

  • 查询所有数据
select * from students;
  • 查询指定字段
select id,name,phone from students;
  • 条件查询
select * from students where sex='男';
  • 多条件查询
select * from students where sex='男' or sex='女';
  • 不等
select * from students where sex!='男';
select * from students where sex<>'男';
select * from students where not sex='男';
  • 模糊查询
select * from students where name like '%z%';
select * from students where name like 'z_';

like:模糊匹配
%:任意n个字符
_:任意1个字符

  • 别名
select s.id 序号,s.name 姓名,s.phone 手机号 from students s;
  • 排序
select * from students order by phone desc;
select * from students order by phone asc;

desc:降序
asc:升序,默认选项可不写

  • 去重
select distinct name from students;
  • 统计
select count(*) from students where sex='男';
  • 函数
select max(phone) from students;
select min(phone) from students;
select avg(phone) from students;
select sum(phone) from students;
  • 分组
select sex 性别,count(*) 人数 from students group by sex;

3.3.4 分页查询

  • 语法:limit a,b

a:起始位,不包括它本身,不写默认为0
b:长度

select * from emp order by sal limit 1,5;
select * from emp order by sal limit 5;

3.3.5 多表关联

  • 内联
select d.deptno,d.dname,e.empno,e.ename
from emp e,dept d where e.deptno=d.deptno;
# 效果相同
select d.deptno,d.dname,e.empno,e.ename
from emp e inner join dept d on e.deptno=d.deptno;
  • 左外联
select d.deptno,d.dname,e.empno,e.ename
from emp e left join dept d on e.deptno=d.deptno;
  • 右外联
select d.deptno,d.dname,e.empno,e.ename
from emp e right join dept d on e.deptno=d.deptno;
  • MySQL没有全外联,可以通过并集实现
select d.deptno,d.dname,e.empno,e.ename
from emp e left join dept d on e.deptno=d.deptno
union
select d.deptno,d.dname,e.empno,e.ename
from emp e right join dept d on e.deptno=d.deptno;

3.3.6 子查询

select * from emp where deptno=(select deptno from dept where loc='CHICAGO'
);

4 数据库备份

4.1 备份类型

  • 物理备份:直接对数据库的数据文件、日志文件、索引文件进行备份
  • 逻辑备份(热备份):对数据库对象(库、表)以SQL语句的形式导出进行备份

4.2 物理冷备份与恢复

物理冷备份一般用归档或复制命令直接打包数据库文件夹,通常为安装目录下的data文件夹。在进行备份之前需要关闭mysqld服务:

linux: systemctl stop mysqld
windows: net stop mysqld

物理恢复,将备份文件解压缩至原data目录所在目录或覆盖data目录中的文件,回复完成,重新启动mysqI服务。

4.3 逻辑热备份与恢复

可使用mysql自带的备份工具mysqldump进行备份(完全备份、逻辑热备)

4.3.1 备份

不要在mysql中执行,在命令行中执行即可

  • 备份指定库中的一个或多个表(不包含库对象本身)
mysqldump –u 用户 –p 密码 库名 表1 表2 > XXX.sql
  • 备份一个或多个指定库及库中的所有表
mysqldump –u 用户 –p 密码 --databases 库1 库2 > XXX.sql
  • 备份所有库及库中的所有表
mysqldump –u 用户 –p 密码 --all-databases > XXX.sql
mysqidump –u 用户 –p 密码 --all-databases | gzip > XXX.sql.gz
  • mysqldump常用选项:
选项说明
–databases(-B)备份数据库
–all-databases(-A)备份所有数据库
-d或–no-data用于备份数据库的结构(表的创建语句),但不包括表中的数据
–flush-logs(-F)在备份开始前刷新MySQL服务器的日志文件
–single-transaction使用单一事务来备份数据
–lock-all-tables备份过程中锁定所有表
–master-data=2用于备份二进制日志的位置信息,用于设置主从复制
–set-gtid-purged=OFF用于关闭GTID信息的输出

4.3.2 恢复

不要在mysql中执行,在命令行中执行即可

  • 备份了整个库,进行恢复
mysql –u 用户 –p < XXX.sql
  • 只备份了表,要指定库恢复
mysql –u 用户 –p 库名 < XXX.sql

4.3.3 示例

  • 库的备份与恢复
# 备份库test1
mysqldump –u root –p --databases test1 > D:/333/test1.sql
# 进入MySQL,手动删除库test1
drop database test1;
# 恢复库test1
mysql –u root –p < D:/333/test1.sql
  • 表的备份与恢复
# 备份test1库中的emp表
mysqldump -u root -p test1 emp > D:/333/test1_emp.sql
# 进入MySQL,手动表emp
drop table test1.emp;
# 恢复表emp
mysql -u root -p test1 < D:/333/test1_emp.sql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95111.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95111.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95111.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Oracle] UNPIVOT 列转行

Oracle数据库中的UNPIVOT是一种用于将列转换为行的SQL操作&#xff0c;它允许用户将多个列的数据转换为多行的形式&#xff0c;以便进行更灵活的数据分析和报表生成UNPIVOT主要用于将宽表(多列)转换为长表(多行)&#xff0c;减少表的列数&#xff0c;增加行数语法格式SELECT pi…

node.js 学习笔记3 HTTP

path模块 path模块主要用于操作路径。要使用path&#xff0c;首先需要引入path模块。require(path) path.resolve 用于拼接规范的绝对路径。 如果想拼接一个路径&#xff0c;有时候是使用字符串手动拼接的&#xff0c;但由于系统的规范不同&#xff0c;路径中的\和/无法统一…

Flutter Dialog、BottomSheet

属性说明title标题content内容actions按钮applicationName说明文字applicationVersion版本applicationLegalese版本基本使用class MyState extends State {AlertDialog delDialog(BuildContext context) {AlertDialog alertDialog AlertDialog(title: Text("提示"),…

《算法导论》第 19 章 - 斐波那契堆

引言斐波那契堆&#xff08;Fibonacci Heap&#xff09;是一种高效的可合并堆数据结构&#xff0c;由 Michael L. Fredman 和 Robert E. Tarjan 于 1984 年提出。它在许多优先队列操作中提供了极佳的 amortized&#xff08;摊还&#xff09;时间复杂度&#xff0c;尤其适用于需…

MySQL-日志

MySQL-日志前言一、错误日志&#xff08;error log&#xff09;二、慢查询日志(slow query log)三 、一般查询日志(general log)四、 事务日志重做日志&#xff08;redo log&#xff09;回滚日志&#xff08;undo log&#xff09;五、 二进制日志(bin log)/归档日志 > 数据同…

嵌入式C语言编程:策略模式、状态模式和状态机的应用

概述 在没有面向对象语法的C语言中&#xff0c;策略&#xff08;Strategy&#xff09;模式和状态&#xff08;State&#xff09;模式都通过“上下文 接口”组合来模拟多态。 它们在代码结构上几乎一致&#xff0c;但设计意图和应用场景却差异很大。 本文分三部分深入剖析&…

人工智能、机器学习、深度学习:2025技术革命的深度解析

目录 人工智能、机器学习、深度学习&#xff1a;技术革命的深度解析 引言 第一部分&#xff1a;人工智能的起源与演进 1.1 人工智能的定义 1.2 人工智能的历史 1.3 人工智能的关键概念 a.知识表示&#xff08;Knowledge Representation&#xff09; b.搜索算法&#xf…

【Python】常用内置模块

1.os 文件目录 import os# 创建文件夹 os.mkdir(dir) # 判断文件是否存在 os.path.exists(path) # 列出文件夹下文件列表 os.listdir(dir)""" 常用 """ # 当前文件相对路径 os.getcwd()# 当前文件绝对路径 os.path.abspath(__file__)# 当前文…

(Python)爬虫进阶(Python爬虫教程)(CSS选择器)

源代码&#xff1a;#导入库 import requests from bs4 import BeautifulSoup import pandas as pd#爬虫函数 def scrape_books():#1.基本网址连接base_url "http://books.toscrape.com"#2.获取基本网址responserequests.get(base_url)#3.检查是否正常访问if respons…

第七节 自然语言处理与Bert

自然语言处理与BERT模型&#xff1a;从基础到实践入门 自然语言处理&#xff08;NLP&#xff09;的核心目标之一是让计算机理解人类语言的语义和上下文。本文将从基础的字词表示出发&#xff0c;逐步解析传统模型的局限性、Self-attention的突破性思想&#xff0c;以及BERT如何…

攻击者瞄准加密技术的基础:智能合约

虽然利用许多智能合约中的安全漏洞已经成为网络攻击者的长期目标&#xff0c;但越来越多的安全公司开始关注使用欺诈性或混淆的智能合约从加密货币账户中窃取资金的骗局。 根据网络安全公司 SentinelOne 本周发布的分析报告&#xff0c;在最近一次引人注目的攻击中&#xff0c…

基于开源AI大模型、AI智能名片与S2B2C商城小程序的零售智能化升级路径研究

摘要&#xff1a;在零售业数字化转型浪潮中&#xff0c;人工智能技术正从“辅助工具”向“核心生产力”演进。本文聚焦开源AI大模型、AI智能名片与S2B2C商城小程序的协同应用&#xff0c;提出“数据感知-关系重构-生态协同”的三维创新框架。通过分析智能传感、动态画像与供应链…

机器学习 朴素贝叶斯

目录 一.什么是朴素贝叶斯 1.1 从 “概率” 到 “分类” 二.朴素贝叶斯的数学基础&#xff1a;贝叶斯定理 2.1 贝叶斯定理公式 2.2 从贝叶斯定理到朴素贝叶斯分类 2.3 “朴素” 的关键&#xff1a;特征独立性假设 三、朴素贝叶斯的三种常见类型 3.1 高斯朴素贝叶斯&…

A Logical Calculus of the Ideas Immanent in Nervous Activity(神经网络早期的M-P模型)

哈喽&#xff0c;各位朋友大家上午好&#xff01;今天我们要一起啃下这篇神经科学与逻辑学交叉领域的奠基之作——McCulloch和Pitts的《A Logical Calculus of the Ideas Immanent in Nervous Activity》。这篇论文篇幅不长&#xff0c;但每一个定理、每一个假设都像精密齿轮&a…

大语言模型提示工程与应用:提示工程-提升模型准确性与减少偏见的方法

语言模型可靠性优化 学习目标 在本课程中&#xff0c;我们将学习通过提示工程提升模型事实准确性、减少偏见的有效方法。 相关知识点 语言模型可靠性优化 学习内容 1 语言模型可靠性优化 1.1 事实准确性增强 LLM可能生成看似合理但实际虚构的内容。优化策略包括&#x…

遇到前端导出 Excel 文件出现乱码或文件损坏的问题

1. 检查后端返回的数据格式确认接口响应&#xff1a;确保后端返回的是二进制流&#xff08;如 ArrayBuffer&#xff09;或 Base64 编码的 Excel 文件&#xff0c;而非 JSON 字符串。用浏览器开发者工具&#xff08;Network 标签&#xff09;检查接口响应类型&#xff1a;正确的…

2025年Cloudflare WAF防护机制深度剖析:5秒盾绕过完全指南

2025年Cloudflare WAF防护机制深度剖析&#xff1a;5秒盾绕过完全指南 技术概述 Cloudflare作为全球领先的CDN和网络安全服务提供商&#xff0c;其WAF&#xff08;Web Application Firewall&#xff09;防护系统已经成为现代Web安全的标杆。特别是其标志性的"5秒盾"…

【Android调用相册、拍照、录像】等功能的封装

关于调用Android项目 关于Android中调用相机拍照、录像&#xff0c;调用相册选图等是比较繁琐的&#xff0c;为了减少代码冗余&#xff0c;肯定需要封装成工具类&#xff0c;最终使用大概如下&#xff0c;大部分代码使用Java编写&#xff0c;因为需要照顾到不适用kotlin的伸手…

Git 分支管理:从新开发分支迁移为主分支的完整指南

问题背景 我在使用 Git 进行开发时&#xff0c;由于原有的主分支遭到了污染&#xff0c;不得已在多方尝试之后&#xff0c;决定替换原有的主分支。创建一个新分支并完成了重要修改&#xff1a; 基于提交 0fcb6df0f5e8caa3d853bb1f43f23cfe6d269b18 创建了 new-development 分支…

nginx常见问题(四):端口无权限

当 Nginx 日志报错 bind() to 80 failed (13: Permission denied) 时&#xff0c;这通常是由于权限不足导致 Nginx 无法绑定到 80 端口&#xff08;该端口为系统特权端口&#xff09;。以下是详细的问题分析与解决方案&#xff1a;一、问题原因分析80 端口属于 系统特权端口&am…