從零開始的云計算生活——第二十四天,重起航帆,初見MySQL數據庫

一.故事劇情

接下來要進入到一條比較長的路——mysql數據庫,之后會用一段時間來學習mySQL數據庫的內容,今天先從基礎開始介紹mysql數據庫。

二.MySQL數據庫概述

1.數據庫概念

數據庫(Database)

簡稱DB,按照一定格式存儲數據的一些文件的組合,顧名思義就是存儲數據的倉庫,實際上就是一堆文件。這些文件中存儲了具有特定格式的數據 。數據庫管理數據有諸多優點,如降低存儲數據的冗余度,存儲的數據可以共享,便于維護數據完整性,能夠實現數據的安全性等。數據庫的發展經歷了萌芽、初級、中級、和高級階段。

數據庫管理系統(DateBase Management System)

簡稱DBMS,數據庫管理系統是專門用來管理數據庫中的數據的,可以對數據庫當中的數據進行增、刪、改、查 等操作,常見的數據庫管理系統:MySql、Oracle、MS SQLServer(淘汰)、DB2、sysbase等…postgreSQL

SQL(Structured Query Language)

結構化查詢語言,針對關系型數據庫的一種語言;SQL 是一種操作數據庫的語言,包括創建數據庫、刪除數據庫、查詢記錄、修改記錄、添加字段等。SQL在MySql中可以使用,同時在Oracle中也可以使用,在DB2中也可以使用 。

2.數據庫的類型

關系型數據庫(存儲位置在磁盤)

  • MariaDB/MySQL

  • Oracle

  • DB2

  • MS SQLServer,只能用于windows系統

    國產數據庫

  • 達夢

  • 人大金倉

  • TiDB,分布式關系型數據庫

NOSQL數據庫

  • Redis,緩存數據庫

  • MongoDB,文檔型數據庫

3.關系型數據庫模型

  • 層次模型

  • 網狀模型

  • 關系模型

關系模型的相關概念

  1. 實體(Entity) :實體是指現實世界中可以區分的對象,它可以是具體的人、事物或概念,也可以是抽象的物體。在數據庫中,實體通常對應于表中的行,而表則實體的一種集合。例如,在一個學生信息管理系統中,學生、課程和教師都可以被視為實體。

  2. 屬性(Attribute): 屬性是實體的特征或性質,它提供了關于實體的具體信息。屬性可以是簡單的數據類型,如姓名、年齡或地址,也可以是更復雜的結構,如電話號碼或電子郵件地址。在數據庫中,屬性通常對應于表中的列,每列代表實體的一種屬性。例如,學生的姓名、學號和年齡都是學生的屬性。

  3. 聯系(Relationship): 聯系描述了不同實體之間的關系。在現實世界中,實體之間往往存在各種形式的關聯。在數據庫中,聯系通過關系表來實現,這個表通常包含兩個或更多的實體作為表的列。例如,學生選修課程的關系表就包含了學生實體和課程實體的相關信息,描述了哪位學生選修了哪門課程。

在關系模型中,實體和聯系通常通過以下三種類型來進一步分類:

  • 一對一(1:1):這種聯系表示兩個實體之間存在一對一的關系,即每個實體只有一個相關的實體,反之亦然。例如,一個部門與一個負責人之間可能存在一對一的聯系。

  • 一對多(1:N):這種聯系表示一個實體與多個實體相關,但每個相關實體只與一個實體相關。例如,一個教師可以教授多門課程,但每門課程只能由一個教師教授。

  • 多對多(M:N):這種聯系表示兩個實體之間存在多對多的關系,即每個實體可以與多個實體相關,同時每個相關實體也可以與多個實體相關。例如,學生可以選修多門課程,同時每門課程也可以被多個選修。

在設計數據庫時,正確地識別實體、屬性和聯系,以及它們之間的類型,對于創建一個結構良好、能夠有效存儲和檢索數據的數據庫至關重要。

4.關系數據庫相關概念

  1. 庫(Database): 庫是一個存儲數據的容器,它可以包含多個數據庫。在某些管理系統中,庫等同于數據庫。

  2. 表(Table): 表是數據庫中的一個表格,由行和列組成。表是存儲數據的主要結構,每個表通常對應一個實體類型。表的列名稱為屬性,而表的行名稱為記錄。

  3. 行(Record): 行也稱為記錄,它是表中的一個單元,代表表中的一個具體實例。每一行包含了一組屬性值,這些值共同描述了一個實體的狀態。

  4. 列(Column): 列是表中的一列,它代表了表的一個屬性。每列都有一個數據類型,用于定義存儲在其中的數據的種類和格式。

  5. 字段(Field): 字段通常指的是表中的行與列的交叉點,它存儲了單個數據項。在數據庫中,每個字段都有其特定的數據類型和用途。

  6. 數據(Data): 數據是存儲在數據庫中的信息。它可以是文本、數字、日期、圖像、聲音等各種形式。數據是數據庫管理和操作的核心。

二、MySQL數據庫安裝(CentOS7)

1.先下載安裝源

https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

2.解壓安裝

然后解壓到/usr/local下,并重命名

然后新建用戶和組(將數據庫開在新建用戶上可以保證對系統絕大部分位置是不可寫的,這樣當數據庫被攻擊時可以限制受到的影響)

3.文件授權

然后將mysql目錄授權給用戶mysql

?然后去根下創建一個用來存放數據庫數據的文件,并且授權

4.修改配置文件

然后去/etc/my.cnf修改配置文件(將原有的注釋掉)

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql8
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
lower_case_table_names=1[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql.sock

5.初始化信息

回到/usr/local/mysql8/bin/下,初始化基礎信息,得到數據庫的初始密碼

參數: --basedir 為mysql解壓目錄,–datadir 為mysql數據存放目錄。(注意安裝路徑是否一致)

?

?6.創建MySQL服務

復制 mysql.server文件到/etc/init.d/并重命名為mysqld

    此時啟動mysqld服務,并檢查狀態

    7.更改環境變量

    然后再去/etc/profile,去編輯一下環境變量,再最下邊加上

    然后立即生效環境變量?

    ?

    8.登錄數據庫并改寫密碼

    此時使用命令 mysql -uroot -p ,并且輸入默認生成的密碼即可進入數據庫

    第一次登錄需要更改密碼,需要滿足復雜度要求

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';

    此時使用命令,會提醒你更改密碼,使用命令更改結束后即可使用命令。?

    三.mysqld數據庫配置與命令

    服務啟動時讀取的默認配置文件

    mysqld操作命令

    mysql命令

    mysql數據庫登錄的命令行工具,本地登錄時且root用戶沒有密碼,輸入mysql,等效于”mysql -uroot -hlocalhost -P3306“

    mysql [options] db_name

    常用選項

    選項含義
    -u指定登錄用戶
    -p指定用戶密碼
    -h指定登錄數據庫的IP或者域名
    -P指定登錄數據庫的端口號
    -e能夠在終端執行數據庫指令

    使用案例

    #直接在外部執行查看數據庫的命令

    mysqladmin命令

    語法

    ?mysqladmin [options] command [command-arg] [command [command-arg]] ...

    設置root用戶密碼

    mysqladmin -uroot password '123.com'

    使用密碼登錄

    mysql -uroot -p123.com -h127.0.0.1 -P3306

    四、默認數據庫

    information_schema?

    信息數據庫,存儲所有的庫、表、列的名稱,任意可登錄數據庫的用戶都可讀;sql注入

    表名作用
    CHARACTER_SETS字符集信息表。用于查看和管理MySQL數據庫中的字符集信息。
    CLIENT_STATISTICS客戶端統計信息表。用于查看和管理客戶端的統計信息,例如連接數、請求次數等。
    COLLATIONS排序規則信息表。用于查看和管理MySQL數據庫中的排序規則信息。
    COLLATION_CHARACTER_SET_APPLICABILITY字符集和排序規則的適用性表。用于查看和管理字符集和排序規則之間的適用關系。
    COLUMNS數據表的列信息表。用于查看和管理MySQL數據庫中數據表的列信息。
    COLUMN_PRIVILEGES列級別的權限信息表。用于查看和管理列級別的權限信息,例如用戶對各個列的SELECT、INSERT、UPDATE等權限。
    ENGINES存儲引擎信息表。用于查看和管理MySQL數據庫中支持的存儲引擎信息。
    EVENTS定時事件信息表。用于查看和管理MySQL數據庫中的定時事件信息。
    FILES文件信息表。用于查看和管理MySQL數據庫服務器上文件的信息。
    GLOBAL_STATUS全局狀態信息表。用于查看和管理MySQL數據庫服務器的全局狀態信息。
    GLOBAL_VARIABLES全局變量信息表。用于查看和管理MySQL數據庫服務器的全局變量信息。
    INDEX_STATISTICS索引統計信息表。用于查看和管理MySQL數據庫中索引的統計信息。
    KEY_CACHES鍵緩存表。用于查看和管理MySQL數據庫中的鍵緩存信息。
    KEY_COLUMN_USAGE鍵列使用表。用于查看和管理鍵列的使用情況。
    PARAMETERS參數表。用于查看和管理MySQL數據庫的參數信息,例如連接超時時間、最大連接數等。
    PARTITIONS分區表。用于查看和管理MySQL數據庫中的分區信息。
    PLUGINS插件表。用于查看和管理MySQL數據庫中的插件信息。
    PROCESSLIST進程列表表。用于查看當前正在運行的MySQL進程,包括連接的客戶端和正在執行的查詢等。
    PROFILING性能分析表。用于啟用性能分析,記錄和分析SQL查詢的性能數據。
    REFERENTIAL_CONSTRAINTS外鍵約束表。用于查看和管理外鍵約束的信息,包括外鍵列和參考列等。
    ROUTINES存儲過程和函數表。用于查看和管理MySQL數據庫中的存儲過程和函數的信息,包括創建時間、修改時間、函數名等。
    SCHEMATA架構表。用于查看和管理MySQL數據庫中的架構信息,包括架構名、架構下的表名等。
    SCHEMA_PRIVILEGES架構權限表。用于查看和管理架構下的權限信息,包括用戶對架構下表的SELECT、INSERT、UPDATE等權限。
    SESSION_STATUS會話狀態信息表。用于查看和管理當前會話的狀態信息,例如會話的連接時間、查詢時間等。
    SESSION_VARIABLES會話變量表。用于查看和管理當前會話的變量信息,例如會話的最大連接數、最大內存使用量等。
    STATISTICS統計信息表。用于查看和管理MySQL數據庫中表的統計信息,包括表的行數、平均行大小等。
    TABLES數據表信息表。用于查看和管理MySQL數據庫中的數據表信息,包括表名、引擎類型等。
    TABLESPACES存儲空間表。用于查看和管理MySQL數據庫中的存儲空間信息,包括存儲空間名、大小等。
    TABLE_CONSTRAINTS表約束信息表。用于查看和管理表的約束信息,包括主鍵約束、外鍵約束等。
    TABLE_PRIVILEGES表級別的權限信息表。用于查看和管理表級別的權限信息,例如用戶對各個表的SELECT、INSERT、UPDATE等權限。
    INNODB_CMPMEM_RESETInnoDB 內存比較器重置表。此表用于記錄 InnoDB 內存比較器(comparison memory)的清除操作。
    INNODB_RSEGInnoDB 重做段表此表用于記錄 InnoDB 數據文件的重做段信息。
    INNODB_UNDO_LOGSInnoDB 撤銷日志表。此表用于記錄 InnoDB 撤銷操作的日志信息。
    INNODB_CMPMEMInnoDB 內存比較器表。此表用于記錄 InnoDB 內存比較器的分配和使用情況。
    INNODB_SYS_TABLESTATSInnoDB 系統表統計信息表。此表用于記錄 InnoDB 系統表的統計信息,如數據量、碎片率等。
    INNODB_LOCK_WAITSInnoDB 鎖等待信息表。此表記錄 InnoDB 鎖等待的情況,包括等待鎖的線程 ID、等待時間等。
    INNODB_INDEX_STATSInnoDB 索引統計信息表。此表用于記錄 InnoDB 索引的統計信息,如索引大小、索引列的數據類型等。
    INNODB_CMPInnoDB 比較器表。此表用于記錄 InnoDB 比較器的分配和使用情況。
    INNODB_CHANGED_PAGESInnoDB 更改頁表。此表用于記錄 InnoDB 數據文件中已更改的頁的信息。
    INNODB_BUFFER_POOL_PAGESInnoDB 緩沖池頁表。此表用于記錄 InnoDB 緩沖池中每個頁的信息,包括頁的類型、頁的狀態等。
    INNODB_TRXInnoDB 事務表。此表用于記錄 InnoDB 事務的信息,如事務 ID、事務狀態等。
    INNODB_BUFFER_POOL_PAGES_INDEXInnoDB 緩沖池頁索引表。此表用于記錄 InnoDB 緩沖池中每個頁的索引信息。
    INNODB_LOCKSInnoDB 鎖表。此表用于記錄 InnoDB 鎖的信息,如鎖的類型、鎖的持有者等。
    INNODB_BUFFER_PAGE_LRUInnoDB 緩沖池頁 LRU 表。此表用于記錄 InnoDB 緩沖池中每個頁的最近最少使用(Least Recently Used,LRU)信息。
    INNODB_SYS_TABLESInnoDB 系統表信息表。此表用于記錄 InnoDB 系統表的信息,如表名、表狀態等。
    INNODB_SYS_FIELDSInnoDB 系統字段信息表。此表用于記錄 InnoDB 系統表中每個字段的信息,如字段名、字段類型等。
    INNODB_SYS_COLUMNSInnoDB 系統列信息表。此表用于記錄 InnoDB 系統表中每個列的信息,如列名、列類型、列長度等。
    INNODB_SYS_STATSInnoDB 系統統計信息表。此表用于記錄 InnoDB 系統統計信息,如表數量、數據量等。
    INNODB_SYS_FOREIGNInnoDB 系統外鍵信息表。此表用于記錄 InnoDB 系統表中外鍵的信息,如外鍵約束條件等。
    INNODB_SYS_INDEXESInnoDB 系統索引信息表。此表用于記錄 InnoDB 系統表中索引的信息,如索引名、索引類型等。

    mysql?

    主數據庫,mysqld運行的必須數據庫,用戶與配置信息

    表名稱作用
    columns_priv保存了每個表的列級別的權限信息,包括用戶對各個列的SELECT、INSERT、UPDATE、REFERENCES等權限。
    db保存了每個數據庫的權限信息,包括用戶對每個數據庫的CREATE、ALTER、DROP等權限。
    event保存了MySQL中的事件信息,包括事件的名稱、執行時間、執行語句等。
    func保存了用戶定義的存儲函數的信息,包括函數的名稱、參數、返回類型等。
    general_log記錄了MySQL服務器上所有的日志操作,包括查詢、連接、錯誤日志等。
    help_category保存了MySQL幫助文檔中的分類信息,用于幫助查找和瀏覽文檔。
    help_keyword保存了MySQL幫助文檔的關鍵字信息,用于快速搜索和查找文檔。
    help_relation保存了MySQL幫助文檔中關鍵字之間的關系信息,用于幫助構建文檔的結構。
    help_topic保存了MySQL幫助文檔的具體內容信息,包括每個主題的標題、內容等。
    host保存了MySQL服務器上的主機信息,包括主機名、IP地址、連接權限等。
    ndb_binlog_index保存了使用NDB存儲引擎的MySQL服務器上的二進制日志索引信息。
    plugin保存了MySQL服務器上安裝的插件信息。
    proc保存了用戶定義的存儲過程的信息,包括過程的名稱、參數、語句等。
    procs_priv保存了用戶對存儲過程的訪問權限信息。
    proxies_priv保存了MySQL服務器上的代理用戶的權限信息。
    servers實驗性表,保存了MySQL服務器的外部服務器和復制配置信息。
    slow_log記錄了MySQL服務器上執行時間超過默認閾值的慢查詢日志。
    tables_priv保存了用戶對表的訪問權限信息。
    time_zone保存了MySQL服務器上的時區信息。
    time_zone_leap_second保存了時區閏秒的信息。
    time_zone_name保存了時區的名稱和相關信息。
    time_zone_transition保存了時區的變化規則和信息。
    time_zone_transition_type保存了時區變化類型的信息。
    user保存了MySQL服務器上的用戶賬號信息,包括用戶名、密碼、權限等。

    performance_schema

    性能數據庫,存儲mysqld的資源使用、安全策略權限配置信息

    表名作用
    cond_instances條件實例表,該表用于存儲各種條件或鎖定的實例信息
    events_waits_current當前等待事件表,記錄了當前正在等待某個事件發生的線程或會話信息
    events_waits_history歷史等待事件表,記錄了過去一段時間內等待事件的信息,包括等待事件的類型、等待時間等
    events_waits_history_long長期等待事件表,記錄了長時間等待事件的信息,包括等待事件的類型、等待時間、等待時長等
    events_waits_summary_by_instance按實例總結等待事件表,提供了按實例總結的等待事件統計信息
    events_waits_summary_by_thread_by_event_name按線程和事件總結等待事件表,提供了按線程和特定事件總結的等待事件統計信息
    events_waits_summary_global_by_event_name按全局和事件總結等待事件表,提供了按全局和特定事件總結的等待事件統計信息
    file_instances文件實例表,記錄了數據庫中各個文件的信息,包括文件路徑、文件大小等
    file_summary_by_event_name按事件名總結文件表,提供了按特定事件名總結的文件統計信息
    file_summary_by_instance按實例總結文件表,提供了按實例總結的文件統計信息
    mutex_instances互斥體實例表,記錄了數據庫中各個互斥體的信息,包括互斥體的名稱、狀態等
    performance_timers性能計時器表,提供了數據庫性能的計時信息,包括執行時間、資源使用情況等
    rwlock_instances讀寫鎖實例表,記錄了數據庫中各個讀寫鎖的信息
    setup_consumers設置消費者表,記錄了數據庫設置的各種消費者信息
    setup_instruments設置儀器表,記錄了數據庫設置的各類性能指標信息
    setup_timers設置定時器表,記錄了數據庫設置的各類定時器信息
    threads線程表,記錄了數據庫中的各個線程信息,包括線程ID、線程狀態等

    sys庫

    五、 SQL語言

    • DDL:數據定義語言,對數據庫結構操作

    ????????create:創建(用戶,庫,表)

    ????????alter:改變

    ????????drop:刪除

    • DML:數據操作語言,對數據表的操作

    ????????insert:插入

    ????????update:更新

    ????????delete:刪除數據

    • DCL:數據控制語言,針對用戶權限設置

    ????????grant:用戶賦權

    ????????revoke:移除用戶權限

    • DQL:數據查詢語言,對數據表的操作

    ????????select:查詢

    六、mysqld數據類型

    常用的數據類型有:

    1、整型

    整數類型占用字節無符號數的取值范圍有符號數的取值范圍
    TINYINT10~255-128~127
    SMALLINT20~65535-32768~32767
    MEDIUMINT30~16777215-8388608~8388607
    INT40~4294967295-2147483648~2147483647
    BIGINT80~18446744073709551615-9223372036854774808~9223372036854774807

    整數列的可選屬性有三個:

    • M: 寬度(在0填充的時候才有意義,否則不需要指定)

    • unsigned: 無符號類型(非負)

    • zerofill: 0填充,(如果某列是zerofill,那么默認就是無符號),如果指定了zerofill只是表示不夠M位時,用0在左邊填充,如果超過M位,只要不超過數據存儲范圍即可

    在 int(M) 中,M 的值跟 int(M) 所占多少存儲空間并無任何關系。 int(3)、int(4)、int(8) 在磁盤上都是占用 4 bytes 的存儲空間。

    各整數數據類型的使用場所

    數據類型應用場景
    TINYINT一般用于枚舉數據,比如系統設定取值范圍很小且固定的場景。
    SMALLINT可以用于較小范圍的統計數據,比如統計工廠的固定資產庫存數量等。
    MEDIUMINT用于較大整數的計算,比如車站每日的客流量等。
    INT、INTEGER取值范圍足夠大,一般情況下不用考慮超限問題,用得最多。比如商品編號。
    BIGINT只有當你處理特別巨大的整數時才會用到。比如雙十一的交易量、大型門戶網站點擊量、證券公司衍生產品持倉等。

    2、浮點型

    數據類型字節數取值范圍
    FLOAT4-2^128~2 ^128,即-3.40E+38~+3.40E+38
    DOUBLE8-2^1024~ 2^1024,即-1.79E+308~1.79E+308
    • 當浮點數類型使用unsigned修飾無符號時,取值范圍將不包含負數。

    • 浮點數的取值范圍是理論上的極限值,但根據不同的硬件或操作系統,實際范圍可能會小。

    • 浮點數雖然取值范圍很大,但精度并不高。float類型的精度為6位或7位,double類型的精度大約為15位。

    • 如果給定的數值超出精度,可能會導致給定的數值與實際保存的數值不一致,發生精度損失。

    • 當一個數字的整數部分和小數部分加起來達到7位時,第7位就會進行四舍五入操作。

    • 要避免使用“=”來判斷兩個浮點數是否相等,因為浮點數是不準確的,存在精度損失。

    3、BIT類型

    函數函數用途
    BIT(M)存儲二進制數據
    ASCll(M)獲取M的ASCll值
    BIN(M)獲取M的二進制值
    LENGTH(M)獲取M的數字長度

    • BIT數據類型可用來保存位字段值。BIT(M)類型允許存儲M位值。M范圍為1~64,默認為1。

    • BIT其實就是存入二進制的值,類似010110。如果存入一個BIT類型的值,位數少于M值,則左補0。如果存入一個BIT類型的值,位數多于M值,MySQL的操作取決于此時有效的SQL模式:如果模式未設置,MySQL將值裁剪到范圍的相應端點,并保存裁減好的值。如果模式設置為traditional(“嚴格模式”),超出范圍的值將被拒絕并提示錯誤,并且根據SQL標準插入會失敗。

    • 對于位字段,直接使用SELECT命令將不會看到結果,可以用bin()或hex()函數進行讀取。

    4、定點型

    • DECIMAL在MySQL內部以字符串形式存放,比浮點數更精確。定點類型占M+2個字節

    • DECIMAL(M,D)與浮點型一樣處理規則。M的取值范圍為0~65,D的取值范圍為0~30,而且必須<=M,超出范圍會報錯。

    • DECIMAL如果指定精度時,默認的整數位是10,默認的小數位為0。

    • NUMERIC等價于DECIMAL。

    • 例如,DECIMAL(5,2)表示的取值范圍為-999.99~999.99。

    5、日期時間類型

    數據類型字節取值范圍日期格式零值
    YEAR11901~2155YYYY0000
    DATE31000-01-01~9999-12-31YYYY-MM-DD0000-00-00
    TIME3-838:59:59~838:59:59HH:MM:SS00:00:00
    DATETIME81000-01-01 00:00:00~9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS0000-00-00 00:00:00
    TIMESTAMP41970-01-01 00:00:01~2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS0000-00-00 00:00:00

    YEAR類型

    YEAR類型用來表示年份,在所有的日期時間類型中所占用的存儲空間最小,只需要1個字節的存儲空間,格式為YYYY。

    在MySQL中,可使用以下3種格式指定TEAR類型的值:

    使用4位字符串或數字表示,為2025'2155或20252155。

    例如,輸入2022或’2022,插入到數據庫中的值均為2022.

    使用兩位字符串表示,為00~99。

    00 ~ '69的值會被轉換為2000~2069的YEAR值

    70 ~ '99的值會被自動轉換為1970~1999的YEAR值

    例如,輸入22,插入到數據表中的值為2022。

    使用兩位數字表示,為1~99。

    1 ~ 69的值會被轉換為2001~2069的YEAR值

    70 ~ 99的值會被自動轉換為1970~1999的YEAR值

    例如,輸入22,插入到數據表中的值為2022。

    注意:

    當使用YEAR類型時,一定要區分0和0。

    數字格式的0表示的YEAR值為0000

    字符串格式的0表示的YEAR值為2000

    DATE類型

    DATE類型用來表示日期值,不包含時間部分,需要 3個字節 的存儲空間,且其格式為 YYYY-MM-DD 。其中,YYYY表示年份,MM表示月份,DD表示日期。

    在MySQL中,可以使用以下4種格式指定DATE類型的值:

    以YYYY-MM-DD或者YYYYMMDD字符串格式表示。

    以YY-MM-DD或者YYMMDD字符串格式表示。

    以YY-MM-DD或者YYMMDD數字格式表示。

    使用CURRENT_DATE或者NOW()輸入當前系統日期。

    注意:

    通過"SELECT CURRENT_DATE;"或者"SELECT NOW();"可查詢當前日期。

    日期中的分隔符"-“,還可以使用”.“”,“”/"等符號來表示。

    TIME類型

    TIME類型用于表示時間值,它的顯示形式一般為HH:MM:SS,其中HH表示小時,MM表示分,SS表示秒。

    在MySQL中,可以使用以下3種格式指定TIME類型的值:

    以HHMMSS字符串或者HHMMSS數學格式表示。

    以HH:MM:SS字符串格式表示。

    使用CURRENT_TIME或NOW()輸入當前系統時間。

    DATETIME類型

    DATETIME類型在所有的日期時間類型中占用的存儲空間最大,總共需要 8 個字節的存儲空間,用來表示日期和時間,它的顯示形式為YYYY-MM-DD HH:MM:SS。

    在MySQL中,可以使用以下4種格式指定DATETIME類型的值:

    以YYYY-MM-DD HH:MM:SS或YYYYMMDDHHMMSS字符串格式表示的日期和時間,取值范圍為1000-01-01 00:00:00~9999-12-31-23-59-59。

    以YY-MM-DD HH:MM:SS或YYMMDDHHMMSS字符串格式表示的日期和時間,

    以YYYYMMDDHHMMSS或YYMMDDHHMMSS數字格式表示的日期和時間,

    使用NOW()來輸入當前系統的日期和時間。

    TIMESTAMP類型

    TIMESTAMP(時間戳)類型用于表示日期和時間,需要4個字節的存儲空間,它的顯示形式與DATETIME類型的相同,但取值范圍比DATETIME類型的小。

    TIMESTAMP類型與DATETIME類型的不同形式:

    使用CURRENT_TIMESTAMP來輸入系統當前的日期和時間。

    無任何輸入,或輸入NULL時,實際保存的是系統當前日期和時間。

    6、字符串型

    數據類型類型說明
    CHAR固定長度字符串
    VARCHAR可變長度字符串
    TEXT大文本數據
    ENUM枚舉類型
    SET字符串類型
    BINARY固定長度的二進制數據
    VARBINARY可變長度是二進制數據
    BLOB二進制大對象

    CHAR和VARCHAR類型

    CHAR和VARCHAR類型都是用來保存字符串數據,兩者不同的是,VARCHAR可以存儲可變長度的字符串數據。

    字符串類型特點長度長度范圍占用的存儲空間
    CHAR(M)固定長度M0<=M<=255M個字節
    VARCHAR(M)可變長度M0<=M<=65535(實際長度 + 1) 個字節

    TEXT類型

    TEXT類型用于保存大文本數據,例如,文章內容,評論等比較長的文本。

    數據類型存儲范圍存儲空間占用量特點
    TINYTEXT(tinytext)0~2^8-1文本長度+2小文本,可變長度
    TEXT(text)0~2^16-1文本長度+2文本,可變長度
    MEDIUMTEXT(mediumtext)0~2^24-1文本長度+3中等文本,可變長度
    LONGTEXT(longtext)0~2^32-1文本長度+4大文本,可變長度

    ENUM類型

    ENUM類型又稱為枚舉類型,其定義格式為:

    ENUM('值1','值2','值3','值4','值5',....,'值n')

    1. ENUM類型的取值范圍需要在定義字段時進行指定。

    2. 設置字段值時,ENUM類型只允許從成員中選取單個值,不能一次選取多個值。

    3. 其所需要的存儲空間由定義ENUM類型時指定的成員個數決定。

      • 當ENUM類型包含1~255個成員時,需要1個字節的存儲空間

      • 當ENUM類型包含256~65535個成員時,需要2個字節的存儲空間

      • ENUM類型的成員個數的上限為65535個

    SET類型

    SET類型用于保存字符串對象,其定義格式與ENUM類型相似。

    SET('值1','值2','值3','值4','值5',....,'值n')

    其所需要的存儲空間由定SET類型時指定的成員個數決定。

    SET類型包含的成員數存儲空間
    1~81個字節
    9~162個字節
    17~243個字節
    25~324個字節
    33~648個字節

    SET類型在存儲數據時成員個數越多,其占用的存儲空間越大。

    SET類型在選取成員時,與ENUM類型不同,其可以一次選擇多個成員。

    BINARY和VARBINARY類型

    BINARY和VARBINARY類型類似于CHAR和VARCHAR,不同的是,它們所表示的是二進制數據。

    類型特點長度長度范圍占用的存儲空間
    BINARY(M)固定長度M0<=M<=255M個字節
    VARBINARY(M)可變長度M0<=M<=65535(M+ 1) 個字節

    BLOB類型

    BLOB類型用于保存數據量比較大的二進制數據,如圖片,PDF文檔等

    數據類型存儲范圍占用空間
    TINYBLOB0~2^8 -1字節len+1個字節
    BLOB0~2^16 -1字節(相當于64KB)len+2個字節
    MEDIUMBLOB0~2^24 -1字節(相當于16MB)len+3個字節
    LONGBLOB0~2^32 -1字節(相當于4GB)len+4個字節

    JSON數據類型

    JSON(JavaScript Object Notation)是一種輕量級的數據交換格式 ,簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。它易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。

    JSON 可以將 JavaScript 對象中表示的一組數據轉換為字符串,然后就可以在網絡或者程序之間輕松地傳遞這個字符串,并在需要的時候將它還原為各編程語言所支持的數據格式。

    在MySQL 5.7中,就已經支持JSON數據類型。在MySQL中,JSON類型常見的表示方式有2種,分別為JSON數組和JSON對象。

    #JSON數組
    ['abc',10,null,true]


    #JSON對象
    {"k1":"value","k2":10}

    7、特殊的NULL類型

    • 所有的類型的值都可以是null,包括int、float等數據類型

    • 空字符串””,不等于null,0也不等于null,false也不等于null

    • 任何運算符,判斷符碰到NULL,都得NULL

    • NULL的判斷只能用is null,is not null

    • NULL 影響查詢速度,一般避免使值為NULL

    七、數據庫操作命令

    庫操作命令

    ?查看數據庫

    查看所在數據庫

    查看當前登錄用戶

    查看當前數據庫版本

    查看用戶權限列表

    創建用戶登錄

    查看指定用戶的權限

    遠程登錄

    切換數據庫

    創建數據庫

    刪除數據庫

    表結構操作命令

    查看數據表

    查看表內user(舉例)

    alter命令用法

    ALTER TABLE <表名> [修改選項]

    ?ADD COLUMN <列名> <類型>
    ?CHANGE COLUMN <舊列名> <新列名> <新列類型>
    ?ALTER COLUMN <列名> { SET DEFAULT <默認值> | DROP DEFAULT }
    ?MODIFY COLUMN <列名> <類型>
    ?DROP COLUMN <列名>
    ?RENAME TO <新表名>
    ?CHARACTER SET <字符集名>
    ?COLLATE <校對規則名>?

    ?案例

    創建測試表

    修改表名

    修改字段類型(修改字段相對位置)

    修改字段默認值/是否為空/自動增長

    修改字段名/字段類型

    添加字段

    刪除字段

    表數據操作

    插入數據

    單行插入

    單行刪除

    內容更改(整列)

    刪除數據庫

    where字句運算符

    比較運算符

    運算符說明
    >, >=, <, <=大于,大于等于,小于,小于等于
    =等于,NULL 不安全,例如 NULL = NULL 的結果是 NULL
    <=>等于,NULL 安全,例如 NULL <=> NULL 的結果是 TRUE(1)
    !=, <>不等于
    BETWEEN a0 AND a1范圍匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
    IN (option, …)如果是 option 中的任意一個,返回 TRUE(1)
    IS NULL是 NULL
    IS NOT NULL不是 NULL
    LIKE模糊匹配。% 表示任意多個(包括 0 個)任意字符;_ 表示任意一個字符

    邏輯運算符

    運算符說明
    AND (&&)多個條件必須都為 TRUE(1),結果才是 TRUE(1)
    OR (||)任意一個條件為 TRUE(1), 結果為 TRUE(1)
    NOT (!)條件為 TRUE(1),結果為 FALSE(0)
    更新數據

    刪除數據

    ?全表刪除

    delete from tableName;

    條件刪除

    delete from tableName where columnName=currentValue;
    delete from stuS where id=6;

    查詢數據

    生成測試表

    構建一所學校數據庫,要求學院3個,每個學院3個專業,每個專業3個年級,每個年級3個班,每個班50人,每個專業6門課,每個門課3個老師。

    參考代碼:

    生成表

    -- 學院表
    CREATE TABLE college (college_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL
    );-- 專業表
    CREATE TABLE major (major_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,college_id INT NOT NULL,FOREIGN KEY (college_id) REFERENCES college(college_id)
    );-- 班級表
    CREATE TABLE class (class_id INT PRIMARY KEY AUTO_INCREMENT,class_name VARCHAR(20) NOT NULL,grade INT NOT NULL,major_id INT NOT NULL,FOREIGN KEY (major_id) REFERENCES major(major_id)
    );-- 學生表
    CREATE TABLE student (student_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,gender ENUM('男','女') NOT NULL,class_id INT NOT NULL,FOREIGN KEY (class_id) REFERENCES class(class_id)
    );-- 課程表
    CREATE TABLE course (course_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,credit FLOAT NOT NULL
    );-- 教師表
    CREATE TABLE teacher (teacher_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,college_id INT NOT NULL,FOREIGN KEY (college_id) REFERENCES college(college_id)
    );-- 專業-課程關聯表
    CREATE TABLE major_course (major_id INT NOT NULL,course_id INT NOT NULL,PRIMARY KEY (major_id, course_id),FOREIGN KEY (major_id) REFERENCES major(major_id),FOREIGN KEY (course_id) REFERENCES course(course_id)
    );-- 課程-教師關聯表
    CREATE TABLE course_teacher (course_id INT NOT NULL,teacher_id INT NOT NULL,PRIMARY KEY (course_id, teacher_id),FOREIGN KEY (course_id) REFERENCES course(course_id),FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id)
    );-- 學生選課表
    CREATE TABLE student_course (student_id INT NOT NULL,course_id INT NOT NULL,score FLOAT,PRIMARY KEY (student_id, course_id),FOREIGN KEY (student_id) REFERENCES student(student_id),FOREIGN KEY (course_id) REFERENCES course(course_id)
    );

    生成數據?

    -- 插入3個學院
    INSERT INTO college (name) VALUES 
    ('計算機學院'),
    ('經濟管理學院'),
    ('機械工程學院');-- 每個學院插入3個專業 (共9個專業)
    INSERT INTO major (name, college_id) VALUES
    ('計算機科學與技術', 1),('軟件工程', 1),('人工智能', 1),
    ('金融學', 2),('會計學', 2),('市場營銷', 2),
    ('機械工程', 3),('車輛工程', 3),('材料成型', 3);-- 每個專業插入3個年級,每個年級3個班 (共81個班級)
    INSERT INTO class (class_name, grade, major_id)
    SELECT CONCAT(grade, '級', c.class_no, '班') AS class_name,grade,major_id
    FROM (SELECT major_id FROM major
    ) m
    CROSS JOIN (SELECT 2021 AS grade UNION SELECT 2022 UNION SELECT 2023
    ) g
    CROSS JOIN (SELECT '1' AS class_no UNION SELECT '2' UNION SELECT '3'
    ) c;-- 每個班插入50名學生 (共4050名學生)
    INSERT INTO student (name, gender, class_id)
    SELECT CONCAT('學生', class_id, '_', s) AS name,IF(RAND() > 0.5, '男', '女') AS gender,class_id
    FROM class
    CROSS JOIN (SELECT 1 AS s UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNIONSELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNIONSELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24 UNION SELECT 25 UNION SELECT 26 UNION SELECT 27 UNION SELECT 28 UNION SELECT 29 UNION SELECT 30 UNIONSELECT 31 UNION SELECT 32 UNION SELECT 33 UNION SELECT 34 UNION SELECT 35 UNION SELECT 36 UNION SELECT 37 UNION SELECT 38 UNION SELECT 39 UNION SELECT 40 UNIONSELECT 41 UNION SELECT 42 UNION SELECT 43 UNION SELECT 44 UNION SELECT 45 UNION SELECT 46 UNION SELECT 47 UNION SELECT 48 UNION SELECT 49 UNION SELECT 50
    ) seq;-- 每個專業插入6門課程 (共54門課程)
    INSERT INTO course (name, credit)
    SELECT CONCAT(m.name, '課程', c) AS name,ROUND(1 + RAND() * 3, 1) AS credit
    FROM major m
    CROSS JOIN (SELECT 1 AS c UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
    ) c;-- 建立專業-課程關聯 (共54條記錄)
    INSERT INTO major_course (major_id, course_id)
    SELECT FLOOR((course_id - 1) / 6) + 1 AS major_id,course_id
    FROM course;-- 每個學院插入20名教師 (共60名教師)
    INSERT INTO teacher (name, college_id)
    SELECT CONCAT('教師', c.college_id, '_', t) AS name,c.college_id
    FROM college c
    CROSS JOIN (SELECT 1 AS t UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNIONSELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20
    ) t;-- 每門課程關聯3名教師 (共162條記錄)
    INSERT INTO course_teacher (course_id, teacher_id)
    WITH course_teacher_random AS (SELECT c.course_id,t.teacher_id,ROW_NUMBER() OVER (PARTITION BY c.course_id ORDER BY RAND()) AS rnFROM course cCROSS JOIN teacher t
    )
    SELECT course_id, teacher_id
    FROM course_teacher_random
    WHERE rn <= 3;-- 插入學生選課記錄 (每個學生選修3-6門本專業的課程)
    INSERT INTO student_course (student_id, course_id, score)
    SELECT s.student_id,mc.course_id,ROUND(50 + RAND() * 50, 1) AS score  -- 隨機生成50-100分的成績
    FROM student s
    JOIN class c ON s.class_id = c.class_id
    JOIN major_course mc ON c.major_id = mc.major_id
    WHERE NOT EXISTS (SELECT 1 FROM student_course sc WHERE sc.student_id = s.student_id AND sc.course_id = mc.course_id
    )  -- 確保不重復選課
    GROUP BY s.student_id, mc.course_id
    HAVING RAND() < 0.7  -- 70%的概率選擇這門課
    ORDER BY RAND()
    LIMIT 20000;  -- 大約20000條選課記錄

    全表查詢

    去重查詢(distinct)

    統計查詢,非空數據

    重新定義查詢結果表中的列名稱

    聚合函數查詢

    #sum():計算和值

    #avg():計算平均值

    #max():最大值

    #min():最小值

    分組查詢

    #group by
    每個同學的總成績

    排除第二位同學的每個人的總成績

    分組后的條件:having

    查詢總成績大于300分的同學

    排序查詢

    #升序(order by)

    查詢總成績的升序排列結果

    #降序

    查詢總成績的降序排列結果

    分頁查詢

    limit ?number? 顯示前number行

    查詢總成績第一名

    limit [startNumber,顯示的數據行數]

    查詢總成績第二名

    子查詢

    union聯合查詢

    #字段個數必須相同

    多表查詢
    內連接查詢

    將兩個不同的表中一樣的數據匹配,然后將不同的數據組合到一起,比如一個是學生名單(有名字和班級編號),一個是班級表(有班級編號和班級名稱)。
    內連接就是:?只找出兩邊都有的“班級編號”?,然后把對應的學生名字和班級名稱拼在一起顯示出來。

    舉例公式:SELECT 學生表.名字, 班級表.班級名稱 ?FROM 學生表?INNER JOIN 班級表 ON 學生表.班級編號 = 班級表.班級編號;

    外連接查詢

    外連接會保留主表的所有數據,副表無匹配時用?NULL?填充。

    與內連接的區別?:

    • 內連接:只顯示兩表完全匹配的行(交集)。
    • 外連接:主表數據全顯示,副表無匹配則補?NULL?

    左外連接

    ?左表為主表,右表為副表。左表所有行 + 右表匹配的行(無匹配則右表顯示?NULL

    右外連接

    • 以 ?右表為主表,左表為副表。右表所有行 + 左表匹配的行(無匹配則左表顯示?NULL

    實戰模擬

    題目要求

    1.1、統計每個學院老師數量

    ??1.2、統計每個學院專業數量

    ?1.3、統計每個學院年級數量

    ?1.4、統計每個學院班級數量

    ?

    2.1、2021級計算機科學與技術成績最高分姓名

    2.2、2022級計算機科學與技術各個班的平均分

    ?

    2.3、2023級會計學每個班總平均分

    ?

    2.4、機械工程學院2023級總分第一名

    八、mysqld用戶權限管理

    MySQL數據庫權限分類

    PrivilegeContextComment
    AlterTablesTo alter the table
    Alter routineFunctions,ProceduresTo alter or drop stored functions/procedures
    CreateDatabases,Tables,IndexesTo create new databases and tables
    Create routineDatabasesTo use CREATE FUNCTION/PROCEDURE
    Create temporary tablesDatabasesTo use CREATE TEMPORARY TABLE
    Create viewTablesTo create new views
    Create userServer AdminTo create new users
    DeleteTablesTo delete existing rows
    DropDatabases,TablesTo drop databases, tables, and views
    EventServer AdminTo create, alter, drop and execute events
    ExecuteFunctions,ProceduresTo execute stored routines
    FileFile access on serverTo read and write files on the server
    Grant optionDatabases,Tables,Functions,ProceduresTo give to other users those privileges you possess
    IndexTablesTo create or drop indexes
    InsertTablesTo insert data into tables
    Lock tablesDatabasesTo use LOCK TABLES (together with SELECT privilege)
    ProcessServer AdminTo view the plain text of currently executing queries
    ProxyServer AdminTo make proxy user possible
    ReferencesDatabases,TablesTo have references on tables
    ReloadServer AdminTo reload or refresh tables, logs and privileges
    Replication clientServer AdminTo ask where the slave or master servers are
    Replication slaveServer AdminTo read binary log events from the master
    SelectTablesTo retrieve rows from table
    Show databasesServer AdminTo see all databases with SHOW DATABASES
    Show viewTablesTo see views with SHOW CREATE VIEW
    ShutdownServer AdminTo shut down the server
    SuperServer AdminTo use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
    TriggerTablesTo use triggers
    Create tablespaceServer AdminTo create/alter/drop tablespaces
    UpdateTablesTo update existing rows
    UsageServer AdminNo privileges - allow connect only

    中文釋義

    在MySQL中,權限控制是通過Grant和Revoke命令來管理用戶和角色的權限的。
    - Alter:修改。允許用戶修改數據庫中的表結構。
    - Alter routine:修改存儲過程或函數。允許用戶修改已創建的存儲過程或函數。
    - Create:創建。允許用戶創建新的數據庫對象,如表、視圖、存儲過程等。
    - Create routine:創建存儲過程或函數。允許用戶創建新的存儲過程或函數。
    - Create temporary tables:創建臨時表。允許用戶創建臨時表,這些表在會話結束時會自動刪除。
    - Create view:創建視圖。允許用戶創建新的視圖。
    - Create user:創建用戶。允許用戶創建新的數據庫用戶賬戶。
    - Delete:刪除。允許用戶刪除表中的數據。
    - Drop:刪除。允許用戶刪除數據庫中的對象,如表、視圖等。
    - Event:事件。允許用戶管理和修改事件調度器中的事件。
    - Execute:執行。允許用戶執行存儲過程或函數。
    - File:文件。允許用戶訪問數據庫服務器的文件系統。
    - Grant option:授予選項。允許用戶將權限授予其他用戶。
    - Index:索引。允許用戶在表上創建、修改或刪除索引。
    - Insert:插入。允許用戶向表中插入數據。
    - Lock tables:鎖定表。允許用戶鎖定數據庫中的表,以防止其他用戶同時訪問這些表。
    - Process:進程。允許查看或殺死數據庫服務器上的進程。
    - Proxy:代理。允許用戶作為代理登錄,代表其他用戶執行操作。
    - References:引用。允許用戶創建外鍵約束。
    - Reload:重新加載。允許用戶重新加載配置文件或刷新權限表。
    - Replication client:復制客戶端。允許用戶從主服務器接收數據以進行復制。
    - Replication slave:復制從機。允許用戶作為數據復制的從服務器。
    - Select:選擇。允許用戶查詢表中的數據。
    - Show databases:顯示數據庫。允許用戶查看用的數據庫列表。
    - Show view:顯示視圖。允許用戶查看數據庫中的視圖定義。
    - Shutdown:關閉。允許用戶關閉數據庫服務器。
    - Super:超級。允許用戶所有的權限,并且可以不受限制地執行許多系統命令。
    - Trigger:觸發器。允許用戶創建觸發器,以在特定事件發生時自動執行代碼。
    - Create tablespace:創建表空間。允許用戶創建新的表空間,用于存儲數據庫對象。
    - Update:更新。允許用戶更新表中的數據。
    - Usage:使用。這個權限通常用于限制用戶只能查看自己的權限,不能進行任何實際的數據庫操作。

    user_namehost_name說明
    zhx192.168.71.151zhx,只能從此ip連接
    zhx192.168.71.%zhx,從192.168.71子網中的任何主機
    zhx%zhx,任何主機可連

    創建遠程管理用戶

    -- 只創建的用戶默認具有USAGE權限

    更改密碼

    -- 在mysql8之前的數據庫,grant命令運行的時候,發現用戶不存在,則隱式創建?

    創建遠程web服務數據庫的操作用戶

    grant all on britz.* to 'webuser'@'192.168.115.%' identified by '123.com';
    flush privileges;?

    查看用戶權限

    刪除用戶權限

    revoke all on 庫.表 ?from 'username'@'ipaddress';
    flush privileges;


    ?總結

    本次學習初步了解了MySQL數據庫的一些操作和命令,還有編譯安裝的過程,后續還會補充本次文章的內容。


    本次更新了數據庫命令的使用,構建了一個庫,并對其增刪改查,主要是查上,對待不同情況進行使用方式不同查看。?

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

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

    相關文章

    ES文件管理器v4.4.3(ES文件瀏覽器)

    前言 ES文件管理器&#xff08;也叫ES文件瀏覽器&#xff09;是一款手機上用來看和管理文件的工具。你可以用它像在電腦上一樣&#xff0c;把文件整理進不同的文件夾&#xff0c;查找照片、文檔、視頻都很方便。它還能看到平時看不到的隱藏文件&#xff0c;幫你清理一些沒用的…

    leetcode:693. 交替位二進制數(數學相關算法題,python3解法)

    難度&#xff1a;簡單 給定一個正整數&#xff0c;檢查它的二進制表示是否總是 0、1 交替出現&#xff1a;換句話說&#xff0c;就是二進制表示中相鄰兩位的數字永不相同。 示例 1&#xff1a; 輸入&#xff1a;n 5 輸出&#xff1a;true 解釋&#xff1a;5 的二進制表示是&am…

    GRU與LSTM之間的聯系和區別

    前面我們談到RNN與LSTM之間的關系&#xff0c;而GRU也是循環神經網絡中的一種模型&#xff0c;那么它與LSTM有什么區別呢&#xff1f; 接下來我來對GRU&#xff08;Gated Recurrent Unit&#xff09;模型進行一次深度解析&#xff0c;重點關注其內部結構、參數以及與LSTM的對比…

    2025年數字信號、計算機通信與軟件工程國際會議(DSCCSE 2025)

    2025年數字信號、計算機通信與軟件工程國際會議&#xff08;DSCCSE 2025&#xff09; 2025 International Conference on Digital Signal, Computer Communication, and Software Engineering 一、大會信息 會議簡稱&#xff1a;DSCCSE 2025 大會地點&#xff1a;中國北京 審稿…

    北峰智能SDC混合組網通信方案,助力無網絡場景高效作業

    在自然災害、公共安全事件或大規模活動應急響應中&#xff0c;專用無線對講通信因其不受外部網絡限制、免去通話費用、無需撥號便可實現即時語音調度的特點&#xff0c;展現出其不可替代的價值。尤其在許多無基礎設施的地區&#xff0c;對智能化調度管理的需求并不亞于城市地區…

    HarmonyOS應用開發高級認證知識點梳理 (二) 組件交互

    以下是 HarmonyOS 應用開發中 ?組件交互? 的核心知識點梳理&#xff08;高級認證備考重點&#xff09;&#xff0c;涵蓋事件傳遞、狀態管理、通信機制及生命周期協同&#xff1a; 一、事件處理機制 基礎交互類型? (1)點擊事件&#xff08;onClick&#xff09; 核心要點?…

    【SQL優化案例】索引創建不合理導致SQL消耗大量CPU資源

    #隱式轉換 第一章 適用環境 oracle 11glinux 6.9 第二章 Top SQL概況 下面列出我們發現的特定模塊中Top SQL的相關情況&#xff1a; SQL_ID 模塊 SQL類型 主要問題 fnc58puaqkd1n 無 select 索引創建不合理&#xff0c;導致全索引掃描&#xff0c;產生了大量邏輯讀 …

    autoas/as 工程的RTE靜態消息總線實現與端口數據交換機制詳解

    0. 概述 autoas/as 工程的RTE&#xff08;Runtime Environment&#xff09;通過自動生成C代碼&#xff0c;將各SWC&#xff08;軟件組件&#xff09;之間的數據通信全部靜態化、結構化&#xff0c;實現了類似“靜態消息總線”的通信模型。所有端口的數據交換都必須經過RTE接口…

    【機器學習第四期(Python)】LightGBM 方法原理詳解

    LightGBM 概述 一、LightGBM 簡介二、LightGBM 原理詳解?? 核心原理&#x1f9e0; LightGBM 的主要特點 三、LightGBM 實現步驟&#xff08;Python&#xff09;&#x1f9ea; 可調參數推薦完整案例代碼&#xff08;回歸任務 可視化&#xff09; 參考 LightGBM 是由微軟開源的…

    時序數據庫IoTDB監控指標采集與可視化指南

    一、概述 本文以時序數據庫IoTDB V1.0.1版本為例&#xff0c;介紹如何通過Prometheus采集Apache IoTDB的監控指標&#xff0c;并使用Grafana進行可視化。 二、Prometheus聚合運算符 Prometheus支持多種聚合運算符&#xff0c;用于在時間序列數據上進行聚合操作。以下是一些常…

    React安裝使用教程

    一、React 簡介 React 是由 Facebook 開發和維護的一個用于構建用戶界面的 JavaScript 庫&#xff0c;適用于構建復雜的單頁應用&#xff08;SPA&#xff09;。它采用組件化、虛擬 DOM 和聲明式編程等理念&#xff0c;已成為前端開發的主流選擇。 二、React 安裝方式 2.1 使用…

    .NET MAUI跨平臺串口通訊方案

    文章目錄 MAUI項目架構設計平臺特定實現接口定義Windows平臺實現Android平臺實現 MAUI主界面實現依賴注入配置相關學習資源.NET MAUI開發移動端開發平臺特定實現依賴注入與架構移動應用發布跨平臺開發最佳實踐性能優化測試與調試開源項目參考 MAUI項目架構設計 #mermaid-svg-OG…

    BUUCTF在線評測-練習場-WebCTF習題[MRCTF2020]你傳你[特殊字符]呢1-flag獲取、解析

    解題思路 打開靶場&#xff0c;左邊是艾克&#xff0c;右邊是詩人&#xff0c;下面有個文件上傳按鈕 結合題目&#xff0c;是一個文件上傳漏洞&#xff0c;一鍵去世看源碼可知是提交按鈕&#xff0c;先上傳個一句話木馬.php試試 <?php eval($_POST[shell]); ?> 被過…

    【容器】容器平臺初探 - k8s整體架構

    目錄 K8s總攬 K8s主要組件 組件說明 一、Master組件 二、WokerNode組件 K8s是Kubernetes的簡稱&#xff0c;它是Google的開源容器集群管理系統&#xff0c;其提供應用部署、維護、擴展機制等功能&#xff0c;利用k8s能很方便地管理跨機器運行容器化的應用。 K8s總攬 K8s主…

    C++--繼承

    文章目錄 繼承1. 繼承的概念及定義1.1 繼承的概念1.2 繼承的定義1.2.1 定義格式1.2.2 繼承方式和訪問限定符1.2.3 繼承基類成員訪問方式的變化1.2.3.1 基類成員訪問方式的變化規則1.2.3.2 默認繼承方式 1.3 繼承類模版 2. 基類和派生類的轉化3. 繼承中的作用域3.1 隱藏3.2 經典…

    無REPOSITORY、TAG的docker懸空鏡像究竟是什么?是否可刪除?

    有時候&#xff0c;使用docker images指令我們可以發現大量的無REPOSITORY、TAG的docker鏡像&#xff0c;這些鏡像究竟是什么&#xff1f; 它們沒有REPOSITORY、TAG名稱&#xff0c;沒有辦法引用&#xff0c;那么它們還有什么用&#xff1f; [rootcdh-100 data]# docker image…

    創建一個基于YOLOv8+PyQt界面的駕駛員疲勞駕駛檢測系統 實現對駕駛員疲勞狀態的打哈欠檢測,頭部下垂 疲勞眼睛檢測識別

    如何使用Yolov8創建一個基于YOLOv8的駕駛員疲勞駕駛檢測系統 文章目錄 1. 數據集準備2. 安裝依賴3. 創建PyQt界面4. 模型訓練1. 數據集準備2. 模型訓練數據集配置文件 (data.yaml)訓練腳本 (train.py) 3. PyQt界面開發主程序 (MainProgram.py) 4. 運行項目5. 關鍵代碼解釋數據集…

    使用FFmpeg將YUV編碼為H.264并封裝為MP4,通過api接口實現

    YUV數據來源 攝像頭直接采集的原始視頻流通常為YUV格式&#xff08;如YUV420&#xff09;&#xff0c;尤其是安防攝像頭和網絡攝像頭智能手機、平板電腦的攝像頭通過硬件接口視頻會議軟件&#xff08;如Zoom、騰訊會議&#xff09;從攝像頭捕獲YUV幀&#xff0c;進行預處理&am…

    tcpdump工具交叉編譯

    本文默認系統已經安裝了交叉工具鏈環境。 下載相關版本源碼 涉及tcpdump源碼&#xff0c;以及tcpdump編譯過程依賴的pcap庫源碼。 網站&#xff1a;http://www.tcpdump.org/release wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz wget http://www.tcpdump.org/r…

    神經網絡中torch.nn的使用

    卷積層 通過卷積核&#xff08;濾波器&#xff09;在輸入數據上滑動&#xff0c;卷積層能夠自動檢測和提取局部特征&#xff0c;如邊緣、紋理、顏色等。不同的卷積核可以捕捉不同類型的特征。 nn.conv2d() in_channels:輸入的通道數&#xff0c;彩色圖片一般為3通道 out_c…