一.故事劇情
接下來要進入到一條比較長的路——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.關系型數據庫模型
-
層次模型
-
網狀模型
-
關系模型
關系模型的相關概念:
-
實體(Entity) :實體是指現實世界中可以區分的對象,它可以是具體的人、事物或概念,也可以是抽象的物體。在數據庫中,實體通常對應于表中的行,而表則實體的一種集合。例如,在一個學生信息管理系統中,學生、課程和教師都可以被視為實體。
-
屬性(Attribute): 屬性是實體的特征或性質,它提供了關于實體的具體信息。屬性可以是簡單的數據類型,如姓名、年齡或地址,也可以是更復雜的結構,如電話號碼或電子郵件地址。在數據庫中,屬性通常對應于表中的列,每列代表實體的一種屬性。例如,學生的姓名、學號和年齡都是學生的屬性。
-
聯系(Relationship): 聯系描述了不同實體之間的關系。在現實世界中,實體之間往往存在各種形式的關聯。在數據庫中,聯系通過關系表來實現,這個表通常包含兩個或更多的實體作為表的列。例如,學生選修課程的關系表就包含了學生實體和課程實體的相關信息,描述了哪位學生選修了哪門課程。
在關系模型中,實體和聯系通常通過以下三種類型來進一步分類:
-
一對一(1:1):這種聯系表示兩個實體之間存在一對一的關系,即每個實體只有一個相關的實體,反之亦然。例如,一個部門與一個負責人之間可能存在一對一的聯系。
-
一對多(1:N):這種聯系表示一個實體與多個實體相關,但每個相關實體只與一個實體相關。例如,一個教師可以教授多門課程,但每門課程只能由一個教師教授。
-
多對多(M:N):這種聯系表示兩個實體之間存在多對多的關系,即每個實體可以與多個實體相關,同時每個相關實體也可以與多個實體相關。例如,學生可以選修多門課程,同時每門課程也可以被多個選修。
在設計數據庫時,正確地識別實體、屬性和聯系,以及它們之間的類型,對于創建一個結構良好、能夠有效存儲和檢索數據的數據庫至關重要。
4.關系數據庫相關概念
-
庫(Database): 庫是一個存儲數據的容器,它可以包含多個數據庫。在某些管理系統中,庫等同于數據庫。
-
表(Table): 表是數據庫中的一個表格,由行和列組成。表是存儲數據的主要結構,每個表通常對應一個實體類型。表的列名稱為屬性,而表的行名稱為記錄。
-
行(Record): 行也稱為記錄,它是表中的一個單元,代表表中的一個具體實例。每一行包含了一組屬性值,這些值共同描述了一個實體的狀態。
-
列(Column): 列是表中的一列,它代表了表的一個屬性。每列都有一個數據類型,用于定義存儲在其中的數據的種類和格式。
-
字段(Field): 字段通常指的是表中的行與列的交叉點,它存儲了單個數據項。在數據庫中,每個字段都有其特定的數據類型和用途。
-
數據(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_RESET | InnoDB 內存比較器重置表。此表用于記錄 InnoDB 內存比較器(comparison memory)的清除操作。 |
INNODB_RSEG | InnoDB 重做段表此表用于記錄 InnoDB 數據文件的重做段信息。 |
INNODB_UNDO_LOGS | InnoDB 撤銷日志表。此表用于記錄 InnoDB 撤銷操作的日志信息。 |
INNODB_CMPMEM | InnoDB 內存比較器表。此表用于記錄 InnoDB 內存比較器的分配和使用情況。 |
INNODB_SYS_TABLESTATS | InnoDB 系統表統計信息表。此表用于記錄 InnoDB 系統表的統計信息,如數據量、碎片率等。 |
INNODB_LOCK_WAITS | InnoDB 鎖等待信息表。此表記錄 InnoDB 鎖等待的情況,包括等待鎖的線程 ID、等待時間等。 |
INNODB_INDEX_STATS | InnoDB 索引統計信息表。此表用于記錄 InnoDB 索引的統計信息,如索引大小、索引列的數據類型等。 |
INNODB_CMP | InnoDB 比較器表。此表用于記錄 InnoDB 比較器的分配和使用情況。 |
INNODB_CHANGED_PAGES | InnoDB 更改頁表。此表用于記錄 InnoDB 數據文件中已更改的頁的信息。 |
INNODB_BUFFER_POOL_PAGES | InnoDB 緩沖池頁表。此表用于記錄 InnoDB 緩沖池中每個頁的信息,包括頁的類型、頁的狀態等。 |
INNODB_TRX | InnoDB 事務表。此表用于記錄 InnoDB 事務的信息,如事務 ID、事務狀態等。 |
INNODB_BUFFER_POOL_PAGES_INDEX | InnoDB 緩沖池頁索引表。此表用于記錄 InnoDB 緩沖池中每個頁的索引信息。 |
INNODB_LOCKS | InnoDB 鎖表。此表用于記錄 InnoDB 鎖的信息,如鎖的類型、鎖的持有者等。 |
INNODB_BUFFER_PAGE_LRU | InnoDB 緩沖池頁 LRU 表。此表用于記錄 InnoDB 緩沖池中每個頁的最近最少使用(Least Recently Used,LRU)信息。 |
INNODB_SYS_TABLES | InnoDB 系統表信息表。此表用于記錄 InnoDB 系統表的信息,如表名、表狀態等。 |
INNODB_SYS_FIELDS | InnoDB 系統字段信息表。此表用于記錄 InnoDB 系統表中每個字段的信息,如字段名、字段類型等。 |
INNODB_SYS_COLUMNS | InnoDB 系統列信息表。此表用于記錄 InnoDB 系統表中每個列的信息,如列名、列類型、列長度等。 |
INNODB_SYS_STATS | InnoDB 系統統計信息表。此表用于記錄 InnoDB 系統統計信息,如表數量、數據量等。 |
INNODB_SYS_FOREIGN | InnoDB 系統外鍵信息表。此表用于記錄 InnoDB 系統表中外鍵的信息,如外鍵約束條件等。 |
INNODB_SYS_INDEXES | InnoDB 系統索引信息表。此表用于記錄 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、整型
整數類型 | 占用字節 | 無符號數的取值范圍 | 有符號數的取值范圍 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~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、浮點型
數據類型 | 字節數 | 取值范圍 |
---|---|---|
FLOAT | 4 | -2^128~2 ^128,即-3.40E+38~+3.40E+38 |
DOUBLE | 8 | -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、日期時間類型
數據類型 | 字節 | 取值范圍 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-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) | 固定長度 | M | 0<=M<=255 | M個字節 |
VARCHAR(M) | 可變長度 | M | 0<=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')
-
ENUM類型的取值范圍需要在定義字段時進行指定。
-
設置字段值時,ENUM類型只允許從成員中選取單個值,不能一次選取多個值。
-
其所需要的存儲空間由定義ENUM類型時指定的成員個數決定。
-
當ENUM類型包含1~255個成員時,需要1個字節的存儲空間
-
當ENUM類型包含256~65535個成員時,需要2個字節的存儲空間
-
ENUM類型的成員個數的上限為65535個
-
SET類型
SET類型用于保存字符串對象,其定義格式與ENUM類型相似。
SET('值1','值2','值3','值4','值5',....,'值n')
其所需要的存儲空間由定SET類型時指定的成員個數決定。
SET類型包含的成員數 | 存儲空間 |
---|---|
1~8 | 1個字節 |
9~16 | 2個字節 |
17~24 | 3個字節 |
25~32 | 4個字節 |
33~64 | 8個字節 |
SET類型在存儲數據時成員個數越多,其占用的存儲空間越大。
SET類型在選取成員時,與ENUM類型不同,其可以一次選擇多個成員。
BINARY和VARBINARY類型
BINARY和VARBINARY類型類似于CHAR和VARCHAR,不同的是,它們所表示的是二進制數據。
類型 | 特點 | 長度 | 長度范圍 | 占用的存儲空間 |
---|---|---|---|---|
BINARY(M) | 固定長度 | M | 0<=M<=255 | M個字節 |
VARBINARY(M) | 可變長度 | M | 0<=M<=65535 | (M+ 1) 個字節 |
BLOB類型
BLOB類型用于保存數據量比較大的二進制數據,如圖片,PDF文檔等
數據類型 | 存儲范圍 | 占用空間 |
---|---|---|
TINYBLOB | 0~2^8 -1字節 | len+1個字節 |
BLOB | 0~2^16 -1字節(相當于64KB) | len+2個字節 |
MEDIUMBLOB | 0~2^24 -1字節(相當于16MB) | len+3個字節 |
LONGBLOB | 0~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數據庫權限分類
Privilege | Context | Comment |
---|---|---|
Alter | Tables | To alter the table |
Alter routine | Functions,Procedures | To alter or drop stored functions/procedures |
Create | Databases,Tables,Indexes | To create new databases and tables |
Create routine | Databases | To use CREATE FUNCTION/PROCEDURE |
Create temporary tables | Databases | To use CREATE TEMPORARY TABLE |
Create view | Tables | To create new views |
Create user | Server Admin | To create new users |
Delete | Tables | To delete existing rows |
Drop | Databases,Tables | To drop databases, tables, and views |
Event | Server Admin | To create, alter, drop and execute events |
Execute | Functions,Procedures | To execute stored routines |
File | File access on server | To read and write files on the server |
Grant option | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess |
Index | Tables | To create or drop indexes |
Insert | Tables | To insert data into tables |
Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) |
Process | Server Admin | To view the plain text of currently executing queries |
Proxy | Server Admin | To make proxy user possible |
References | Databases,Tables | To have references on tables |
Reload | Server Admin | To reload or refresh tables, logs and privileges |
Replication client | Server Admin | To ask where the slave or master servers are |
Replication slave | Server Admin | To read binary log events from the master |
Select | Tables | To retrieve rows from table |
Show databases | Server Admin | To see all databases with SHOW DATABASES |
Show view | Tables | To see views with SHOW CREATE VIEW |
Shutdown | Server Admin | To shut down the server |
Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. |
Trigger | Tables | To use triggers |
Create tablespace | Server Admin | To create/alter/drop tablespaces |
Update | Tables | To update existing rows |
Usage | Server Admin | No 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_name | host_name | 說明 |
---|---|---|
zhx | 192.168.71.151 | zhx,只能從此ip連接 |
zhx | 192.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數據庫的一些操作和命令,還有編譯安裝的過程,后續還會補充本次文章的內容。
本次更新了數據庫命令的使用,構建了一個庫,并對其增刪改查,主要是查上,對待不同情況進行使用方式不同查看。?