MySQL面試題及詳細答案 155道(001-020)

前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。

前后端面試題-專欄總目錄

在這里插入圖片描述

文章目錄

  • 一、本文面試題目錄
      • 1. MySQL中的事務是什么?如何使用?
      • 2. MySQL中如何設置和修改用戶密碼?
      • 3. 如何在MySQL中創建新用戶并授予權限?
      • 4. 什么是視圖(View)?如何在MySQL中創建和使用視圖?
      • 5. MySQL中的存儲過程是什么?如何創建?
      • 6. 如何在MySQL中調用存儲過程或函數?
      • 7. 觸發器(Trigger)的作用是什么?如何創建觸發器?
      • 8. MySQL中的事件調度器(Event Scheduler)是什么?
      • 9. 如何查看當前MySQL服務器的狀態信息?
      • 10. MySQL的復制(Replication)功能是如何工作的?
      • 11. 如何配置MySQL主從復制?
      • 12. MySQL中的讀寫分離是什么意思?如何實現?
      • 13. 如何對MySQL數據庫進行備份?
      • 14. MySQL中的日志文件有哪些類型?各自的作用是什么?
      • 15. 如何調整MySQL的配置以提高性能?
      • 16. MySQL中的查詢緩存(Query Cache)是什么?如何啟用?
      • 17. 在MySQL中如何使用全文索引(Full-Text Indexing)?
      • 18. MySQL支持哪些不同的字符集和排序規則?
      • 19. 如何在MySQL中執行批量插入?
      • 20. MySQL中的臨時表(Temporary Table)是什么?

一、本文面試題目錄

1. MySQL中的事務是什么?如何使用?

答案
事務是一組原子性的SQL操作,要么全部執行成功,要么全部失敗,用于保證數據一致性。MySQL中事務需滿足ACID特性(原子性、一致性、隔離性、持久性)。

使用方式
默認情況下,MySQL的InnoDB引擎支持事務,且自動提交(AUTOCOMMIT=1)。可通過以下語句手動控制事務:

-- 關閉自動提交
SET autocommit = 0;-- 開始事務(可選,關閉自動提交后默認開啟)
START TRANSACTION;-- 執行SQL操作
INSERT INTO users (name) VALUES ('Alice');
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;-- 提交事務(所有操作生效)
COMMIT;-- 若出錯,回滾事務(所有操作撤銷)
ROLLBACK;

原理:InnoDB通過 undo log(回滾日志)實現事務回滾,通過 redo log(重做日志)保證崩潰后的數據恢復,通過鎖機制和MVCC(多版本并發控制)實現隔離性。

2. MySQL中如何設置和修改用戶密碼?

答案
MySQL提供多種方式修改用戶密碼,需注意不同版本的語法差異(MySQL 5.7及以上推薦ALTER USER)。

示例代碼

-- MySQL 5.7及以上推薦方式
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';-- 舊版本兼容方式(需有UPDATE權限)
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') 
WHERE User = 'username' AND Host = 'host';
FLUSH PRIVILEGES; -- 刷新權限-- 登錄時修改當前用戶密碼
SET PASSWORD = 'new_password';

注意PASSWORD()函數在MySQL 8.0中已移除,需直接使用明文密碼(內部自動加密)。密碼應包含大小寫字母、數字和特殊字符,增強安全性。

3. 如何在MySQL中創建新用戶并授予權限?

答案
創建用戶需指定用戶名、允許訪問的主機(host),并通過GRANT語句分配權限,權限粒度可細化到庫、表甚至列。

示例代碼

-- 創建用戶(允許從本地訪問)
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'user_password';-- 創建允許遠程訪問的用戶(指定IP或%表示所有IP)
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'secure_pass';-- 授予權限:所有庫的所有表的全部權限(謹慎使用)
GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'localhost' WITH GRANT OPTION;-- 授予指定庫表的權限(SELECT、INSERT、UPDATE)
GRANT SELECT, INSERT, UPDATE ON mydb.orders TO 'remote_user'@'192.168.1.%';-- 刷新權限使配置生效
FLUSH PRIVILEGES;

原理:用戶信息存儲在mysql.user表,權限信息存儲在mysql.dbmysql.tables_priv等系統表中,FLUSH PRIVILEGES會重新加載這些表到內存。

4. 什么是視圖(View)?如何在MySQL中創建和使用視圖?

答案
視圖是虛擬表,基于SQL查詢結果創建,不存儲實際數據,僅保存查詢邏輯,用于簡化復雜查詢、限制數據訪問范圍。

示例代碼

-- 創建視圖(查詢用戶及其訂單數量)
CREATE VIEW user_order_stats AS
SELECT u.id, u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;-- 使用視圖(像表一樣查詢)
SELECT * FROM user_order_stats WHERE order_count > 5;-- 修改視圖
ALTER VIEW user_order_stats AS
SELECT u.id, u.name, COUNT(o.id) AS order_count, SUM(o.amount) AS total_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;-- 刪除視圖
DROP VIEW IF EXISTS user_order_stats;

注意:視圖可用于SELECT,但INSERT/UPDATE/DELETE受限于原表結構和視圖定義,復雜視圖可能不支持寫入操作。

5. MySQL中的存儲過程是什么?如何創建?

答案
存儲過程是預編譯的SQL語句集合,可封裝復雜邏輯,通過調用名稱執行,減少網絡傳輸并提高安全性。

示例代碼

-- 創建存儲過程(查詢指定用戶的訂單總數)
DELIMITER // -- 修改分隔符,避免與SQL語句中的分號沖突
CREATE PROCEDURE GetUserOrderCount(IN user_id INT, OUT order_count INT)
BEGINSELECT COUNT(*) INTO order_count FROM orders WHERE user_id = user_id;
END //
DELIMITER ; -- 恢復分隔符-- 調用存儲過程
CALL GetUserOrderCount(1, @count);
SELECT @count AS order_count;

優勢:代碼復用、減少網絡交互、權限控制(可授予調用權而不暴露表權限)。

6. 如何在MySQL中調用存儲過程或函數?

答案
存儲過程通過CALL調用,函數可直接在SQL語句中使用(需有返回值)。

示例代碼

-- 調用帶參數的存儲過程
CALL GetUserOrderCount(1, @count); -- 輸入參數1,輸出參數@count-- 創建函數(計算訂單總金額)
DELIMITER //
CREATE FUNCTION CalculateOrderTotal(order_id INT) 
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGINDECLARE total DECIMAL(10,2);SELECT SUM(price * quantity) INTO total FROM order_items WHERE order_id = order_id;RETURN total;
END //
DELIMITER ;-- 調用函數(直接用于SQL語句)
SELECT order_id, CalculateOrderTotal(order_id) AS total FROM orders;

區別:存儲過程可無返回值,支持輸出參數;函數必須有返回值,可嵌入SQL語句中。

7. 觸發器(Trigger)的作用是什么?如何創建觸發器?

答案
觸發器是與表關聯的自動執行的SQL語句,用于在INSERT/UPDATE/DELETE操作前后觸發邏輯(如數據校驗、日志記錄)。

示例代碼

-- 創建觸發器(訂單插入后更新用戶訂單數)
DELIMITER //
CREATE TRIGGER AfterOrderInsert
AFTER INSERT ON orders
FOR EACH ROW -- 行級觸發器,每插入一行執行一次
BEGINUPDATE users SET order_count = order_count + 1 WHERE id = NEW.user_id; -- NEW表示新插入的行
END //
DELIMITER ;-- 創建更新前的觸發器(校驗價格不能為負)
DELIMITER //
CREATE TRIGGER BeforeProductUpdate
BEFORE UPDATE ON products
FOR EACH ROW
BEGINIF NEW.price < 0 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '價格不能為負數';END IF;
END //
DELIMITER ;-- 刪除觸發器
DROP TRIGGER IF EXISTS AfterOrderInsert;

注意:觸發器中避免執行耗時操作,可能影響主操作性能;OLD關鍵字用于UPDATE/DELETE中表示原數據。

8. MySQL中的事件調度器(Event Scheduler)是什么?

答案
事件調度器用于按計劃自動執行SQL任務(類似定時任務),可替代外部 cron 作業,適合數據庫內部定期操作(如數據清理、統計生成)。

示例代碼

-- 開啟事件調度器(默認可能關閉)
SET GLOBAL event_scheduler = ON;-- 創建事件(每天凌晨3點刪除30天前的日志)
DELIMITER //
CREATE EVENT PurgeOldLogs
ON SCHEDULE EVERY 1 DAY
STARTS '2023-01-01 03:00:00'
DO
BEGINDELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
END //
DELIMITER ;-- 查看事件
SHOW EVENTS;-- 禁用/啟用事件
ALTER EVENT PurgeOldLogs DISABLE;
ALTER EVENT PurgeOldLogs ENABLE;

調度類型:支持AT(一次性)、EVERY(周期性),可指定開始和結束時間。

9. 如何查看當前MySQL服務器的狀態信息?

答案
通過SHOW命令或系統表查看服務器狀態,包括連接數、查詢量、緩存使用等關鍵指標。

示例代碼

-- 查看服務器狀態變量(如連接數、查詢數)
SHOW GLOBAL STATUS; -- 全局狀態
SHOW SESSION STATUS; -- 當前會話狀態-- 查看關鍵指標(如活躍連接數、慢查詢數)
SHOW GLOBAL STATUS LIKE 'Threads_connected'; -- 當前連接數
SHOW GLOBAL STATUS LIKE 'Queries'; -- 總查詢數
SHOW GLOBAL STATUS LIKE 'Slow_queries'; -- 慢查詢數-- 查看服務器變量配置
SHOW GLOBAL VARIABLES LIKE 'max_connections'; -- 最大連接數
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; -- InnoDB緩沖池大小-- 查看存儲引擎狀態
SHOW ENGINE INNODB STATUS; -- InnoDB詳細狀態(鎖、事務等)

應用:通過監控Threads_running(運行中線程數)判斷負載,Innodb_buffer_pool_reads(物理讀)評估緩存效率。

10. MySQL的復制(Replication)功能是如何工作的?

答案
MySQL復制通過將主庫(Master)的binlog(二進制日志)傳輸到從庫(Slave)并執行,實現數據同步,支持讀寫分離和容災。

工作流程

  1. 主庫:將所有數據修改操作記錄到binlog(通過log_bin啟用)。
  2. 從庫:啟動I/O線程連接主庫,獲取binlog并寫入本地relay log(中繼日志)。
  3. 從庫:SQL線程讀取relay log,重放操作以同步數據。

核心組件

  • binlog:主庫記錄變更的日志(格式可選STATEMENT/ROW/MIXED)。
  • relay log:從庫暫存binlog的日志。
  • 復制用戶:主庫上授權從庫連接的用戶(需REPLICATION SLAVE權限)。

示例配置(主庫)

# my.cnf
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydb # 僅記錄指定庫(可選)

11. 如何配置MySQL主從復制?

答案
配置步驟包括主庫準備、從庫連接主庫并同步初始數據。

示例步驟

  1. 主庫配置

    -- 創建復制用戶
    CREATE USER 'repl_user'@'slave_ip' IDENTIFIED BY 'repl_pass';
    GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'slave_ip';-- 鎖定主庫(避免備份時數據變更)
    FLUSH TABLES WITH READ LOCK;-- 記錄當前binlog位置(文件名和偏移量)
    SHOW MASTER STATUS;
    -- 輸出示例:File = mysql-bin.000001, Position = 154
    
  2. 從庫配置

    # my.cnf
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    
  3. 從庫連接主庫

    -- 配置主庫信息
    CHANGE MASTER TOMASTER_HOST = 'master_ip',MASTER_USER = 'repl_user',MASTER_PASSWORD = 'repl_pass',MASTER_LOG_FILE = 'mysql-bin.000001', -- 主庫SHOW MASTER STATUS的FileMASTER_LOG_POS = 154; -- 主庫SHOW MASTER STATUS的Position-- 啟動復制
    START SLAVE;-- 檢查狀態(確保Slave_IO_Running和Slave_SQL_Running均為Yes)
    SHOW SLAVE STATUS\G
    
  4. 解鎖主庫

    UNLOCK TABLES;
    

12. MySQL中的讀寫分離是什么意思?如何實現?

答案
讀寫分離指將讀操作分配到從庫,寫操作保留在主庫,以減輕主庫壓力并提高查詢性能(基于主從復制)。

實現方式

  1. 應用層分離:在代碼中判斷SQL類型,讀操作連接從庫,寫操作連接主庫。

    # 偽代碼示例
    def execute_sql(sql):if sql.strip().upper().startswith(('SELECT', 'SHOW')):conn = get_slave_connection()  # 讀從庫else:conn = get_master_connection()  # 寫主庫return conn.execute(sql)
    
  2. 中間件分離:使用Proxy(如MySQL Proxy、MyCat、ProxySQL)自動路由,應用無需修改代碼。

    • 配置示例(MyCat):通過schema.xml定義主從關系,rule.xml設置路由規則。
  3. 數據庫層分離:MySQL 8.0引入的read_only參數,從庫設置read_only=1禁止寫入(超級用戶除外)。

注意:需處理主從延遲問題(如關鍵讀走主庫),可通過Seconds_Behind_Master監控延遲。

13. 如何對MySQL數據庫進行備份?

答案
MySQL備份分為物理備份(文件級)和邏輯備份(SQL級),各有適用場景。

1. 邏輯備份(mysqldump)

# 備份單個庫
mysqldump -u root -p mydb > mydb_backup.sql# 備份所有庫(含系統庫)
mysqldump -u root -p --all-databases > all_backup.sql# 備份表結構(不包含數據)
mysqldump -u root -p --no-data mydb > mydb_schema.sql# 壓縮備份
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz

恢復

mysql -u root -p mydb < mydb_backup.sql

2. 物理備份(適用于大庫)

  • 冷備份:關閉MySQL,復制數據目錄(datadir)。
  • 熱備份:使用xtrabackup(Percona工具)在不停止服務的情況下備份InnoDB數據。
    xtrabackup --user=root --password=pass --backup --target-dir=/backup/
    

3. 增量備份:基于binlog備份,僅記錄上次全量備份后的變更。

# 備份指定時間段的binlog
mysqlbinlog --start-datetime="2023-01-01 00:00:00" --stop-datetime="2023-01-02 00:00:00" /var/log/mysql/mysql-bin.000001 > incremental_backup.sql

14. MySQL中的日志文件有哪些類型?各自的作用是什么?

答案
MySQL日志用于記錄運行狀態、錯誤和數據變更,關鍵日志類型如下:

日志類型作用啟用方式(my.cnf)
錯誤日志記錄啟動、運行、關閉過程中的錯誤信息(如崩潰、權限問題)log_error = /var/log/mysql/error.log
binlog(二進制日志)記錄所有數據修改操作(用于復制和時間點恢復)log_bin = /var/log/mysql/binlog
慢查詢日志記錄執行時間超過long_query_time的SQL(默認10秒)slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
查詢日志記錄所有SQL請求(含讀寫,性能影響大,一般禁用)general_log = 1
general_log_file = /var/log/mysql/general.log
中繼日志從庫復制時暫存主庫binlog的日志(僅從庫有)relay_log = /var/log/mysql/relay.log
redo logInnoDB用于崩潰恢復的重做日志(確保已提交事務不丟失)自動啟用,innodb_log_file_size配置大小
undo logInnoDB用于事務回滾和MVCC的回滾日志(記錄數據修改前的狀態)自動管理,存儲在表空間中

15. 如何調整MySQL的配置以提高性能?

答案
性能優化需結合硬件、業務場景調整my.cnf(或my.ini)配置,核心參數如下:

  1. 內存配置

    • innodb_buffer_pool_size:InnoDB緩存表和索引的內存池,建議設為物理內存的50%-70%(專用數據庫服務器)。
      innodb_buffer_pool_size = 8G
      
    • key_buffer_size:MyISAM索引緩存,若使用MyISAM表建議設為內存的10%-20%。
  2. 連接配置

    • max_connections:最大并發連接數,需大于業務峰值(默認151)。
      max_connections = 500
      
    • wait_timeout:空閑連接超時時間,避免連接數耗盡(默認8小時)。
      wait_timeout = 300  # 5分鐘
      
  3. InnoDB優化

    • innodb_flush_log_at_trx_commit:控制redo log刷新策略,1(默認,最安全,每次提交刷盤)、0(每秒刷盤,性能好但可能丟失1秒數據)。
    • innodb_log_buffer_size:redo log緩沖區,大事務場景調大(默認16M)。
    • innodb_read_io_threads/innodb_write_io_threads:IO線程數,多磁盤可設為8。
  4. 查詢優化

    • query_cache_size:查詢緩存(MySQL 8.0已移除,低版本慎用,高并發寫場景無效)。
    • sort_buffer_size:排序緩沖區,每個連接獨占,避免過大導致內存耗盡。
  5. 日志優化

    • 關閉不必要的日志(如general_log),慢查詢日志按需開啟。

16. MySQL中的查詢緩存(Query Cache)是什么?如何啟用?

答案
查詢緩存是MySQL(5.7及之前版本)用于緩存SELECT語句結果的機制,若相同查詢再次執行且數據未變更,直接返回緩存結果,減少CPU和IO消耗。

特點

  • 緩存以SQL語句為鍵,大小寫、空格差異視為不同查詢。
  • 表數據發生任何修改(INSERT/UPDATE/DELETE),相關緩存會被清空,因此寫密集型場景效率低。

啟用與配置(MySQL 5.7):

# my.cnf
query_cache_type = ON  # 啟用查詢緩存(0=禁用,1=啟用,2=僅顯式指定SQL_CACHE的查詢)
query_cache_size = 64M  # 緩存總大小
query_cache_limit = 2M  # 單個查詢結果的最大緩存大小(超過不緩存)

使用示例

-- 顯式指定緩存(當query_cache_type=2時生效)
SELECT SQL_CACHE * FROM users WHERE id = 1;-- 顯式禁止緩存
SELECT SQL_NO_CACHE * FROM users WHERE id = 1;

注意:MySQL 8.0已移除查詢緩存(因維護成本高且不適用于高并發場景),替代方案是應用層緩存(如Redis)或優化查詢本身。

17. 在MySQL中如何使用全文索引(Full-Text Indexing)?

答案
全文索引用于高效搜索文本字段中的關鍵詞(支持自然語言搜索),適用于CHARVARCHARTEXT類型,優于LIKE '%關鍵詞%'(無法使用普通索引)。

使用步驟

  1. 創建全文索引

    -- 新建表時創建
    CREATE TABLE articles (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255),content TEXT,FULLTEXT INDEX ft_idx (title, content)  -- 多列聯合全文索引
    );-- 已有表添加
    ALTER TABLE articles ADD FULLTEXT INDEX ft_idx (title, content);
    
  2. 使用全文搜索

    -- 搜索包含"database"或"mysql"的記錄
    SELECT * FROM articles 
    WHERE MATCH(title, content) AGAINST('database mysql' IN BOOLEAN MODE);-- 搜索必須包含"database"且不包含"oracle"的記錄
    SELECT * FROM articles 
    WHERE MATCH(title, content) AGAINST('+database -oracle' IN BOOLEAN MODE);-- 自然語言搜索(默認,返回相關性排序)
    SELECT *, MATCH(title, content) AGAINST('mysql tutorial') AS relevance 
    FROM articles 
    WHERE MATCH(title, content) AGAINST('mysql tutorial' IN NATURAL LANGUAGE MODE);
    

限制

  • 忽略太短的詞(默認4個字符以下,可通過ft_min_word_len調整)。
  • 有_stopword_(停用詞,如"the"、“a”)不參與索引。
  • InnoDB和MyISAM均支持,但MyISAM不支持中文分詞(需第三方插件如ngram)。

18. MySQL支持哪些不同的字符集和排序規則?

答案
字符集決定存儲的字符范圍,排序規則決定字符比較方式(如大小寫敏感)。

常用字符集

  • utf8:支持基本Unicode字符(3字節,不支持emoji)。
  • utf8mb4:utf8的超集(4字節,支持emoji和所有Unicode字符,推薦)。
  • latin1:單字節字符集,支持西歐語言。
  • gbk:雙字節,支持中文字符。

排序規則命名規則

  • 以字符集名開頭(如utf8mb4_)。
  • ci:不區分大小寫(case insensitive),cs:區分大小寫。
  • ai:不區分重音(accent insensitive),as:區分重音。

示例配置

-- 創建庫時指定字符集和排序規則
CREATE DATABASE mydb 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_general_ci; -- 不區分大小寫-- 創建表時指定
CREATE TABLE users (name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin -- 二進制比較(區分大小寫)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- 查看支持的字符集和排序規則
SHOW CHARACTER SET;
SHOW COLLATION LIKE 'utf8mb4%';

最佳實踐:新系統統一使用utf8mb4utf8mb4_unicode_ci(支持更準確的Unicode排序)。

19. 如何在MySQL中執行批量插入?

答案
批量插入通過單條SQL插入多條記錄,減少網絡交互和事務開銷,提高效率。

示例代碼

-- 基本批量插入(多條值用逗號分隔)
INSERT INTO users (name, email)
VALUES 
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');-- 從查詢結果批量插入
INSERT INTO user_archives (id, name, archive_time)
SELECT id, name, NOW() FROM users WHERE last_login < '2023-01-01';-- 批量插入優化(調整參數)
-- 1. 關閉自動提交
SET autocommit = 0;
-- 2. 執行批量插入
INSERT INTO large_table (col1, col2) VALUES (...), (...), ...;
-- 3. 手動提交
COMMIT;

優化建議

  • 單次插入行數控制在1000-5000行(避免SQL過長導致內存問題)。
  • 禁用索引(臨時):ALTER TABLE table DISABLE KEYS;,插入后啟用:ENABLE KEYS;(僅MyISAM有效,InnoDB可忽略)。
  • 使用LOAD DATA INFILE(比INSERT更快,適合大批量數據):
    LOAD DATA INFILE '/tmp/users.csv'
    INTO TABLE users
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
    (name, email);
    

20. MySQL中的臨時表(Temporary Table)是什么?

答案
臨時表是會話級別的表,僅在當前連接可見,連接關閉后自動刪除,用于存儲中間結果(如復雜查詢的臨時數據)。

特點

  • 與普通表同名時,臨時表優先被訪問。
  • 支持索引、觸發器,但不支持外鍵。
  • InnoDB臨時表存儲在內存或磁盤(超過內存閾值時),MyISAM臨時表始終在磁盤。

示例代碼

-- 創建臨時表
CREATE TEMPORARY TABLE temp_orders (order_id INT,total_amount DECIMAL(10,2)
);-- 插入數據
INSERT INTO temp_orders 
SELECT id, SUM(price * quantity) FROM order_items GROUP BY id;-- 使用臨時表
SELECT o.user_id, t.total_amount 
FROM orders o
JOIN temp_orders t ON o.id = t.order_id;-- 手動刪除(可選,連接關閉自動刪除)
DROP TEMPORARY TABLE IF EXISTS temp_orders;

適用場景

  • 復雜查詢中分步處理數據(如多階段統計)。
  • 存儲會話私有數據(避免多用戶沖突)。
  • 替代子查詢(提高可讀性和性能)。

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

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

相關文章

Ansible安裝與入門

目錄 Ansible ansible任務執行模式 ansible執行流程 ansible命令執行過程&#xff08;背會&#xff09; ansible的安裝方式 ansible的程序結構&#xff08;yum安裝為例&#xff09; ansible的配置文件查找順序&#xff08;背會&#xff09; 核心配置文件 ansible的配置…

【Spring】Spring Boot啟動過程源碼解析

目錄 一、啟動入口 二、SpringApplication的構造過程 2.1 設置應用類型 2.2 設置初始化器&#xff08;Initializer&#xff09; 2.2.1 獲取BootstrapRegistryInitializer對象 2.2.2 獲取ApplicationContextInitializer對象 2.3 設置監聽器&#xff08;Listener&#xff…

CDN架構全景圖

CDN架構全景圖 CDN&#xff08;內容分發網絡&#xff09;是一種通過在全球范圍內部署邊緣節點服務器&#xff0c;將內容緩存至離用戶最近的位置&#xff0c;從而加速內容分發、降低延遲并減輕源站壓力的分布式網絡架構。其核心設計目標是優化互聯網內容傳輸效率&#xff0c;提升…

【pytest高階】源碼的走讀方法及插件hook

一、pytest源碼走讀方法 依賴庫認知篇 &#x1f4e6;這是理解 pytest 源碼的 “前菜”&#xff0c;先認識 3 個超重要的小伙伴&#xff1a;iniconfig &#x1f4c4;&#xff1a;像個 “文件小管家”&#xff0c;專門負責讀取 ini 配置文件&#xff08;比如 pytest 的配置&#…

算法訓練營day32 動態規劃理論基礎、509. 斐波那契數、70. 爬樓梯、746. 使用最小花費爬樓梯

今天開始動態規劃的部分&#xff01; 其實說白了&#xff0c;動態規劃我感覺就是找類似遞歸的規律&#xff0c; 動態規劃理論基礎 動態規劃&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;簡稱DP&#xff0c;如果某一問題有很多重疊子問題&#xff0c;使用動態規…

基于神經網絡的手寫數字識別系統

基于神經網絡的手寫數字識別系統 結合模板匹配和神經網絡兩種方法進行手寫數字識別。這個系統包括圖像預處理、特征提取、神經網絡訓練和可視化分析。 %% 基于神經網絡的手寫數字識別系統%% 清理工作區 clear; clc; close all;%% 加載手寫數字數據集 % 使用MATLAB自帶的手寫數字…

機器學習?一文看懂這門熱門技術

&#x1f31f; 什么是機器學習&#xff1f;一文看懂這門熱門技術在人工智能&#xff08;AI&#xff09;的大潮中&#xff0c;機器學習&#xff08;Machine Learning, ML&#xff09; 無疑是最耀眼的明星之一。它讓計算機具備了 “自我學習” 的能力&#xff0c;讓自動駕駛、智能…

Spring的初始化鉤子

1. PostConstruct JSR-250 標準注解&#xff08;不是 Spring 獨有&#xff09;&#xff0c;用來標記 Bean 初始化完成后要執行的方法。會在 Bean 的構造方法執行完、依賴注入完成后執行。 使用實例&#xff1a; Component public class Demo {PostConstructpublic void init() …

【AI】Java生態對接大語言模型:主流框架深度解析

文章目錄1. Deep Java Library (DJL)2. LangChain4j&#xff08;LLM&#xff09;3. HuggingFace Inference API4. OpenAI Java Client技術對比矩陣架構設計建議在人工智能浪潮下&#xff0c;大語言模型&#xff08;LLM&#xff09;已成為技術核心。Java生態通過以下框架實現高效…

【06】C#入門到精通——C# 多個 .cs文件項目 同一項目下添加多個 .cs文件

文章目錄1 單個 .cs文件2 創建 多個 .cs文件2.1 添加Hero類2.1 添加ShowInfo類2.3 關于命名空間的引用2.4 所有.cs文件代碼3 test3項目文件下載1 單個 .cs文件 上一講中 描述游戲中英雄的角色 所有代碼在一個.cs文件中&#xff0c; 如果代碼很多&#xff0c;類很多&#xff0…

【MySQL基礎篇】:MySQL常用數據類型的選擇邏輯與正確使用

?感謝您閱讀本篇文章&#xff0c;文章內容是個人學習筆記的整理&#xff0c;如果哪里有誤的話還請您指正噢? ? 個人主頁&#xff1a;余輝zmh–CSDN博客 ? 文章所屬專欄&#xff1a;MySQL篇–CSDN博客 文章目錄數據類型1.數據類型分類2.數值類型int整形類型bit位類型float小…

三、搭建springCloudAlibaba2021.1版本分布式微服務-springcloud loadbalancer負載均衡

什么是負責均衡 Spring Cloud LoadBalancer是一個客戶端負載均衡器&#xff0c;類似于Ribbon&#xff0c;但是由于Ribbon已經進入維護模式&#xff0c;并且Ribbon 2并不與Ribbon 1相互兼容&#xff0c;所以Spring Cloud全家桶在Spring Cloud Commons項目中&#xff0c;添加了Sp…

Oracle不完全恢復實戰指南:從原理到操作詳解

核心提示&#xff1a;當誤刪表、日志損壞或控制文件丟失時&#xff0c;Oracle的不完全恢復是DBA最后的救命稻草。掌握關鍵恢復技術&#xff0c;可在數據災難中力挽狂瀾。一、不完全恢復核心概念 1. 核心特點 必須關閉數據庫&#xff1a;在MOUNT狀態下執行重做日志恢復權限要求&…

Linux之shell腳本篇(二)

一、shell編程之if語句引言Linux在shell編程中&#xff0c;通常都是以自上而下運行&#xff0c;但是為了提高其代碼嚴謹性&#xff0c;我們即引入了多條件 控制語句例如&#xff1a;if、for、while、case等語句&#xff0c;有時候針對條件我們還會結合正則表達式去運用。將這些…

如何在android framewrok dump camera data

實現dump 函數 實現1 void dumpBufferToFile(buffer_handle_t* buffer, int width, int height, int frameNum) {void* data NULL;GraphicBufferMapper::getInstance().lock(*buffer, GRALLOC_USAGE_SW_READ_OFTEN, Rect(width, height), &data);char filename[128];sprin…

機器學習中的可解釋性:深入理解SHAP值及其應用

機器學習可解釋性的重要性在人工智能技術快速發展的2025年&#xff0c;機器學習模型已經深度滲透到醫療診斷、金融風控、司法量刑等關鍵領域。然而&#xff0c;隨著模型復雜度的不斷提升&#xff0c;一個根本性矛盾日益凸顯&#xff1a;模型預測性能的提升往往以犧牲可解釋性為…

.NET9 使用 OData 協議項目實戰

.NET 中 ODate 協議介紹 OData(Open Data Protocol) 是一個開放的 Web 協議&#xff0c;用于查詢和更新數據。在 .NET 生態系統中&#xff0c;OData 被廣泛支持和使用。 主要特性 1. 統一的數據訪問方式 提供標準化的查詢語法支持 CRUD 操作支持元數據描述 2. 查詢能力 標…

Android 性能優化:提升應用啟動速度(GC抑制)

前言 在移動應用開發領域&#xff0c;啟動速度是用戶體驗的重要指標。對于Android應用而言&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;機制雖然是內存管理的核心&#xff0c;但在應用啟動期間頻繁觸發GC會顯著拖慢啟動速度。本文將深入探討如何通過GC…

做了一款小而美的本地校驗器

需求說明 前陣子收到一則讀者留言&#xff0c;指出&#xff1a;市面上AI核稿工具&#xff08;ProWritingAid&#xff0c;WPS AI Spell Check&#xff0c;Writer&#xff0c;QuillBot&#xff0c;Grammarly&#xff09;要么收費太高&#xff0c;要么讓人擔心文章泄露。 如下圖所…

uniapp + uview-plus 微信小程序二維碼生成和保存完整解決方案

uniapp + uview-plus 微信小程序二維碼生成和保存完整解決方案 ?? 項目背景 在開發微信小程序時,經常需要實現二維碼的生成和保存功能。本文檔提供了一個基于 uniapp + uview-plus 框架的完整解決方案,徹底解決了以下常見問題: ? Canvas API 兼容性問題 ? 微信小程序權…