MySQL簡介

来源:http://www.cnblogs.com/tonghun/archive/2017/07/16/7191131.html
-Advertisement-
Play Games

一 資料庫常用操作 mysql -u+username -p+password:登陸資料庫管理系統,如mysql -uroot -p123。 create database dbName:創建資料庫。 drop database dbName:刪除資料庫。 use dbName:使用指定資料庫,因為 ...


 

一 資料庫常用操作

  • mysql -u+username -p+password:登陸資料庫管理系統,如mysql -uroot -p123。
  • create database dbName:創建資料庫。
  • drop database dbName:刪除資料庫。
  • use dbName:使用指定資料庫,因為資料庫管理系統中可能存在多個資料庫,通過名稱使用指定的資料庫。
  • show databases:展示資料庫管理系統中全部資料庫。
  • select database():顯示正在使用的資料庫。
  • set character_set_results=gbk:很多資料庫不支持中文,設置編碼方式,使中文正常顯示,主要用於解決在DOS視窗中顯示查詢結果時中文亂碼的問題。
  • source+path(.sql文件路徑):導入資料庫文件,生成資料庫,即根據sql腳本生成資料庫。
  • mysqldump mydatabase>保存目錄 -uroot -p123:將資料庫的全部信息保存到硬碟中的.sql腳本文件中,由於已經指定用戶名與密碼,所以在不進入資料庫的情況下操作(語句結尾不加分號)。
  • create user username identified by 'password':創建指定名稱與密碼的用戶,允許該用戶訪問資料庫。
  • drop user username"%":刪除用戶。

二 表常用操作

  • create table tableName(columnName type(length)):創建資料庫。
  • drop table tableName:刪除資料庫。
  • alter table tableName add XXXX:向資料庫中增加欄位。
  • alter table tableName drop columnName:刪除欄位。
  • alter table tableName change oldName newName XXXX:覆蓋欄位。
  • alter table tableName modify columnName XXXX:修改欄位屬性。
  • create table copyTable as select columnName/* from oldTable:複製表,可以複製全部欄位,也可以複製部分欄位。
  • mysqldump mydatabase mytable>保存目錄 -uroot -p123:將資料庫中的某一張表中的全部信息保存到硬碟中的.sql腳本文件中,註意:資料庫與表之間用分號隔開,形成兩個字元,一個代表資料庫,一個代表資料庫中的表,如果用"."連接,會被當做一個字元,即資料庫,因為系統中不存在該名稱的資料庫,運行時產生錯誤。
  • select@@identity:獲取剛剛插入的數據的id。

三 SQL語言分類

1.DDL

Data Definition Language,數據定義語言,create/alter/drop。
create:用於資料庫與表的創建。
alter:用於表的修改。

  • alter table tbName add XXXX:向表中添加欄位,或者為欄位增加約束。
  • alter table tbName mofify XXXX:修改欄位。
  • alter table tbName drop XXXX:刪除欄位或者約束。

drop:用於刪除資料庫、表、欄位、欄位約束。

2.DML

Data Manipulation Language,數據操縱語言,update/delete/insert。

3.DQL

Data Query Language,數據查詢語言,select。

4.TCL

Transaction Control Language,事務控制語言,commit/rollback。

5.DCL

Data Control Language,數據控制語言,控制訪問資料庫的許可權,grant/revoke。 

四 DQL語句構成

select columnName from tbName where 過濾條件 group by 分組欄位 having 分組後過濾條件 order by 排序欄位 limit;

1.執行順序

from——where——group by——having——select——order by ——limit
  1. from:進入表
  2. where:對直接從資料庫獲取的數據即原始數據進行過濾。
  3. group by:後面跟用作分組的欄位,可以是單一欄位,也可以是組合欄位。分組以後,對各組數據分別進行處理,“select 分組欄位,分組處理函數”,select加其他欄位,將隨機生成,毫無意義;
  4. having:對分組後的組進行過濾,保留或者刪除某些組,不是對組內數據的處理,所以過濾條件中只能使用分組函數返回的欄位,一個能反映組的特性的欄位。
  5. select:獲取數據。
  6. order by:排序,asc升序,desc降序。排序欄位可以有多個,首先按照前面的欄位排序,再按照後面的欄位排序。
  7. limit:截取查詢結果,limit n--從0到n的數據,不包括第n條;limit begin,length--從指定的起點截取指定長度的數據,常用於分頁。

2.where與having區別

where用於在分組前過濾從資料庫中獲得的原始數據,結果是刪除某些行,保留某些行,是針對行的操作;having用於在分組後對組進行過濾,結果是刪除某些組,保留某些組,是針對組的操作。

3.重命名

select oldName (as) newName from table;

對查詢結果中的欄位重新命名,操作查詢結果必須使用新的名稱,不改變資料庫中的名稱。

4.自增自減

sql支持在現有欄位值基礎上進行操作自增自減操作,如 update tb_xxx set count=count+5 。

五 條件查詢

用在where語句中,對從資料庫獲得的原始數據進行過濾。

  • =:等於,可用於任何數據類型。
  • <:大於。
  • >:小於。
  • !=:不等於,另一種方式<>。
  • is null:為null。
  • is not null:非空。
  • and:並且,同時滿足兩個條件,and的優先順序高於or,在兩者同時存在的情況下先執行and。
  • or:或者,滿足其中一個條件即可。
  • between A and B:取值在某個連續區間內,A<=B。
  • in(list01,list02,...):取值在某個數據量有限的列表中。
  • not in(list01,list02):取值不在某個數據量有限的列表中。
  • like:模糊查詢,%代表0-n個字元,_代表一個字元,查找符合指定模板的字元。

六 數據處理函數

數據處理函數又叫做單行處理函數,用來處理單行數據,欄位名作為方法的參數。

  • Lower():將查詢結果全部轉化為小寫。
  • Upper():將查詢結構全部轉化為大寫。
  • trim():去除前導與後導空格。
  • substr(columnName,begin,length):截取查詢結果的一部分。
  • round():四捨五入。
  • rand():生成隨機數。
  • ifnull(columnName,defaultValue):如果查詢得到的數據為null,則賦一個預設值。

七 分組函數

分組函數又叫做多行處理行數,按照分組欄位,對每一組數據分別進行處理,每組數據輸出一條結果。分組行數自動忽略null。
分組函數不能使用在where子句中,如 select xxx from xxx where xxx>sum(xxx),因為分組函數只能在分組後使用。

  • sum():求和。
  • max():求最大值。
  • min():求最小值。
  • avg():求平均值。
  • count():獲得記錄總數,count(*)獲得包括null在內的全部記錄數,count(columnName)獲得指定欄位非null記錄數。

八 其他關鍵字

1.distinct

select distinct columnName01,columnName02 from table;

去除重覆指定欄位的重覆記錄,既可以是單個欄位,也可以是組合欄位。distinct前面不可以出現任何欄位,因為前面欄位的數據全部取出,後面的欄位去除了重覆記錄,導致兩個欄位記錄數不相等,產生衝突。

2.union

select columnName01,...from tbName01 union select columnName02,...from tbName02;

合併結果集,將兩次分別查詢的結果合併為一個結果,把後面欄位的查詢結果追加到前面對應位置欄位的查詢結果後面。

  • 前後查詢欄位的個數必須相同,無法合併。
  • 當前後對應位置的兩個欄位名稱不同時,合併後的結果採用前面的欄位名。

九 日期處理函數

1.通用性

由於不同資料庫處理日期的方式不一樣,為了提高數據的適用性,資料庫在存儲日期時通常採用字元串形式。

2.字元串轉化為日期

str_to_date(字元串,格式);

如果底層日期儲存採用的是date類型,而輸入的是字元串,那麼在將數據存儲到資料庫前需要將字元串轉化為date類型,而這一操作只是告訴系統將字元串轉化為date類型數據,並不能改變資料庫底層的儲存樣式。
date類型數據在資料庫統一採用"%Y-%d-%m %H-%i-%s"的存儲。

3.日期轉化為字元串

date_format(日期欄位,格式):

如果數據底層採用日期存儲格式,那麼在獲取日期以後可以改變查詢結果集中日期的格式。

4.預設格式

"%Y-%d-%m %H-%i-%s"

MySQL中date類型數據的預設格式,如果字元串符合該格式,插入或者查詢時被自動轉化為date類型。

5.日期對比

在SQL語句中,採用關係運算符><=比較日期類型數據。

十 表連接

1.背景

理論上將全部數據放到同一張表中很難實現,實際上即使實現了,表也很龐大,很冗雜,不便於查詢與維護,因此將不同的數據存放到不同的表中,需要時連接各表進行查詢。

2.連接條件

兩張表連接時,將其中一張表中的每行數據與另外一張表的全部數據進行對比,如果滿足給定的條件,則將這兩行數據合併為一行,否則捨棄,繼續對比剩餘行。

3.笛卡爾現象

如果表連接時未設置連接條件,那麼返回的查詢結果數目是兩張表行數的乘積,這種現象被叫做笛卡爾現象。

4.連接的幾種方式

⑴內連接

select t1.columnName01,t2.columnName02 from tbName01 t1(inner)join tbName02 t2 on 連接條件;
  • 兩張表進行連接查詢,如果只顯示匹配數據,那麼採用內連接的方式。
  • 為了指明欄位所屬的表,為每一張參與連接的表指定別名,通過別名調用其中的欄位。

 ⑵外連接

select t1.columnName01,t2.columnName02 from tbName01 t1 right/left (outer) join tbName02 t2 on 連接條件;

外連接將連接指向的一張表中的數據全部返回,另一種表對應欄位無匹配數據時用null填充。在外連接中使用left,左邊表的數據被全部取出;使用right,右邊表的數據被全部取出。

5.多張表連接查詢

一張表A與多張表連接查詢,表A與其他表分別進行連接,最終的結果是各個獨立連接查詢結果相同A表數據的組合,即將某一個連接查詢結果中的某一行A表欄位全部取出,如果其他連接查詢結果都具有該A欄位,則所有具有該欄位的行合併為一行。

6.別名

表連接查詢時通常通過表的別名來引用欄位,如果某個欄位只出現在一張表中可以省略別名。

十一 約束

1.約束類型

資料庫可以添加的約束有非空約束(not null)、唯一性約束(unique)、主鍵約束(primary key)、 外鍵約束(foreign key)。

2.unique

unique約束用來約束一個欄位不能有重覆數據,允許多行數據同時為null。

多個欄位可以聯合起來添加unique約束,只有在多個欄位對應數據均相同的情況下,才認為是重覆數據。

create tabletableName(columnName01,columnName02,unique(columnName01, columnName02));

3.primary key

資料庫中的重覆數據不僅對實際應用沒有意義,反而占用系統資源,使資料庫冗雜,操作緩慢,為了避免重覆數據 的出現,為表中的每一個行數據均設置一個唯一性標識,這個標識就是primary key。被設定為priamry key的欄位 不僅不可以為null,而且不可以重覆,但不等於同時設置了not null與unique,因為還為該欄位添加了索引index。

主鍵欄位的創建

create table tableName(id int(1) primary key auto_increment);
  • 其中auto_increment為是主鍵的生成 策略,表示主鍵的值自動生成。
  • MySQL並未實現主鍵生成策略sequence,可以藉助Hibernate框架實現。
  • 一張表中只能存在一個唯一性標識,即只能有一個主鍵。 
  • 按照取值性質不同,主鍵可以分為: 1.自然主鍵:主鍵值是自然數,主鍵與當前業務無關,同一行中其他數據的改變不會導致主鍵值的改變。 2.業務主鍵:主鍵值與業務相關,同一行中其他數據的改變可能導致主鍵的改變,一般主鍵不推薦設置成這種方式。
  • 主鍵可以由一個欄位構成,也可以由多個欄位聯合構成。在採用聯合主鍵的情況下,可能出現非主鍵欄位對主鍵 欄位的部分依賴,產生數據冗雜,違法資料庫設計第二範式,因此謹慎使用聯合主鍵。

4.foreign key    

⑴背景

如果一張表A的某個欄位引用另一張表B中的某個欄位,為了保證引用的正確,在A表中添加外鍵。

⑵外鍵欄位的創建

create table tbName(id int(1) primary key auto_increment,name varchar(10) not null,classNo int(1),foreign key(classNo) 
references 父表(父表中被引用欄位));
  • 在表創建完成以後,可以為表中欄位添加約束:alter table tbName add 約束定義形式。
  • 一張表可以有多個外鍵欄位,外鍵欄位可以為null。
  • 父表中被引用欄位數據不能重覆,必須有unique約束。

⑶級聯操作

為了保證子表中的數據跟隨父表的變化而變化,可以為外鍵添加級聯操作。
級聯關係是父表控制子表,使子表發生同樣的變化,不是子表控制父表,子表的變化不影響父表。不設置級聯操作時,父表被引用欄位被引用數據不能更改,外鍵欄位可以更改為父表中主鍵欄位的其他值。
級聯更新:

create table tbName(id int(1) primary key auto_increment,name varchar(10) not null,classNo int(1),foreign key(classNo) 
references 父表(父表中被引用欄位)on update cascade);

當父表中的數據更新時,子表中的數據做出同樣的更新。
級聯刪除:

create table tbName(id int(1) primary key auto_increment,name varchar(10) not null,classNo int(1),foreign key(classNo) 
references 父表(父表中被引用欄位)on delete cascade);

當父表中的數據被刪除時,子表中對應的數據也同樣被刪除。
同時為外鍵設置級聯更新與級聯刪除:

create table tbName(id int(1) primary key auto_increment,name varchar(10) not null,classNo int(1),foreign key(classNo) 
references 父表(父表中被引用欄位)on update cascade on delete cascade);

⑷刪除順序

由於子表依賴於父表,創建時先創建父表,刪除時先刪除子表。

⑸一對多關聯關係

典型的一對多關係,在多的一方添加外鍵,即A表中的多行數據對應B表中的一行數據,那麼在A表中添加外鍵,引用B表中的數據。

⑹約束名

可以使用“constraint name +約束定義形式”的格式,在表創建添加約束的同時,為約束設定名稱,以便後續操作。

⑺外部定義

在表定義外部,通過約束名稱刪除約束:

alter table tbName drop foreign key name;

⑻外鍵使用限制

設置外鍵後,需要同時維護兩張表,增加了資料庫負擔,降低了性能,因此儘量避免使用外鍵。

十二 索引

1.未使用索引時表的檢索方式?全盤檢索。

2.什麼是索引?

  • 索引是一種提高查詢效率的策略,對應於一個文件,文件中保存了索引欄位排序後的信息以及其他信息。
  • 索引相當於一本書的目錄,可以快速定位到一列數據中具有特定值的行。

3.索引適用的條件

  • 數據量較大。
  • 數據很少被DML語句操作,因為索引欄位發生改變,索引文件需要更新,降低了表的更新速度。
  • 索引欄位經常出現在where語句中。

4.可以為一張表中的多個欄位添加索引,多個索引有主次之分。

5.創建索引

create index indexName on tableName(columnName);

6.刪除索引

drop index indexName on tableName;

7.索引的創建與刪除格式不同與約束的格式,因為索引與約束是不同類型的屬性。

十三 事務

1.什麼是事務?

不可再分割的工作單元,保證多個DML語句同時有效或者同時無效。

2.事務操作基於記憶體

事務基於記憶體中的數據進行操作,每一步操作都會被保存到記憶體中,提交時將記憶體中的操作結果同步到資料庫,並且清空記憶體;回滾時刪除記憶體中的操作。在事務提交前,事務內部的每一步操作都會基於記憶體中的數據被執行,而不是在事務提交的一刻才全部執行,而是在事務提交前分步執行,事務提交時將執行結果寫入資料庫。可以概括為事務基於記憶體,分步執行。

3.特性(ACID)

  • A原子性:事務是一個最小的單元,不可再分。
  • C一致性:事務中的所有操作或者全部起作用,或者全部失效,不存在部分起作用,部分不起作用的情況。
  • I隔離性:事務之間相互隔離,彼此相互獨立。
  • D持久性:事務對資料庫的操作會反映到資料庫中。

4.關閉自動提交

MySQL在預設情況下自動提交事務,即每執行一句DML語句,就會同步到資料庫,關閉自動提交的兩種方式:

start transaction-- DML---commit,或者start transaction--DML--rollback;
set autocommit=off(on);

以上兩種方式只對當前會話有效。

5.隔離級別

  • read uncommitted:一個事務可以讀取另一個事務未提交的數據,這個數據被稱為臟數據。
  • read committed:其他事務頻繁地提交數據,另個事務(時間跨度大)在未提交之前多次讀取提交的數據,可能出現多次讀取的數據不一致。
  • repeatable read:事務首次從資料庫中讀取數據,然後將數據保存在記憶體中,以後不是從資料庫,而是從內存中讀取數據。這種隔離級別可能導致讀取的數據與資料庫中數據不一致,出現“幻想”。
  • serializable:一個事務操作完數據以後,其他事務才可以操作。

6設置隔離級別

  • set global transaction isolation level XXXX:對所用會話有效。
  • set session transaction isolation level XXXX:只對當前會話有效。

7.查看隔離級別

  • select@@tx_isolation: 查看當前會話的隔離級別,另一種方式 select@@session.tx_isolation。
  • select@@global.tx_isolation: 查看全局的事務隔離級別。

十四 行級鎖

1.什麼是行級鎖?

行級鎖是一個資料庫事務隔離方面的概念,為查詢到的數據加鎖,當前事務提交之前,不允許其他事務訪問鎖定的數據。

2.行級鎖實現

select ...for update;

在一般的DQL語句結尾添加“for update”,DQL語句查詢的欄位就被鎖,然後再在事務內部對鎖定的數據進行其他操作。

3.資料庫線程安全問題的幾種解決方案

  1. java方面:為操作資料庫的代碼添加synchronized同步機制。
  2. 事務方面:serializable串列化。
  3. SQL語句方面:行級鎖。

十五 視圖View

1.什麼是視圖?

視圖相當於表的一個副本,是表隱藏了部分數據與實現細節的結果,提供了一種比較安全的操作數據的方式。

2.創建

create view 視圖名 as select columnName01 as newName01,columnName02,...from tbName;

3.同步

視圖具有與表相同的屬性與操作,兩者綁定,對一個的操作也是對另一個的操作;

十六 SQL註入

1.什麼是SQL註入?

攻擊者將SQL語句通過表單輸入或者請求地址中的請求參數註入到伺服器中,執行惡意的SQL命令,如select * from table where name='name01'and password='n'or'a'='a';

2.SQL發生的根本原因

編譯時把包含SQL關鍵字的用戶輸入一同編譯,這樣SQL語句發生扭曲。

3.防止SQL註入的一種方案

將SQL語句的框架與用戶輸入的參數分開,先編譯框架,然後接收參數,這樣就會把含有SQL關鍵字的輸入當做普通字元串了,不會執行惡意的SQL命令。

十七 存儲引擎(MySQL專有)

1.什麼是存儲引用?

資料庫管理系統簡化了資料庫的創建與維護,但底層依然沒有跳過對數據的基礎處理,比如將數據存放在什麼樣的文件中,以什麼樣的結構存放、怎麼訪問與修改等問題,存儲引擎是資料庫管理系統的底層實現,是數據的底層具體存儲方式,是一種數據的存儲技術。
2.存儲引擎是一個表級概念,可以為同一資料庫中不同的表設置不同的存儲引擎。

3.分類

⑴InnoDB

MySQL預設的存儲引擎,支持事務、外鍵、行級鎖,MySQL程式崩潰後,提供自動恢復,數據及其他信息以.frm文件格式存儲;

⑵MyISAM

底層有3個文件:

  • frm:存放表結構。
  • MYD:存放數據。
  • MYI:存放索引。

特點:

  • 不支持事務。
  • 支持壓縮只讀表。
  • 該引擎使用了索引,因此適用環境受索引的約束,主要用於數據量較大、數據很少更改的表。

⑶Memory

  • 數據與索引存儲在記憶體中,因此檢索速度最快,缺點是無法持久。
  • 以.frm文件格式存儲信息。
  • 不支持事務。

4.顯示MySQL支持的引擎

show engines\G:

十八 資料庫設計三範式

設計資料庫時應遵循的基本原則:

1.有主鍵,欄位不可再分

主鍵不僅可以可以作為數據的唯一標識,避免數據重覆,同時內含索引,提高了查詢速度。假如某個欄位還可以再分,該欄位相比與分割後的欄位,維護不方便,查詢速度慢。

2.非主鍵欄位完全依賴於主鍵,不能產生部分依賴

這條規範主要是為了限制聯合主鍵的使用,使得一張表中只能保存一種實體的信息。使用聯合主鍵時,非主鍵欄位可能只對聯合主鍵的一個欄位存在依賴關係。詳細說,假定一張表採用聯合主鍵KA、KB,其中一個非主鍵欄位C只依賴於KB,由於一行數據的唯一性由KA與KB共同確定,KB的某一值可以與KA的多個值搭配出現在多行,那麼凡是在KB某個值出現的行,對應的欄位C某個確定的值C0也必定出現,這樣C0就重覆出現在多行中,造成數據冗雜。

3.不能出現傳遞依賴

某個非主鍵欄位C依賴於另一個非主鍵欄位B,而B完全依賴於主鍵欄位A,那麼C對A的依賴關係是通過B的傳遞建立起來的,C對A的依賴就是傳遞依賴。如果B重覆出現,那麼C跟著重覆出現。應該另外建立一張表,以B為主鍵存儲B與C,在原表中為B建立外鍵,指向該表。

總之,將不同的對象分開存儲。而實際開發中,不一定要嚴格遵守三範式,以滿足項目需求為最高目的,有時為了追求速度可以犧牲結構。

 


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

-Advertisement-
Play Games
更多相關文章
  • 一,工程圖。 二,代碼。 ViewController.m ...
  • Google 更新了最新的 Support Library 版本,其中最為顯眼的功能莫過於 support-v4 大拆分,然後這個拆分現在看來並沒有那麼美好。 v4 包從 2011 年開始引入,包含 ViewPager、FragmentActivity 等我們常用的功能,目前已經達到 1.3 M,G ...
  • 原作者:現在是實踐所有已經學習到Kotlin技術,以及充分利用它提供功能的時候。如果你還有任何疑問,在本文就給你一些做出最終決定的理由。 ...
  • 打開app/src/main/AndroidManifest。 1.註冊當前活動。通過<activity android:name>標簽註冊當前活動,Android studio會自動註冊,eclipse需要手動註冊。.MainActivity其中 . 表示包名,在上面package(包)中已經註冊 ...
  • 七月中旬了,大家的實習有著落了嗎?秋招又準備的怎麼樣了呢?我依舊在準備著秋招,每當想到自己以應屆生的身份找著工作而工作卻不一定要你的時候,難免也會有點失落。互聯網行業的大佬們求賢若渴但對賢才也十分的苛刻,看到內推正如火如荼的進行著,深怕自己被這場浪潮甩在身後,所以也不得不苦心的準備著。如果你也是20... ...
  • 1.表結構 2.數據類型 3.索引 4.約束 為欄位設定not null非空約束,因為null不僅占據更多的空間,還使對比與索引變得複雜。 5.SQL語句 6.緩存 現在我們大多數時候都是通過ORM框架訪問數據,這些框架往往提供緩存功能(一級緩存或者二級緩存),開啟緩存可以減少訪問資料庫的次數,不僅 ...
  • 關聯規則挖掘最典型的例子是購物籃分析,通過分析可以知道哪些商品經常被一起購買,從而可以改進商品貨架的佈局。 1. 基本概念 首先,介紹一些基本概念。 (1) 關聯規則:用於表示數據內隱含的關聯性,一般用X表示先決條件,Y表示關聯結果。 (2) 支持度(Support):所有項集中{X,Y}出現的可能 ...
  • 前言 資料庫系統與文件系統最大的區別在於資料庫能保證操作的原子性,一個操作要麼不做要麼都做,即使在資料庫宕機的情況下,也不會出現操作一半的情況,這個就需要資料庫的日誌和一套完善的奔潰恢復機制來保證。本文仔細剖析了InnoDB的奔潰恢復流程,代碼基於5.6分支。 基礎知識 lsn: 可以理解為資料庫從 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...