MySQL數據庫簡介

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…