關於資料庫管理系統DBMS--關係型資料庫(MySQL/MariaDB)

来源:https://www.cnblogs.com/aiaitie/archive/2018/07/23/9356245.html
-Advertisement-
Play Games

關於{RDBMS(關係型資料庫管理系統)設計範式基礎概念 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。 目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科 ...


資料庫的結構(3種):層次,網狀,關係型(用的最多);

DBMS的三層模型:
    視圖層;面向最終用戶;
    邏輯層;面向程式員或DBA;
    物理層;面向系統管理員;

關係型資料庫管理系統——RDBMS:
    主要的組成部分是表;表是由行(實例,實體,記錄)和列(欄位,域)組成;

關係型資料庫管理系統的實現:
    商業方案:Oracle,Sybase{為微軟提供了思路出現SQL-server},Infomix{IBM收購},DB2{IBM}
    開源方案:PostgreSQL,mysql,MariaDB

SQL:Structured Query Language,結構化查詢語言;
ANSI(美國國家標準協會): 1986年定義SQL系列標準,89年實施:
    SQL-86(草案)、SQL-89、SQL-92、SQL-99、SQL-2003(現在使用的標準)

關於{RDBMS(關係型資料庫管理系統)設計範式基礎概念

設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。

目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫只需滿足第三範式(3NF)就行了。

  (1) 第一範式(1NF)

      所謂第一範式(1NF)是指在關係模型中,對域添加的一個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一範式(1NF)表中的每個域值只能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重覆的域。

      說明:在任何一個關係資料庫中,第一範式(1NF)是對關係模式的設計基本要求,一般設計中都必須滿足第一範式(1NF)。不過有些關係模型中突破了1NF的限制,這種稱為非1NF的關係模型。換句話說,是否必須滿足1NF的最低要求,主要依賴於所使用的關係模型。

  (2) 第二範式(2NF)

      第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或記錄必須可以被唯一地區分。選取一個能區分每個實體的屬性或屬性組,作為實體的唯一標識。

      第二範式(2NF)要求實體的屬性完全依賴於主關鍵字(主鍵)。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。簡而言之,第二範式就是在第一範式的基礎上屬性完全依賴於主鍵。

  (3) 第三範式(3NF)

      第三範式(3NF)是第二範式(2NF)的一個子集,即滿足第三範式(3NF)必須滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個關係中不能包含已在其它關係已包含的非主關鍵字信息。簡而言之,第三範式就是屬性不依賴於其它非主屬性,也就是在滿足2NF的基礎上,任何非主屬性不得傳遞依賴於主屬性。

}

NoSQL:Not-Only SQL,反關係型資料庫;         //針對關係型資料庫提出
    Memcached、Redis:鍵入值,並將數據存儲在記憶體中,查詢效率極高
    MangoDB:完成資料庫切片
    Hbase:配合大數據,文檔型資料庫用來存放大型數據

MySQL:http://www.mysql.com
MariaDB:http://mariadb.org  主流的發行版本有兩個:5.5.x 和 10.x.y
Percona XtraDB/MySQL:https://www.percona.com

MySQL/MariaDB:
C/S架構,客戶端/伺服器架構形式:
客戶端工具:
命令行工具:mysql, mysqladmin, mysqldump, ...
圖形工具:phpMyAdmin, SQLyog, navicot, ... 
伺服器端程式:
mysqld_safe(預設)、msyqld、mysqld_multi

客戶端到伺服器端的連接方式:
    1.客戶端和伺服器端在同一臺主機上:
        1) Unix Socket
        2) IPv4 Socket
        3) IPv6 Socket
    2.客戶端和伺服器端分別在不同主機上:
        1) IPv4 Socket
        2) IPv6 Socket

關係型資料庫管理系統:
數據模型:關係模型,這裡說的是二維關係
1.表:為了滿足範式的設計要求,將一個數據集拆分成多個; //在一個表中,可以沒有任何一行,但至少保證有一列;
行:row(實例,實體,記錄); //記錄數據的特征;
列:column(欄位,域); //記錄數據的某種屬性;
2.視圖:view,虛表;包含已知表中的部分列;
3.索引:index,將表中的某一個或某些欄位抽取出來,單獨將其組織成一個獨特的數據結構,以便於提高數據檢索效率;
支持B-tree(平衡樹)索引{預設使用的索引方式}、hash(哈希)索引、空間索引

如果伺服器端的應用程式想要訪問資料庫,就要有訪問資料庫的能力,應用程式就需要一個SQL介面,使用SQL語句通過SQL介面發送給資料庫管理系統,從而管理資料庫。資料庫管理系統需要通過存儲引擎來存儲或刪除存儲設備中的文件。
SQL介面:計劃執行器,分析器,操作求解器,優化器;
    提供了一種能夠跟資料庫管理系統做互動式操作的介面(1),類似於shell;也可以提供編程功能(2);
        (1)互動式介面功能:通過SQL介面處理SQL語句;
                DDL:Data Definition Language,數據定義語言:CREATE,ALTER,DROP
                DML:Data Manipulation Language,數據操縱語言:INSERT,DELETE,UPDATE,SELECT
                DCL:Data Control Language,數據控制語言:GRANT,REVOKE
        (2)編程功能:變數,函數,迴圈,選擇;
                存儲過程:Procedure,使用CALL語句調用;
                存儲函數:Function,使用SELECT語句調用;
                觸發器(類似條件選擇):Trigger;
                事件調度器(Event Schedule);基於事件的條件選擇,類似於觸發器但基於事件
                常式:Routine,過程 + 函數

**事務**:Transaction,組織多個操作為一個整體,這個整體所包含的所有操作,要麼全部都執行,要麼全部不執行;只要有任何操作沒有被成功執行,則整個事務回滾(Rollback);
    在MySQL中,事務是存儲引擎的屬性;是否支持事務的判斷標準,即:ACID標準(事務四大特性);
        A:Atomicity,原子性(不可分割);
        C:consistency,一致性(執行開始的狀態和結束的結果保持一致);
        I:Isolation,隔離性(加鎖,多個事務分隔開來不能同時進行);
        D:Durability,持久性(對數據修改結果要不發生變化);

**約束**:Constraint,向數據表中插入的數據必須遵守的限制規則(範式);
    (1.主鍵約束:
        主鍵:一個或多個欄位構建的能夠唯一標識記錄的組合;
        主鍵約束:填入主鍵的數據,必須不能和已經填寫的數據相同,而且不能為空;
    (2.外鍵約束:也稱為"引用性約束";
        外鍵:一個表中的某個欄位和其他表中的欄位表達的意義相同;
        外鍵約束:一個表中的某個欄位能插入的數據,取決於另一個表的主鍵中包含的數據;
    (3.唯一鍵約束:
        唯一鍵:一個或多個欄位構建的能夠唯一標識記錄的組合;
        唯一鍵約束:填入唯一鍵的數據,必須不能和已經填寫的數據相同,但可以為空;
    (4.檢查性約束:
        也稱為"表達式約束";取決於表達式的書寫規範;

關係運算:
    選擇:根據指定的條件挑選出符合條件的行;
    投影:根據指定的條件挑選出符合條件的列;
    連接(具有多種連接方式):多表的關聯操作;

**數據抽象分佈:**
    物理層(最底層):決定數據的存儲格式,即:如何將數據組織成物理文件;
    邏輯抽象層(中間層:存儲引擎,用來上下兩個層次的銜接轉換):描述了資料庫存儲什麼樣的數據,以及數據之間存在怎樣的關係;
    視圖層(最頂層):描述了資料庫中全部或部分數據,以表的形式進行展示;

關係模型的分類:關係模型、實體-關係模型(E-R模型)、基於對象的關係模型、半結構化的關係模型:XML

MySQL和MariaDB:
共同點:
1.都支持插件式的存儲引擎(把存儲引擎當做功能模塊來使用); //存儲引擎就是表類型;
2.MySQL/MariaDB服務埠號:3306/TCP

MariaDB的特性:
    1.相對於MySQL而言,可以包含更多的存儲引擎;
        1)MyISAM:檢索高效但是不支持事務;
                Aria:增強版的MyISAM,改善了MyISAM中的崩潰處理機制;
        2)InnoDB:支持事務;行級鎖;
                Percona-XtraDB:增強版的InnoDB;
    2.諸多的擴展和新特性;
    3.提供了非常多的測試組件;
    4.Truly Open Source(MariaDB的發行機制:真正開源)

MySQL的發行機制(2種):
    Enterprise:企業版,提供了豐富的組件和功能;如:線程池,強大的可視化監控組件等;
    Community:社區版,只有簡單的資料庫功能

安裝MySQL或MariaDB:
1.基於包管理器格式的程式包直接安裝,如:rpm包,deb包等;
1) OS發行商在光碟鏡像中提供; //版本比較老舊
2) 由程式官方提供;
2.官方提供的通用二進位程式包;直接解壓縮程式包即可使用;
3.源代碼包:編譯安裝之前,需要先編譯安裝cmake

安裝命令:
    CentOS 6:yum install mysql-server
    CentOS 7:yum install mariadb-server

MySQL的程式環境:
    伺服器端程式:mysql-server(CentOS6), mariadb-server(CentOS7)
        服務啟動腳本:
            /etc/rc.d/init.d/mysqld
        常用的二進位文件:
            /usr/bin/mysql_install_db            //做資料庫的初始化安裝
            /usr/bin/mysql_secure_installation   //做安全初始化安裝;對使用的管理員用戶做密碼設置,預設是空密碼;刪除空用戶和空數據表;只允許root用戶本地登錄不允許遠程登錄
            /usr/bin/mysqld_multi          //多實例啟動mysql,可以一次啟動多個mysql進程,不同的進程監聽不同的埠號
            /usr/bin/mysqld_safe          //預設啟動safe選項,安全服務進程
        數據目錄:
            /var/lib/mysql          //預設的初始化資料庫目錄,未初始化之前目錄中沒有內容
        主配置文件:
            /etc/my.cnf       

    客戶端程式:mysql, mariadb
        常用的二進位文件:
            /usr/bin/mysql         //客戶端連接工具
            /usr/bin/mysqladmin    //非互動式的資料庫管理工具
            /usr/bin/mysqlbinlog   //二進位日誌的查看和管理工具
            /usr/bin/mysqldump     //溫備份工具

主配置文件:/etc/my.cnf
    ini風格的配置文件:在整個配置文件中,以"[]"劃分成多個配置段,每個配置指令僅針對於其上方直接歸屬的"[]"中表示的組件生效;

        在mariadb版本中/etc/my.cnf中添加:
            innodb_file_per_table = ON   //打開對創建或刪除表的影響,主要是刪除InnoDB存儲引擎的表耗用時間應該更長
            skip_name-resolve = ON     //跳過名稱解析,不做名稱反解
        保存後重啟服務(MariaDB版本一般在CentOS7中):systemctl restart mariadb.service   //如果重啟不成功,使用 rm -rf /var/lib/mysql/*文件內容清空,因為有其他資料庫內容,不能重啟資料庫

使用rpm包安裝的mysql或mariadb的預設配置文件載入順序:
    /etc/mysql/my.cnf (預設文件不存在)--> /etc/my.cnf(一般預設先載入) --> ~/.my.cnf        //後載入的配置項會覆蓋先前配置項,越靠後的文件生效越優先

            在使用mysqld_safe命令啟動mysqld服務進程時,可以通過一些選項來更改或附加配置文件的讀取順序;
                -c, --defaults-file=name 
                          Like --config-file, except: if first option, then read
                          this file only, do not read global or per-user config
                          files; should be the first option
            如果在命令行中給出此選項,則此選項必須是第一個選項,此時,僅從此選項指定的配置文件中讀取參數值,不會再讀取任何其他的配置文件,包括全局的和個人的;

            -e, --defaults-extra-file=name 
                          Read this file after the global config file and before
                          the config file in the users home directory; should be
                          the first option
            如果在命令行中給出此選項,則此選項必須是第一個選項,此時,將所有其他的配置文件按照指定順序讀取完成之後,最後再附加讀取此選項指定的配置文件中參數值配置,只要有參數配置衝突,則必然以此選項指定的文件中的參數中為最終生效的參數值;

        配置文件的風格:
            ini風格的配置文件;即:分段式配置文件;
            為MySQL的各應用程式提供與之對應的配置參數信息:
                伺服器端應用程式:
                    [server]
                    socket=
                    datadir=
                    basedir=
                    [mysqld]
                    socket=
                    [mysqld_safe]
                    socket=
                    [mysqld_multi]

                客戶端應用程式:
                    [client]
                    user=
                    password=
                    host=
                    [mysql]
                    user=
                    password=
                    host=
                    [mysqladmin]
                    [mysqldump]

        配置文件中各參數的定義方法:
            PARAMETER_NAME = VALUE
            PARAMETER_NAME=VALUE
            PARAMETER_NAME

            innodb_file_per_table = ON
            innodb-file-per-table = ON
            defaults-file=/tmp/my.cnf
            defaults_file=/tmp/my.cnf

            skip_name_resolve=ON
            skip_name_resolve

**mysql相關基本命令:
    mysql命令 - 基本的互動式命令行客戶端工具;**
    格式:mysql [options] [db_name]
    常用選項:
        --database=db_name, -D db_name
            用於指定使用mysql客戶端程式連接到mysql伺服器之後,預設使用哪個資料庫;如果不給定該選項,預設為NULL;
        --execute=statement, -e statement
            連接至mysql伺服器並將後面的SQL語句交給伺服器運行之後返回執行結果並直接退出互動式登錄模式,返回bash命令提示符;
        --host=host_name, -h host_name
            用於指定此次mysql程式所連接的mysql伺服器的主機名稱或主機IP地址;預設是localhost(127.0.0.1);
        --user=user_name, -u user_name
            用於指定連接mysql伺服器時使用的用戶名;預設的用戶名為:'root'@'localhost'
                mysql的用戶名:USERNAME@HOSTNAME
                    USERNAME表示登錄的用戶名稱;
                    HOSTNAME表示用戶通過哪個特定的客戶端主機連接到mysql伺服器;
                    如:用戶'root'@'172.16.0.1':表示只有172.16.0.1主機可以通過root用戶連接至myslq伺服器;
                        HOSTNAME中可以使用通配符:
                            _:任意單個字元; 
                            %:任意長度的任意字元;
                        如:'root'@'172.16.%.%'
                            表示172.16.0.0/16網段中的所有主機都可以使用root用戶連接至mysql伺服器;
                        如:'root'@'172.16._.%'
                            表示172.16.0.0~172.16.9.255地址的主機都可以使用root用戶連接至mysql伺服器;

                    註意:預設情況下,所有用戶均為空密碼,並且還有匿名用戶存在,因此,為了增強安全性,可以使用mysql_secure_installation命令完成賬戶安全初始化;使得mysql伺服器僅能讓root用戶在本地登錄,並且移除匿名用戶和test資料庫;

        --password[=password], -p[password]
            用於指定連接mysql伺服器時,為對應用戶指定身份驗證所需密碼;如果密碼部分省略不寫,執行命令後需要在新行中給出密碼,這種方式相對更安全;

    mysql命令提示符下的互動式命令:
        客戶端命令:mysql程式自身完成或執行的命令,在客戶端所在地運行;
            clear     (\c):停止發送當前正在鍵入的命令或語句並直接返回提示符;
            delimiter (\d):設置語句結束標記;預設的語句結束標記為";";
            ego       (\G):將其前面的語句送往mysql伺服器運行,並將返回的結果縱線顯示;
            go        (\g):無需輸入語句結束標記,直接將其前面的語句送往伺服器執行;
            exit,quit (\q):退出mysql程式的互動式模式;
            status    (\s):獲取mysql伺服器的狀態信息;
            use       (\u):將指定的資料庫作為當前正在使用的資料庫;
            source    (\.):可以在mysql互動式模式中執行SQL腳本文件;
            ?,help    (\?):獲取客戶端命令的幫助信息;
        伺服器端命令:mysql客戶端程式通過mysql協議向mysql伺服器端發送的SQL語句;
            註意:在書寫伺服器端命令時,每個SQL語句都必須以指定的結束標記結尾,預設是";",修改結束標記的命令為:mysql >\d
                伺服器端命令代表的SQL語句,可以分為三類:
                    DDL:數據定義語言,主要用於管理資料庫及資料庫的各組件;
                        組件例如:資料庫,表,視圖,索引,用戶,存儲過程,存儲函數,觸發器,事件等;
                        常用的SQL語句:CREATE,DROP,ALTER,SHOW
                    DML:數據操縱語言,主要用於管理表中的數據,實現數據的增,刪,改,查等操作;
                        常用的SQL語句:INSERT,DELETE,UPDATE,SELECT
                    DCL:數據控制語言,主要用於管理數據訪問的授權;
                        常用的SQL語句:GRANT,REVOKE

                    獲取指定的SQL語句的幫助信息(所有的SQL語句本身,不區分字元大小寫;建議使用小寫字母書寫SQL語句);
                        mysql> help SQL_STATEMENT_KEYWORK    //mysql版本資料庫,一般在CentOS6及以前的版本中
                        MariaDB [(none)]> help SQL_STATEMENT_KEYWORK   //MariaDB版本資料庫,一般在CentOS7中使用的預設資料庫

                    在mysql中,database(資料庫)和schema(方案)這兩個單詞是一樣的;

利用mysql客戶端工具實現mysql資料庫的相關管理操作:
資料庫管理:
創建資料庫:
格式:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [ create_specification ]
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name 
| [DEFAULT] COLLATE [=] collation_name
示例:
創建一個名為mydb的資料庫並設定字元集是utf8:
mysql> create database mydb character set = utf8;

        欄位含義:
            DATABASE | SCHEMA:表示要創建的對象的類型為"資料庫"或"方案";
            IF NOT EXISTS:如果指定要創建的資料庫已經存在,則不報錯也不執行創建操作;
            db_name:要創建的資料庫的名稱;
            CHARACTER SET [=] | charset_name:為新創建的資料庫指定其預設的字元集;
                示例:mysql> show character set:查看mysql伺服器所支持的所有字元集及預設排序規則;
            COLLATE [=] | collation_name:
                為新創建的資料庫指定字元集的排序規則;
                示例:mysql> show collation:查看mysql伺服器上每種字元集所支持的所有的排序規則;

    修改資料庫的屬性(如果資料庫中已經有表,且表中已經插入數據時,更改資料庫的字元集和排序規則可能會導致已存數據的亂碼):
        ALTER {DATABASE | SCHEMA} [db_name] alter_specification ...   //要指定資料庫名稱,否則刪除所有存在的資料庫
            alter_specification:
                [DEFAULT] CHARACTER SET [=] charset_name :修改字元集
                | [DEFAULT] COLLATE [=] collation_name:修改字元集的排序規則

    刪除資料庫:
        DROP {DATABASE | SCHEMA} [IF EXISTS] db_name      //加上[IF EXISTS],刪除一個不存在的資料庫執行但不會報錯,如果不加[IF EXISTS]刪除一個不存在的資料庫會執行然後報錯,*一定要指定資料庫名稱,否則或刪除所有庫*

表管理(關係型資料庫的核心,數據都存儲於表中):
    表:二維表,包括行和列;
        行(實體,實例,記錄):用來描述某個具體事物的某些屬性;對於表來說,表中可以沒有任何一行數據,此類表稱為"空表";
        列(欄位,域):用來定義或描述某個具體的屬性的格式或定義方式;對於表來說,沒有列的表是無意義的,表中至少要有一列;

            數據類型:
                定義數據類型的意義:
                    1.決定數據的存儲格式;
                    2.決定數據所能參與的運算;
                    3.決定數據可以表示的有效範圍;

                對於mysql來說,支持的數據類型:
                    數值型:
                        精確數值型:
                            MySQL數據類型    括弧中m的值(bits)   有符號範圍                                       無符號範圍
                            tinyint(m)          1個位元組            (-128~127)                                       (0~256)
                            smallint(m)         2個位元組                        (-32768~32767)                              (0~65536)   
                            mediumint(m)        3個位元組                        (-8388608~8388607)                      (0~1677216)
                            int(m)                  4個位元組                        (-2147483648~2147483647)            (0~2147483648*2)
                            bigint(m)               8個位元組                        (+-(9.22*10)^18)                            (0~((9.22*10)^18)*2)

                            是否有符號,可以在定義時規定,預設為有符號,可以用unsigned標識來表示無符號
                            通過規定數據的顯示寬度,達到統一顯示的目的。
                            註意定義格式:alter table tbl_int add c tinyint(2) zerofill;    //需要使用前導零來填充以達到目的:zerofill;其中若數大於顯示寬度,則直接顯示原數字

                        近似數值型:
                            FLOAT:單精度浮點數
                                示例:一個欄位定義為float(5,3),如果插入一個數123.45678,實際資料庫里存的是123.457,但總個數還以實際為準,即6位
                            DOUBLE:雙精度浮點數

                    字元串型:
                        變長字元型:
                            VARCHAR(length):字元不區分大小寫;最大存放65536個字元;
                                VARCHAR(30)
                                    chenliang$ -- 字元只占了VARCHAR總空間30位元組大小中的10位元組,末尾的$用來表示字元結束並將字元占用VARCHAR空間大小+1,如果空間已滿則不顯示$
                            VARBINARY(length):字元區分大小寫;最大存放65536個字元;
                        定長字元型
                            CHAR(length):字元不區分大小寫;256個字元;
                                CHAR(30)
                                    chenliang -- 字元雖然只占了9位元組存儲空間,但是必須要占用30位元組的空間
                            BINARY(length):字元區分大小寫;256個字元;

                    對象存儲類型(大型的數據用於存儲文本塊或圖像、聲音文件等二進位數據類型,比指定類型支持的最大範圍大的值將被自動截短):
                        TEXT:存儲大量的純文本信息;
                            TINYTEXT:可最大存放256位元組
                            TEXT:可最大存放65536位元組
                            MEDIUMTEXT:可最大存放16777736位元組
                            LONGTEXT:可最大存放43億9千萬位元組
                        BLOB:存儲非純文本信息經過流式化處理之後的二進位數據;
                            TINYBLOB:可最大存放256位元組
                            BLOB:可最大存放65536位元組
                            MEDIUMBLOB:可最大存放16777736位元組
                            LONGBLOB:可最大存放43億9千萬位元組

                    日期時間型:
                        類型          名稱              大小(位元組)           格式   
                        DATE        日期型                     3           YYYY-MM-DD
                        TIME        時間型                 3                     HH:MM:SS
                        TIMESTAMP 時間戳類型             8         YYYYMMDD HHMMSS
                        DATETIME  日期時間型         8       YYYY-MM-DD HH:MM:SS
                        YEAR            年份           2/4            YY/YYYY

                    內置特殊類型:
                        集合類型:
                            SET:集合,插入的數據可以是集合中各個元素的任意組合;
                                SET('a','b','c','d')
                                    a
                                    aa
                                    aab
                                    abdc
                        枚舉類型:
                            ENUM:枚舉,只能存放列舉出來的固定的字元或字元串;
                                ENUM('F','M')
                                    F
                                    M

                數據類型相關的修飾符:
                    與整數類型相關的:
                        UNSIGNED,無符號整數;   //UNSIGNED修飾符必須緊跟在精確數值類型標識符之後;
                        AUTO_INCREMENT [=] Value:
                            整型數據的自動遞增或自動遞減;
                    通用修飾符:
                        NOT NULL:非空約束;一般是為主鍵做約束;
                        DEFAULT Value:為欄位設置預設值;

    創建表:
        CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] 
            create_definition(創建定義項):表中各個列是怎麼定義的,列的格式,列的類型
                col_name :列的名稱
                 格式:data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}] [STORAGE {DISK|MEMORY|DEFAULT}] [reference_definition]
                        選項:
                            data_type [NOT NULL | NULL]:數據類型 [不為空|空]
                            [DEFAULT default_value]:是否設置預設值為多少
                            [AUTO_INCREMENT]:預設自動增長步長為1
                            [UNIQUE [KEY]:定義唯一鍵
                            [PRIMARY] KEY]:定義主鍵
                            [COMMENT 'string']:定義註釋內容
                            [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]:列的格式{靜態|動態|預設格式}
                            [STORAGE {DISK|MEMORY|DEFAULT}]:存儲方式{磁碟|記憶體|預設位置}
            table_options:表選項
                ENGINE [=] engine_name | AUTO_INCREMENT [=] value

        示例:
            mysql> create table stu_info (SID tinyint unsigned not null auto_increment primary key,SName varchar(50) not null,SAge tinyint unsigned,Gender enum('F','M'));

        顯示表的結構:mysql> desc stu_info;
        顯示創建表的SQL語句:mysql> show create table stu_info;

    刪除表:
        DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
        示例:mysql> drop table stu_info;

    修改表:修改表的各個欄位的屬性和定義的內容;
        ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]
        增加表的欄位:
            ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
                示例:mysql> alter table stu_info add Stel_num varchar(20) not null after SAge;
        修改表的欄位屬性
            CHANGE [COLUMN] old_col_name new_col_name column_definition  [FIRST|AFTER col_name]
            MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
                示例:
                    mysql> alter table stu_info change column Stel_num SMobile char(11) not null after Gender;
                    mysql> alter table stu_info modify SAge tinyint unsigned after Gender;
        刪除表的欄位:
            DROP [COLUMN] col_name       //刪除欄位的操作可能會引起數據的變化,所以,刪除欄位時要慎重;
                示例:mysql> alter table stu_info drop SMobile;

數據管理:實質上就是管理表中的數據;
    向表中添加數據:
        INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...         //如果列名(col_name,...)省略不寫,則預設表示為為表的每一列添加數據
        Or:
        INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ... 

        示例:
            mysql> insert into stu_info values (1,'tom','M',25),(2,'jerry','F',28);
            mysql> insert into stu_info (SName) values ('Alice'),('James');
            mysql> insert into stu_info set SName='zhangsan',Gender='M',SAge=20;
        註意:
            1.如果向表中插入的value是字元串,則value必須使用引號引用;
            2.如果向表中插入的value是數字,則value一定不能用引號引用;

    查看表中的數據內容:
        SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition]

        1.顯示整張表:
            SELECT * FROM tbl_name;
        2.投影:顯示指定的或符合要求的列;
            SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name;
            示例:mysql> select Host as Hostname,User as Username,Password as Pass from user;

        3.選擇:顯示符合要求或匹配條件的行;
            SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition;

            WHERE子句用於指明選擇時依據的條件:
                col_name 操作符 value

                操作符:
                    1) 比較操作符:>, <, >=, <=, ==, !=
                    2) 邏輯操作符:與:and,或:or,非:not
                    3) 特殊操作符:
                        BETWEEN...AND...
                        LIKE "PATTERN",其中"PATTERN"中可以適當添加通配符,如:%或_;
                        RLIKE "PATTERN",使用正則表達式對字元串進行模式匹配;在使用RLIKE進行數據檢索時,索引不生效,檢索效率低,速度慢,不推薦使用;
                        IS NULL或IS NOT NULL:判斷指定欄位是否為空;

                示例:
                    mysql> select * from stu_info where SAge >= 30;
                    mysql> select * from stu_info where SAge >= 10 and SAge <=30;
                    mysql> select * from stu_info where SAge between 10 and 30;
                    mysql> select * from stu_info where Gender is [not] null;
                    mysql> select * from stu_info where SName like '%a%';
                    mysql> select * from stu_info where SName rlike '^j';
                    mysql> select * from stu_info where SName rlike 'e$';

        4.排序:
            SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition [ORDER BY {col_name | expr | position} [ASC | DESC], ...]

                示例:
                    mysql> select * from stu_info order by SAge; 預設升序排序;
                    mysql> select * from stu_info order by SAge desc; 降序排序;  //末尾加desc,表示降序

    修改表數據內容:
        UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
        示例:
            mysql> update stu_info set SName='Obama' where SID=5;
            mysql> update stu_info set SAge=SAge+1;
            mysql> update stu_info set SAge=SAge+100 where SID in (1,3,5,7);

        註意:修改數據時,一定要考慮清楚是否要添加where條件子句;如果不寫where子句,預設修改全表;

    刪除表數據:
        DELETE FROM tbl_name  [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
        示例:
            mysql> delete from stu_info where SID > 3;
            mysql> delete from stu_info;
        註意:在使用UPDATE和DELETE語句時,除非必要,否則一定要使用WHERE子句或ORDER BY + LIMIT子句來限制要操作的數據;否則即為全表操作;

    mysqladmin命令:
        mysqladmin - client for administering a MySQL server
            常用選項:
                -u, -h, -p, -P, -D, -S
                各選項功能同mysql命令的選項功能;

            常用子命令:
                create db_name:創建資料庫;
                drop db_name:刪除資料庫;
                flush-hosts:清除伺服器緩存中所有信息;
                flush-logs:清除日誌,讓日誌滾動;
                flush-privileges:刷新授權表;
                flush-tables:為表加鎖;
                password new-password:為指定的用戶設置新密碼;
                start-slave:在msyql的集群服務中的從節點啟動用於實施複製功能的線程;
                stop-slave:在msyql的集群服務中的從節點關閉用於實施複製功能的線程;
                shutdown:停止服務;

    mysqld_safe命令:用於啟動mysql服務,定義mysql的工作特性;
        格式:/usr/bin/mysqld_safe [OPTIONS]
            註意:所有給出的 OPTION(--option)都是一次性生效;如果期望配置參數永久有效,需要將此類配置參數及參數值直接定義在配置文件中即可;

            伺服器運行時變數/伺服器運行時參數:MySQL的運行工作特性;這裡特性有兩種:
                1.全局特性:
                    在全局範圍均有效的伺服器參數所配置定義的工作特性;將會作為每個mysql的會話連接的預設特性參數;

                2.會話特性:
                    僅針對於本次mysql的連接會話生效的特性參數;

                查看已經生效的mysql運行參數(特性,變數)
                    SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]

                    示例:
                        show  [global] variables like '%innodb%';
                            查看所有名字中包含innodb字樣的伺服器參數及參數值;可以一次顯示多個;

                        show [global] variables like 'innodb_file_per_table';
                            僅查看指定名稱的伺服器參數的參數值;

                        select @@[global.]innodb_file_per_table;
                            僅查看指定名稱的伺服器參數的參數值;

            伺服器狀態參數/伺服器狀態變數:MySQL工作時的統計信息;有兩種狀態參數:
                1.全局
                2.會話

                查看與狀態及統計信息相關的參數/變數的值;
                    SHOW [GLOBAL | SESSION] STATUS [like_or_where]

                    示例:
                        show [global] status like '%innodb%';
                            查看所有名字中包含innodb字樣的伺服器狀態參數及其值;可以一次顯示多個;

                        show [global] staus like 'Com_select';
                            僅查看指定名稱的伺服器狀態參數的值;

            伺服器變數/伺服器參數的修改或調整方法:
                1.運行時修改:
                    MariaDB [(none)]> SET [GLOBAL|SESSION] system_var_name = expr;
                    MariaDB [(none)]> SET @@[GLOBAL.|SESSION.]system_var_name = expr;

                    示例:
                        set global innodb_file_per_table=1;
                        set @@global.innodb_file_per_table=0;

                2.永久修改:
                    通過在配置文件中直接書寫伺服器參數或變數的賦值語句;重啟服務即可生效;
                    innodb_file_per_table = ON

    mysql_secure_installation:安全初始化腳本;

**MySQL的用戶和許可權管理:**
    用戶賬號:
        'Username'@'Hostname'

        skip_name_resolve = ON
        'user'@'172.16.0.1'

        'user'@'a.qhdlink.com'
        skip_name_resolve = OFF
        Client_IP --> Client_Hostname

    在MySQL上能夠實施的用戶賬戶的管理操作:
        CREATE USER
        DROP USER
        GRANT
        RENAME USER
        REVOKE
        SET PASSWORD

    MySQL中的許可權類別:管理類;程式類;庫級別;表級別;欄位級別;

        管理類的許可權:
            CREATE USER
            DROP USER
            RELOAD
            LOCK TABLES
            REPLICATION CLIENT
            REPLICATION SLAVE
            SHUTDOWN
            FILE
            SHOW DATABASES
            PROCESS
            SUPER

        程式類的許可權:
            FUNCTION
            PROCEDURE
            TRIGGER

            操作:CREATE,ALTER,DROP,EXECUTE

        庫級別和表級別的許可權:
            CREATE
            ALTER
            SHOW
            DROP

            INDEX

            CREATE VIEW
            SHOW VIEW

            GRANT OPTION:能夠將管理員自身獲得的許可權生成一個副本,並轉贈給目標用戶;

        表級別的數據操作的許可權:
            INSERT
            REPLACE
            DELETE
            UPDATE
            SELECT

        欄位級別(列級別)的數據操作的許可權:
            SELECT(col1,col2,...)
            UPDATE(col1,col2,...)
            INSERT(col1,col2,...)

        所有的許可權:
            ALL
            ALL PRIVILEGES

        MySQL的元數據資料庫:mysql
            數據字典資料庫;
                host
                db
                user

                column_priv
                procs_priv
                proxies_prive
                tables_priv

                上述元數據資料庫中的表統稱為"授權表";

                如果對於授權表的內容進行了修改,MySQL每300秒會自動重讀並使新設置生效;

                如果不打算等待,可以手動刷新授權表:
                    MariaDB [mysql]> FLUSH PRIVILEGES;

    MySQL用戶管理:
        'Username'@'Hostname'

        Username:任意的字元串組合,只能包含基本意義的字元;可以包含"_"、"."、"-";
        Hostname:
            FDQN
            Domain_name
            IP_ADDRESS

            可以使用MySQL的專用通配符:%, _

            skip_name_resolve={ON|OFF}

        創建用戶賬戶:
            CREATE USER語句:

            CREATE USER user [IDENTIFIED BY [PASSWORD] 'password' | IDENTIFIED WITH auth_plugin [AS 'auth_string']]

            示例:
                MariaDB [mysql]> create user 'testuser'@'%';
                MariaDB [mysql]> create user 'testuser'@'%' identified by 'qhdlink';

            也可以使用DML語句創建用戶賬戶:
                INSERT INTO mysql.user SET User='testuser',Host='%',Password=PASSWORD('qhdlink');

                示例:
                    MariaDB [mysql]> insert into user set User='user1',Host='%',Password=PASSWORD('qhdlink'),ssl_cipher='',x509_issuer='',x509_subject='',authentication_string='';

        重命名用戶賬戶:
            RENAME USER語句:

            RENAME USER old_user TO new_user [, old_user TO new_user] ...

            示例:
                MariaDB [mysql]> rename user 'testuser'@'%' to 'test'@'172.16.%.%';

            也可以使用DML語句重命名用戶賬戶:

                示例:
                    MariaDB [mysql]> update user set User='user01',Host='172.16.75.%' where User='user1';

        刪除用戶賬戶:
            DROP USER語句:

            DROP USER user [, user] ...

            示例:
                MariaDB [mysql]> drop user 'test'@'172.16.%.%';

            也可以使用DML語句刪除用戶賬戶:

                示例:
                    MariaDB [mysql]> delete from user where User='user01';

        用戶賬戶的密碼管理:
            1.SET PASSWORD語句:

                SET PASSWORD [FOR user] = { PASSWORD('cleartext password') | OLD_PASSWORD('cleartext password') | 'encrypted password' }

                示例:
                    MariaDB [mysql]> set password for 'test'@'%' = PASSWORD('qhdlink');

            2.也可以使用DML語句修改用戶賬戶密碼:

                示例:
                    MariaDB [mysql]> update user set Password=PASSWORD('qhdlink.com') where User='test';

            3.mysqladmin工具:
                # mysqladmin -uUSERNAME -hHOSTNAME -p password 'NEW_PASSWORD'

                註意:執行此操作的MySQL用戶需要對mysql.user表有修改許可權;

        忘記MySQL管理員的密碼的解決辦法:
            方法一:
                1.停止當前的MySQL或MariaDB服務;
                2. 在/etc/my.cnf文件中加入下列兩條伺服器參數:
                    skip-grant-tables = ON
                    skip-networking = ON
                3.啟動MySQL或MariaDB服務,使用mysql或mysqladmin客戶端工具以空秘密的root用戶登錄,進行root用戶的密碼修改;
                4.從/etc/my.cnf中刪除上述兩條伺服器參數,再重啟服務即可;

            方法二:
                1.停止當前的MySQL或MariaDB服務;
                2.使用命令啟動MySQL服務:
                    # mysqld_safe --skip-grant-tables --skip-networking
                3.啟動另一個會話連接,並使用mysql或mysqladmin客戶端工具以空密碼的root用戶的身份修改其密碼;
                4.kill掉此前的mysqld-safe及衍生的mysqld服務;
                5.再正常啟動服務即可;

    對於已經建立的用戶或未建立的用戶進行授權:
        GRANT語句:

        GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
        ON [object_type] priv_level
        TO user_specification [, user_specification] ...
        [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
        [WITH with_option ...]

        priv_type:
                SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN, FILE, SHOW DATABASES, PROCESS, SUPER

        object_type:
                TABLE | FUNCTION | PROCEDURE

            priv_level:
                * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name

                *:表示所有的資料庫;
                *.*:表示所有資料庫中的所有表對象;
                db_name.*:表示指定資料庫中的所有表對象;
                db_name.tbl_name:表示指定資料庫中的指定的表對象;
                tbl_name:表示當前正在使用的資料庫中的指定的表對象;
                db_name.routine_name:表示指定資料庫中的指定存儲函數後存儲過程對象;通常需要使用object_type參數共同決定;

            user_specification:
                user [ IDENTIFIED BY [PASSWORD] 'password' | IDENTIFIED WITH auth_plugin [AS 'auth_string' ] ]

        ssl_option:
                SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject'

            with_option:
                GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count

        示例:
            MariaDB [mysql]> grant all privileges on hellodb.* to 'test'@'%';
            MariaDB [mysql]> grant select,update on hellodb.students to 'test'@'%';
            MariaDB [mysql]> grant select(Name,Age,ClassID) on hellodb.students to 'test'@'%';

            也可以對某些基本表創建視圖之後,再對視圖進行用戶許可權授權:
                MariaDB [hellodb]> create view stu_base as select Name,Age,ClassID from students;
                MariaDB [hellodb]> grant all on hellodb.stu_base to 'test'@'%';

    取消授權/收回授權:
        REVOKE語句:

        REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
            ON [object_type] priv_level
            FROM user [, user] ...

        REVOKE ALL PRIVILEGES, GRANT OPTION
            FROM user [, user] ...

        示例:
            MariaDB [mysql]> revoke delete on hellodb.* from 'test'@'%';
            MariaDB [mysql]> revoke all on hellodb.students from 'test'@'%';
            MariaDB [mysql]> revoke select(Age,ClassID) on hellodb.students from 'test'@'%';

        註意:在取消已經做出的授權時,REVOKE語句所指定的priv_level部分應該和授權時GRANT語句所指定的priv_level保持絕對一致;否則判定此次取消授權的操作失敗;

        示例:前提是testdb資料庫中包含有tb1和tb2兩張表;
            MariaDB [testdb]> grant all on testdb.* to 'test'@'%';
            MariaDB [testdb]> revoke all on testdb.tb2 from 'test'@'%';
            ERROR 1147 (42000): There is no such grant defined for user 'test' on host '%' on table 'tb2'

            正確的取回授權的方式:
            MariaDB [testdb]> revoke all on testdb.* from 'test'@'%';
            MariaDB [testdb]> grant all on testdb.tb1 to 'test'@'%';

            此時,'test'@'%'用戶就只有對testdb資料庫中tb2表有所有操作許可權;

    查看用戶的授權:
        SHOW GRANTS語句:
            SHOW GRANTS [FOR user]<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、運行容器 1、基於鏡像新建一個容器並啟動 指明瞭 -d 運行鏡像,會返回容器的 id;如果不指明 -d 運行鏡像,會列印出 catalina.out 的 日誌,在 [crtl +c] 後,容器即停止運行。 當利用 docker run 來創建容器時,Docker 在後臺運行的標準操作包括: -- ...
  • top命令命令用於實時監測系統資源使用狀況,包含,進程、cpu,記憶體等 1、用法 top [選項] 2、命令選項 -b 以批處理模式操作-c 顯示完整的治命令-d 屏幕刷新間隔時間-I 忽略失效過程-s 保密模式-S 累積模式-i<時間> 設置刷新間隔時間-u<用戶名> 指定用戶名-p<進程號> 指 ...
  • 第1章 Linux啟動過程 開機自檢(BIOS)##硬體檢查 MBR引導 GRUB菜單(選擇不同的內核) 載入內核 運行init進程(Linux系統裡面第一個進程) 讀取/etc/inittab配置文件(讀取運行級別) 執行/etc/rc.d/sysinit腳本(系統的初始化腳本 設置IP地址) 執 ...
  • 1、下載zxing源碼 git clone https://github.com/15903016222/zxing-cpp.git 2、安裝依賴工具cmake sudo apt-get install cmake cmake-qt-gui 在此安裝中需要使用3.0以上版本的cmake工具,而ubu ...
  • 簡介DNS是用來名字解析的,名字解析成IP地址,IP地址解析成名字,正反操作,有伺服器端和客戶端即 S/CDNS是應用層協議,基於UDP/53、TCP/53埠,缺一不可分為正向解析和反向解析/遞歸查詢、迭代查詢註意:正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹名稱解析:主機名解析把一種名稱轉... ...
  • 最近使用 iDrac 和 iLO 總是會使用到 .jnlp 文件, 為了方便,今天把設置過程記錄下來。 JNLP 文件,全名為 Java Network Launching Protocol 文件, 我們需要 javaws 命令去執行它。 在 fedora 中 ,我們需要安裝 相應的 rpm 包,y ...
  • 基於centos7靜默安裝oracle 11gr2單實例資料庫 ...
  • 在開始博客之前,還是同樣的給一個大概的目錄結構,實則即為一般MySQL的優化步驟 1、查看SQL的執行頻率 使用show status命令 2、定位哪些需要優化的SQL 通過慢查詢記錄+show processlist命令查看當前線程 3、分析為什麼SQL執行效率低 使用explain/desc命令 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...