MySQL數據庫全面詳解:從基礎到高級應用

一、數據存儲概述

在計算機系統中,數據可以存儲在多種形式中:

  1. 變量:程序中最基本的數據存儲單元

  2. 元組:不可變的序列類型,常用于函數返回多個值

  3. 列表:有序可變集合,可存儲不同類型元素

  4. 字典:鍵值對集合,提供快速查找

  5. 集合:無序不重復元素集

  6. 文件

    • XML文件:<name>ZS</name>

    • YAML文件:name: ZS

    • JSON文件:{"name":"zs"}

二、數據庫分類

1. 關系型數據庫(RDBMS)

  • MySQL

  • Oracle

  • SQL Server

  • PostgreSQL

特點

  • 采用關系模型組織數據

  • 數據以行和列的形式存儲(表結構)

  • 支持SQL語言

  • 強調數據一致性和完整性

2. 非關系型數據庫(NoSQL)

  • Redis(鍵值存儲)

  • MongoDB(文檔存儲)

  • Cassandra(列存儲)

  • Neo4j(圖數據庫)

特點

  • 靈活的數據模型

  • 高擴展性和可用性

  • 適合處理大規模數據

  • 不強制要求固定表結構

三、數據庫選擇策略

關系型數據庫適用場景

  1. 需要嚴格的數據一致性和事務支持

    • 銀行轉賬(ACID事務)

    • 訂單支付

    • 庫存扣減

  2. 復雜查詢和關聯分析

    • 多表關聯(JOIN)

    • 聚合函數(GROUP BY)

    • 子查詢等

  3. 數據結構穩定且規范

    • 字段固定(如用戶表包含[id, name, email])

    • Schema需預先定義

非關系型數據庫適用場景

  1. 高并發寫入和水平擴展需求

    • 物聯網設備數據(每秒百萬級寫入)

    • 社交媒體的用戶動態

  2. 靈活或非結構化數據

    • 動態字段(如用戶自定義屬性)

    • 嵌套數據(如評論的回復樹)

  3. 特定查詢模式優化

    • 圖數據庫(Neo4j):處理復雜關系

    • 列存儲(Cassandra):時間序列數據

四、MySQL數據庫詳解

1. MySQL概述

MySQL是一個開源的關系型數據庫管理系統,由瑞典MySQL AB公司開發,現屬于Oracle旗下產品。它是目前最流行的關系型數據庫之一,特別適合Web應用開發。

特點

  • 體積小、速度快

  • 總體擁有成本低

  • 開源

  • 支持多用戶、多線程

2. 安裝與卸載

安裝步驟

  1. 下載對應版本(V5.5/V5.7/V8.0)

  2. 選擇安裝路徑(避免中文路徑)

  3. 設置root密碼

  4. 配置字符編碼(推薦UTF-8)

卸載步驟

  1. 控制面板中卸載MySQL

  2. 刪除C盤ProgramData中的MySQL文件夾(隱藏文件夾)

  3. 清理注冊表(可選)

  4. 重啟電腦后重新安裝

3. MySQL與Oracle區別

區別項MySQLOracle
字符串類型VARCHARVARCHAR2
自動遞增支持AUTO_INCREMENT使用序列(SEQUENCE)實現
檢查約束MySQL8.0.16+支持Oracle9i+支持
分組語法允許SELECT非分組字段只允許SELECT分組字段和統計函數
分頁語法使用LIMIT使用ROWNUM或OFFSET-FETCH
默認隔離級別可重復讀(REPEATABLE READ)讀已提交(READ COMMITTED)

五、SQL語言詳解

SQL(Structured Query Language)是用于管理關系數據庫的標準語言。

1. SQL分類

  1. 數據査詢語言(DQL: Data Query Language):也稱為“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。

  2. 數據操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用于添加、修改和刪除。

  3. 事務控制語言(TCL:Transaction Control Language):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。

  4. 數據控制語言(DCL:Data Control Language):它的語句通過GRANT或REVOKE實現權限控制,確定單個用戶和用戶組對數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。

  5. 數據定義語言(DDL:Data Defination Language):其語句包括動詞CREATE,ALTER和DROP。在數據庫中創建新表或修改、刪除表(CREATE TABLE或 DROP TABLE):為表加入索引等。

2. 基礎SQL命令

數據庫操作
-- 查看所有數據庫
SHOW DATABASES;-- 創建數據庫
CREATE DATABASE dbname;-- 使用數據庫
USE dbname;-- 刪除數據庫
DROP DATABASE dbname;-- 查看數據庫創建信息
SHOW CREATE DATABASE dbname;
表操作
-- 創建表
CREATE TABLE t_user (name VARCHAR(10),age INT(3),address VARCHAR(50)
);-- 查看所有表
SHOW TABLES;-- 查看表結構
DESC t_user;-- 刪除表
DROP TABLE t_user;
修改表結構
-- 刪除列
ALTER TABLE t_user DROP COLUMN name;-- 添加列
ALTER TABLE t_user ADD COLUMN name VARCHAR(10);-- 修改列
ALTER TABLE t_user CHANGE COLUMN name username VARCHAR(15);

3. 常用數據類型

  • INT:整數

  • DOUBLE:浮點數

  • VARCHAR:可變長度字符串

  • DATETIME:日期時間

  • TEXT:長文本

  • BLOB:二進制數據

六、數據增刪改查(CRUD)

1. 增加數據(INSERT)

-- 方式1:全字段插入
INSERT INTO t_user VALUES (12, "beijing", "admin");-- 方式2:指定字段插入
INSERT INTO t_user (age, address) VALUES (12, "beijing");

2. 刪除數據(DELETE)

-- 條件刪除
DELETE FROM t_user WHERE address = "beijing";-- 清空表(慎用)
DELETE FROM t_user;

3. 修改數據(UPDATE)

-- 條件更新
UPDATE t_user SET username="qiaoba" WHERE address="taiyuan";-- 全表更新
UPDATE t_user SET username="qiaoba";

4. 查詢數據(SELECT)

-- 查詢所有數據
SELECT * FROM t_user;-- 查詢特定字段
SELECT name, age FROM t_user;-- 帶條件查詢
SELECT * FROM t_user WHERE age > 18;

七、約束與索引

1. 約束類型

1.非空約束(NOT NULL)
CREATE TABLE t_admin(id INT(5),adminname VARCHAR(10) NOT NULL,password VARCHAR(20)
);
2.唯一約束(UNIQUE)
CREATE TABLE t_person(id INT(5) UNIQUE,adminname VARCHAR(10) NOT NULL,password VARCHAR(20)
);
3.主鍵約束(PRIMARY KEY)
CREATE TABLE t_cat(id INT(5) PRIMARY KEY,name VARCHAR(10),password VARCHAR(20)
);
--或者指定
create table t_person(
id int(5) AUTO_INCREMENT,
name varchar(10),
password varchar(20),
constraint pk_id primary key(id)
);
注:
1.一般將id編號設置為主鍵  (聊到主鍵索引就想到性能)而且每張表建議至少有一個主鍵
2.當主鍵為int數字類型時,一般設置為自動遞增

自動遞增的兩種方式:

????????方式一:mysql數據庫中支持自動遞增,所以可以在創表中追加AUTO_INCREMENT(如果刪除了id為3的,再插入一個,那么他的id是4不是3)

????????方式二:通過python程做自動遞增 id+=1

當主鍵為varchar字符串類型時,無法再做自動遞增,此時還有兩種方式

????????方式一:通過python程序來生成固定格式,并且不會重復的主鍵 id+=1

????????方式二:通過雪花算法(下文會提到)來生成不會重復的主鍵

4.外鍵約束(FOREIGN KEY)

關系:一對多 多對多

CREATE TABLE t_user(id INT(5) AUTO_INCREMENT,name VARCHAR(10),gid INT(5),CONSTRAINT pk_id PRIMARY KEY(id),CONSTRAINT fk_gid FOREIGN KEY(gid) REFERENCES t_group(id)
);

5.檢查約束(CHECK)?(MySQL8.0.16+支持)

CREATE TABLE employees(id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,CONSTRAINT age_check CHECK(age>=18 AND age<=65)
);

2. 自動遞增

-- MySQL自動遞增
CREATE TABLE t_person(id INT(5) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10),password VARCHAR(20)
);

3. 雪花算法

概述

雪花算法(Snowflake Algorithm)是一種分布式唯一ID生成算法,最早由 Twitter 開發,用來解決在高并發環境下生成全局唯一ID的問題。它的特點是高性能、高可用、趨勢遞增、按時間排序,并且生成的ID不會重復,即使在分布式系統中。

雪花算法的ID結構

雪花算法(Snowflake)是Twitter開發的分布式ID生成算法,生成64位唯一ID,結構如下:

  • 1位符號位(始終為0)

  • 41位時間戳(毫秒級,69年)

  • 10位機器ID(5位數據中心+5位機器ID)

  • 12位序列號(每毫秒4096個ID)

優點
  • 高性能:本地生成,無需數據庫訪問,生成一個ID只需幾微秒。
  • 全局唯一:由時間戳 + 機器號 + 序列號共同決定,天然不會重復。
  • 趨勢遞增:基于時間戳生成,保證ID大致按生成時間遞增(方便排序)。
  • 適合分布式系統:支持多節點并行生成不沖突的ID。
存在的缺點
  • 依賴機器時鐘:如果系統時間回撥,可能會導致ID重復。
  • 位數固定:64位中各部分長度寫死,擴展性有限。
  • 不適合生成短ID或可讀性強的ID:生成的ID是類似?879278326123438080?的長整型數字。
Python實現簡化版
import time
import threadingclass Snowflake:def __init__(self, datacenter_id=1, worker_id=1):self.twepoch = 1288834974657self.datacenter_id = datacenter_idself.worker_id = worker_idself.sequence = 0self.last_timestamp = -1self.lock = threading.Lock()def _timestamp(self):return int(time.time() * 1000)def get_id(self):with self.lock:timestamp = self._timestamp()if timestamp == self.last_timestamp:self.sequence = (self.sequence + 1) & 0xfffif self.sequence == 0:while timestamp <= self.last_timestamp:timestamp = self._timestamp()else:self.sequence = 0self.last_timestamp = timestampid = ((timestamp - self.twepoch) << 22) | (self.datacenter_id << 17) | (self.worker_id << 12) | self.sequencereturn id
雪花算法適合哪些場景?
  • 訂單號、用戶ID、消息ID、日志ID等需要“唯一標識”的場景
  • 多服務、多節點部署的微服務架構
  • 替代數據庫自增ID(特別是 varchar 不支持自增的場景)

八、高級查詢

查詢引入:

有數據才能進行查詢操作,在正式學習查詢之前我們先完成建表以及添加數據的操作:

/********************************部門表dept********************************//*創建表*/DROP TABLE? IF EXISTS DEPT;?CREATE TABLE DEPT(DEPTNO INT PRIMARY KEY,?DNAME VARCHAR(14) ,?LOC VARCHAR(13));/********************************員工表emp********************************//*創建表*/DROP TABLE? IF EXISTS EMP;?CREATE TABLE EMP(EMPNO INT PRIMARY KEY,?ENAME VARCHAR(14) ,?JOB VARCHAR(9),?MGR INT,?HIREDATE DATE,?SAL DECIMAL(7,2),?COMM DECIMAL(7,2),?DEPTNO int REFERENCES DEPT);/***************工資等級表salgrade********************************//*創建表*/DROP TABLE? IF EXISTS SALGRADE;?CREATE TABLE SALGRADE(GRADE INT PRIMARY KEY,?LOSAL INT,?HISAL INT);?#工資級別表? 插入數據INSERT INTO salgrade VALUES (1,700,1200);INSERT INTO salgrade VALUES (2,1201,1400);INSERT INTO salgrade VALUES (3,1401,2000);INSERT INTO salgrade VALUES (4,2001,3000);INSERT INTO salgrade VALUES (5,3001,9999);#員工表? 插入數據insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);#部門表? 插入數據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');???

查詢語法:

語法: select 字段 from 表名 
字段: * 表示所有字段 
字段:字段1,字段2 
字段: 字段1 別名,字段2 別名 
字段:去重 distinct關鍵字

1. 條件查詢

-- 比較運算符
查詢薪資高于2000的員工
SELECT * FROM emp WHERE sal > 2000;-- BETWEEN AND
查詢薪資介于1500到5000的員工
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 5000;-- IS NULL
查詢沒有獎金的員工信息
SELECT * FROM emp WHERE comm IS NULL;-- LIKE模糊查詢
SELECT * FROM emp WHERE ename LIKE "%s%";  -- 包含s
SELECT * FROM emp WHERE ename LIKE "s%";   -- s開頭
SELECT * FROM emp WHERE ename LIKE "%s";   -- s結尾
SELECT * FROM emp WHERE ename LIKE "_m%";  -- 第二個字母是m查詢入職日期在1981年的員工信息
select * from emp where hiredate like '%1981%';
select * from emp where hiredate between '1981-01-01' and '1981-12-31';查詢員工編號在7499 7521 7900的員工
select * from emp where empno = 7499 or empno = 7521 or empno = 7900;
select * from emp where empno in(7499,7521,7900);

2. 排序查詢

語法: select 字段 from 表名 [限定語法][排序條件] 
排序關鍵字:order by 
升序 asc 
降序 desc 
如果需要根據多個字段進行排列,那么在排序后邊直接追加即可:
select * from 表名 [限定語法][order by 字段1 升序或降序,字段2 升序或降序]-- 單字段排序
按照入職日期做降序排列:
SELECT * FROM emp ORDER BY hiredate DESC;-- 多字段排序
按照入職日期做降序排列,如果入職日期相同,按照薪資做升序排列:
SELECT * FROM emp ORDER BY hiredate DESC, sal ASC;

3. 多表查詢

如果直接查詢所有的員工信息及部門信息select * from emp,dept;
結果:

這種查詢方式,簡單的將兩張表堆積在一塊,會帶來數據冗余問題,這種現象稱之為笛卡爾積效應
解決方法:
-- 等值連接(消除笛卡爾積)
SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;-- 自連接(同一表不同別名)
SELECT e1.empno, e1.ename, e2.ename AS manager 
FROM emp e1, emp e2 
WHERE e1.mgr = e2.empno;

4. 連接查詢(在JOIN操作中,將小表放在前面)

1. 內連接(INNER JOIN)

特點:只返回兩個表中匹配的行

-- 標準語法
SELECT 列名 FROM 表1 
INNER JOIN 表2 ON 表1.列 = 表2.列;-- 示例:查詢員工及其部門信息
SELECT e.empno, e.ename, d.dname 
FROM emp e
INNER JOIN dept d ON e.deptno = d.deptno;

等價寫法(使用WHERE子句):

SELECT e.empno, e.ename, d.dname 
FROM emp e, dept d
WHERE e.deptno = d.deptno;
2. 左外連接(LEFT JOIN / LEFT OUTER JOIN)

特點:返回左表所有記錄,即使右表沒有匹配

SELECT 列名 FROM 表1 
LEFT JOIN 表2 ON 表1.列 = 表2.列;-- 示例:查詢所有員工信息,包括沒有部門的員工
SELECT e.empno, e.ename, d.dname 
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno;
3. 右外連接(RIGHT JOIN / RIGHT OUTER JOIN)

特點:返回右表所有記錄,即使左表沒有匹配

SELECT 列名 FROM 表1 
RIGHT JOIN 表2 ON 表1.列 = 表2.列;-- 示例:查詢所有部門信息,包括沒有員工的部門
SELECT e.empno, e.ename, d.dname 
FROM emp e
RIGHT JOIN dept d ON e.deptno = d.deptno;
4. 全外連接(FULL JOIN / FULL OUTER JOIN)

特點:返回兩表所有記錄,沒有匹配的用NULL填充

-- MySQL不直接支持FULL JOIN,可用UNION實現
SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列
UNION
SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;-- 示例:查詢所有員工和部門信息
SELECT e.empno, e.ename, d.dname 
FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno
UNION
SELECT e.empno, e.ename, d.dname 
FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno;
5. 交叉連接(CROSS JOIN)

特點:返回兩表的笛卡爾積

SELECT 列名 FROM 表1 CROSS JOIN 表2;-- 等價寫法
SELECT 列名 FROM 表1, 表2;
6. 自連接(SELF JOIN)

特點:表與自身連接

-- 示例:查詢員工及其經理信息
SELECT e1.empno AS 員工ID, e1.ename AS 員工姓名, e2.empno AS 經理ID, e2.ename AS 經理姓名
FROM emp e1
LEFT JOIN emp e2 ON e1.mgr = e2.empno;

5. 分組查詢

語法:select字段 from 表名[連接條件][限定語法][排序條件]
group by
注意事項:
1.一旦出現分組,那么se1ect后邊只允許出現分組字段及統計函數
2.統計函數可以單獨使用
3.如果出現統計函數嵌套,那么在select后邊只允許出現統計函數
4.分組之后如果還要使用條件篩選,不允許使用where,改為having
查詢公司所有職位
select job,count(empno) from emp group by job;
查詢每個部門的平均工資
select job,count(empno),avg(sal) from emp group by job;
查詢每個部門的詳細信息,包含平均工資
select emp.job,count(empno),avg(sal),dept.dname from emp left join dept on emp.deptno = dept.deptno group by emp.job;
查詢平均薪資高于2000的部門信息
select emp.job,count(empno),avg(sal),dept.dname from emp left join dept on emp.deptno = dept.deptno group by emp.job having avg(emp.sal)>2000;

統計函數

統計數量 count

平均值 avg

最大值 max

最小值 min

求和 sum

6. 子查詢

--where子查詢:當查詢的結果為單行單列或多行單列時
SELECT * FROM emp 
查詢比Smith工資高的員工信息
WHERE sal > (SELECT sal FROM emp WHERE ename = "smith");-- from子查詢:當查詢的結果為多行多列時
查詢部門編號,部門名稱,部門位置,部門人數,平均薪資的信息
SELECT d.deptno, d.dname, temp.avg_sal
FROM dept d LEFT JOIN (SELECT deptno, AVG(sal) AS avg_sal FROM emp GROUP BY deptno
) temp ON d.deptno = temp.deptno;
=any in 
比最大值小的數據:<any 
比最小值大的數據: >any 
比最大值大的數據: >all 
比最小值小的數據: <all

7. 分頁查詢

語法:select字段 from 表名[連接條件][限定語法][分組查詢][排序條件][分頁查詢]
分頁關鍵字:limit n,m
n:數據下標索引
m:每頁顯示的條數
當n為0的時候,說明用戶要查詢首頁的數據,n可以省略不寫
-- 基本分頁
SELECT * FROM emp LIMIT 0, 10;  -- 第一頁
SELECT * FROM emp LIMIT 10, 10; -- 第二頁-- 簡化寫法(首頁)
SELECT * FROM emp LIMIT 10;

九、數據庫設計實踐

1. 一對多關系

-- 組表
CREATE TABLE t_group(id INT(5) AUTO_INCREMENT,gname VARCHAR(10),CONSTRAINT pk_id PRIMARY KEY(id)
);-- 用戶表(帶外鍵)
CREATE TABLE t_user(id INT(5) AUTO_INCREMENT,name VARCHAR(10),gid INT(5),CONSTRAINT pk_id PRIMARY KEY(id),CONSTRAINT fk_gid FOREIGN KEY(gid) REFERENCES t_group(id)
);

2. 多對多關系

-- 學生表
CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);-- 課程表
CREATE TABLE course(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);-- 學生課程關聯表
CREATE TABLE student_course(sid INT,cid INT,PRIMARY KEY(sid, cid),FOREIGN KEY(sid) REFERENCES student(id),FOREIGN KEY(cid) REFERENCES course(id)
);

3. 級聯操作

-- 級聯刪除
CREATE TABLE t_user(id INT(5) AUTO_INCREMENT,gid INT(5),CONSTRAINT fk_gid FOREIGN KEY(gid) REFERENCES t_group(id) ON DELETE CASCADE
);-- 級聯置空
CREATE TABLE t_user(id INT(5) AUTO_INCREMENT,gid INT(5),CONSTRAINT fk_gid FOREIGN KEY(gid) REFERENCES t_group(id) ON DELETE SET NULL
);

十、性能優化建議

  1. 合理使用索引:為常用查詢條件創建索引

  2. 避免SELECT *:只查詢需要的字段

  3. 優化JOIN操作:確保JOIN字段有索引

  4. 合理分頁:大數據量使用LIMIT分頁

  5. 避免全表掃描:使用EXPLAIN分析查詢

  6. 事務優化:短事務,及時提交

  7. 適當拆分表:大表垂直或水平拆分

十一、常見問題解決方案

  1. 連接問題

    • 檢查服務是否啟動

    • 檢查用戶名密碼

    • 檢查防火墻設置

  2. 中文亂碼

    • 確保數據庫、表、連接都使用UTF-8編碼

    • 設置連接參數:charset='utf8mb4'

  3. 性能問題

    • 使用EXPLAIN分析慢查詢

    • 優化SQL語句

    • 添加適當索引

  4. 事務問題

    • 檢查隔離級別設置

    • 確保事務及時提交或回滾

    • 避免長事務

十二、學習資源推薦

  1. 官方文檔:MySQL官方文檔是最權威的學習資料

  2. 在線教程:菜鳥教程、W3School等

  3. 書籍推薦

    • 《高性能MySQL》

    • 《MySQL必知必會》

    • 《SQL進階教程》

  4. 實踐平臺:LeetCode數據庫題目、牛客網SQL練習題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79017.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79017.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79017.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redux和MobX有什么區別

Redux 和 MobX 都是用于 React 應用的全局狀態管理庫&#xff0c;但它們在設計理念、使用方式和適用場景等方面存在明顯的區別&#xff0c;下面為你詳細分析&#xff1a; 1. 設計理念 Redux&#xff1a;基于 Flux 架構&#xff0c;遵循單向數據流和純函數式編程的理念。狀態是…

WPF實現類似Microsoft Visual Studio2022界面效果及動態生成界面技術

WPF實現類似VS2022界面效果及動態生成界面技術 一、實現類似VS2022界面效果 1. 主窗口布局與主題 <!-- MainWindow.xaml --> <Window x:Class"VsStyleApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x…

備份服務器,備份服務器數據有哪些方法可以實現?

服務器承載著企業核心業務數據與關鍵應用&#xff0c;數據丟失或業務中斷可能帶來災難性后果。因此&#xff0c;構建一套科學、可靠的服務器數據備份體系至關重要。當前&#xff0c;服務器數據備份方法可根據技術架構、存儲介質及恢復需求進行多維劃分。根據不同場景、預算和技…

前端基礎——5、CSS border屬性與漸變色(詳解與實戰)

前端基礎——5、CSS border屬性與漸變色詳解 CSS border屬性與漸變色&#xff08;詳解與實戰&#xff09;一、border屬性全面解析1. 基礎三屬性2. 復合寫法3. 高級特性附加.border-style詳解使用示例效果&#xff1a; CSS 漸變終極指南&#xff1a;線性漸變與徑向漸變的深度解析…

企業出海降本:如何將應用從 AWS EC2 快速無縫遷移至DigitalOcean Droplet

企業出海已經成為目前最熱門的趨勢。然而不論你是做跨境電商&#xff0c;還是短劇出海&#xff0c;或處于最熱門的AI 賽道&#xff0c;你都需要使用海外的云主機或GPU云服務。海外一線的云服務平臺盡管覆蓋區域廣泛&#xff0c;但是往往費用成本較高。所以降本始終是企業出海關…

解決Spring Boot多模塊自動配置失效問題

前言 在Spring Boot多模塊項目中&#xff0c;模塊間配置不生效是一個復雜但可解決的問題&#xff0c;尤其涉及自動配置類、依賴沖突、條件注解以及IDE配置。 一、問題背景與場景 1.1 場景描述 假設存在兩個模塊&#xff1a; 模塊A&#xff1a;提供通用配置&#xff08;如跨…

WEBSTORM前端 —— 第2章:CSS —— 第4節:盒子模型

目錄 1.畫盒子 2.Pxcook軟件 3.盒子模型——組成 4.盒子模型 ——邊框線 5.盒子模型——內外邊距 6.盒子模型——尺寸計算 7.清除默認樣式 8.盒子模型——元素溢出 9.外邊距問題 ①合并現象 ②塌陷問題 10.行內元素——內外邊距問題 11.盒子模型——圓角 12.盒子…

Kafka和flume整合

需求1&#xff1a;利用flume監控某目錄中新生成的文件&#xff0c;將監控到的變更數據發送給kafka&#xff0c;kafka將收到的數據打印到控制臺&#xff1a; 在flume/conf下添加.conf文件&#xff0c; vi flume-kafka.conf # 定義 Agent 組件 a1.sourcesr1 a1.sinksk1 a1.c…

Idea 如何配合 grep console過濾并分析文件

這里寫自定義目錄標題 [grep console插件]()右擊打開文件目錄&#xff0c;選擇 tail in console 同時可以添加自己的快捷鍵。 ![新的改變](https://i-blog.csdnimg.cn/direct/03423e27cf6c40c5abd2d53982547b61.png) 隨后會在idea的菜單欄中出現tail菜單。這里&#xff0c;接下…

怎樣學習Electron

學習 Electron 是一個很好的選擇&#xff0c;特別是如果你想構建跨平臺的桌面應用程序&#xff0c;并且已經有前端開發經驗。以下是一個循序漸進的學習指南&#xff0c;幫助你從零開始掌握 Electron。 1. 基礎知識 HTML/CSS/JavaScript 確保你對這些基礎技術有扎實的理解&am…

MySQL 大數據量分頁查詢優化指南

問題分析 當對包含50萬條記錄的edu_test表進行分頁查詢時&#xff0c;發現隨著分頁越深入&#xff0c;查詢時間越長&#xff1a; limit 0,10&#xff1a;0.05秒limit 200000,10&#xff1a;0.14秒limit 499000,10&#xff1a;0.21秒 通過EXPLAIN分析發現&#xff0c;limit o…

【仿真】Ubuntu 22.04 安裝MuJoCo 3.3.2

官方GIthub下載: https://github.com/google-deepmind/mujoco/releases 官網&#xff1a;MuJoCo — Advanced Physics Simulation 文檔&#xff1a;Overview - MuJoCo Documentation 主要參考&#xff1a;Ubuntu 22.04 安裝Mujoco 3.22 - RobotStudent的文章 - 知乎 簡…

最新字節跳動運維云原生面經分享

繼續分享最新的go面經。 今天分享的是組織內部的朋友在字節的go運維工程師崗位的云原生方向的面經&#xff0c;涉及Prometheus、Kubernetes、CI/CD、網絡代理、MySQL主從、Redis哨兵、系統調優及基礎命令行工具等知識點&#xff0c;問題我都整理在下面了 面經詳解 Prometheus …

PyQt6實例_pyqtgraph散點圖顯示工具_代碼分享

目錄 描述&#xff1a; 效果&#xff1a; 代碼&#xff1a; 返回結果對象 字符型橫坐標 通用散點圖工具 工具主界面 使用舉例 描述&#xff1a; 1 本例結合實際應用場景描述散點圖的使用。在財報分析中&#xff0c;需要將數值放在同行業中進行比較&#xff0c;從而判…

純C協程框架NtyCo

原文是由寫的&#xff0c;寫的真的很好&#xff0c;原文鏈接&#xff1a;純c協程框架NtyCo實現與原理-CSDN博客 1.為什么會有協程&#xff0c;協程解決了什么問題&#xff1f; 網絡IO優化 在CS&#xff0c;BS的開發模式下&#xff0c;服務器的吞吐量是一個受關注的參數&#x…

信息系統項目管理師——第10章 項目進度管理 筆記

10項目進度管理 1.規劃進度管理&#xff1a;項目章程、項目管理計劃&#xff08;開發方法、范圍管理計劃&#xff09;、事業環境因素、組織過程資產——專家判斷、數據分析&#xff08;備選方案分析&#xff09;、會議——進度管理計劃 2.定義活動&#xff1a;WBS進一步分解&am…

通過門店銷售明細表用SQL得到每月每個門店的銷冠和按月的同比環比數據

假設我在Snowflake里有銷售表&#xff0c;包含ID主鍵、門店ID、日期、銷售員姓名和銷售額&#xff0c;需要統計出每個月所有門店和各門店銷售額最高的人&#xff0c;不一定是一個人&#xff0c;以及他所在的門店ID和月總銷售額。 統計每個月份下&#xff0c;各門店內銷售額最高…

移遠通信LG69T賦能零跑B10:高精度定位護航,共赴汽車智聯未來

當前&#xff0c;汽車行業正以前所未有的速度邁向智能化時代&#xff0c;組合輔助駕駛技術已然成為車廠突出重圍的關鍵所在。高精度定位技術作為實現車輛精準感知與高效協同的基石&#xff0c;其重要性日益凸顯。 作為全球領先的物聯網及車聯網整體解決方案供應商&#xff0c;移…

jmeter-Beashell獲取http請求體json

在JMeter中&#xff0c;使用BeanShell處理器或BeanShell Sampler來獲取HTTP請求體中的JSON數據是很常見的需求。這通常用于在測試計劃中處理和修改請求體&#xff0c;或者在響應后進行驗證。以下是一些步驟和示例代碼&#xff0c;幫助你使用BeanShell來獲取HTTP請求體中的JSON數…

若干查找算法

一、順序查找 1.原理 2.代碼 #if 0 const int FindBySeq(const vector<int>& ListSeq, const int KeyData) {int retrIdx -1;int size ListSeq.size();for(int i 0; i < size; i) {if (ListSeq.at(i) KeyData){retrIdx i;break;}}return retrIdx; } #else c…