MySql入門-(一)


學了很多亂七雜八的東西,但是依然停留在前端,在工作中一直和后端交流,但是不太了解數據庫是怎么回事,為了加強學習,准備學習一些關於數據庫相關的東西。

說起數據庫可能會有很多很多,SQLServerOracleSybase等等等,還有就是要學習MySql,說了這么多數據庫這些都是關系型數據庫。既然有關系型數據庫自然也就會有非關系型數據,比如Neo4jMongodDBCloudant等等等這些也就都屬於非關系型數據庫,非關系型數據庫又被稱為nosql

非關系型數據庫與關系型數據庫對比

# 非關系型數據庫

性能NOSQL是基於鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。可擴展性同樣shouce也是因為基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。

優勢

  1. nosql數據庫簡單易部署,基本都是開源軟件,不需要像使用oracle那樣花費大量成本購買使用,相比關系型數據庫價格便宜。
  2. nosql數據庫將數據存儲於緩存之中,關系型數據庫將數據存儲在硬盤中,自然查詢速度遠不及nosql數據庫。
  3. nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎類型以及對象或者是集合等各種格式,而數據庫則只支持基礎類型
  4. 關系型數據庫有類似join這樣的多表查詢機制的限制導致擴展很艱難。

劣勢

  1. 維護的工具和資料有限,因為nosql是屬於新的技術,不能和關系型數據庫10幾年的技術同日而語。
  2. 不提供對sql的支持,如果不支持sql這樣的工業標准,將產生一定用戶的學習和使用成本。
  3. 不提供關系型數據庫對事物的處理。
# 關系型數據庫

關系型數據庫對於復雜查詢可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。事務支持使得對於安全性能很高的數據訪問要求得以實現。

優勢

  1. 保持數據的一致性(事務處理)
  2. 由於以標准化為前提,數據更新的開銷很小(相同的字段基本上都只有一處)
  3. 可以進行Join等復雜查詢

劣勢

  1. 大量數據的寫入處理
  2. 為有數據更新的表做索引或表結構(schema)變更
  3. 字段不固定時應用
  4. 對簡單查詢需要快速返回結果的處理

對於這兩類數據庫,對方的優勢就是自己的弱勢,反過來也是如此。

MySql安裝

Windows上安裝Mysql還是比較簡單的,去Mysql官網去現在zip包就好了。下載完包之后把包解壓到想要存放的存儲盤內。

Mysql有提供安裝版本,下載好之后安裝就能使用了,如果下載zip包解壓后需要進行配置,比較麻煩,網上也有很多教程。

然后打開剛剛解壓的文件夾,在文件夾下面有一個my.ini配置文件。

MySql的配置與我們平時學習的語言不太一樣,MySql在配置過程中有兩點需要注意:

  1. 配置中的-_是等價的
  2. 分段配置[******]隔離段
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
 
[mysqld]
# 設置3306端口
port = 3306

# 設置mysql的安裝目錄
basedir=C:\\web\\mysql-8.0.11
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
# datadir=C:\\web\\sqldata

# 允許最大連接數
max_connections=20

# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8

# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB

根據以上內容更改配置就好了,並添加環境變量。這里安裝就不詳細介紹了。

MySql服務管理

MySQL在服務中提供了一些對MySQL管理的一些命令工具。

設置管理員密碼

./bin/mysqladmin -u root password "root123";

mysqladmin是執行很多關於MySQL的一些管理的工作,同樣也是在命令行里面去執行的。執行上面的命令,就會為root用戶創建一個密碼。

啟動服務

./bin/mysqld_safe &
# ./bin/mysqld &

啟動服務的時候是使用mysqld_safe這個命令的,實際上mysqld_safe是一個腳本,他會管理mysqld進程進行管理,一旦mysqld因為異常導致程序崩潰的話mysqld_safe會重啟一下MySQL服務。

停止服務

./bin/mysqladmin shutdown
# kill -9 $mysqld_pid   //  重啟服務
# kill $mysqld_pid

使用kill $mysqld_pid命名會停止mysql服務,包括mysqld_safe也會停止。

還有很多關於MySql服務管理的命令,這里就不一一贅述了,單獨出一篇文章對其進一步介紹。

MySql可視化工具

安裝完數據庫之后需要安裝可視化工具,方便查看數據庫內容,以及方便創建數據庫和刪除數據數據庫等操作。

想要可視化MySQL需要借助Nacicat,網上有很多破解版可以隨便下載一個。Nacicat使用手冊

下載安裝好之后可以與數據庫做連接,使用方法也很簡單。

MySql語法規范

MySql數據庫屬於關聯型數據庫,需要使用Sql語句對表數據進行查詢。一個數據庫通常包含一個或多個表。每個表由一個名字標識。表包含帶有數據的記錄(行)。Sql語句對大小寫不敏感,但是還是建議所有的Sql語句使用大寫,查詢條件與表名用小寫,這樣方便區分哪些是Sql語句哪些是查詢條件。

MySql系統要求在每條 SQL 命令的末端使用分號。分號是在數據庫系統中分隔每條Sql語句的標准方法,這樣就可以在對服務器的相同請求中執行一條以上的語句。

MySql數據類型

數值類型

整數型

類型 大小 范圍(有符號) 范圍(無符號) 用途
TINYINT 1 字節 (-128,127) (0,255) 小整數值
SMALLINT 2 字節 (-32 768,32 767) (0,65 535) 大整數值
MEDIUMINT 3 字節 (-8 388 608,8 388 607) (0,16 777 215) 大整數值
INT或INTEGER 4 字節 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數值
BIGINT 8 字節 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值

浮點型

類型 大小 范圍(有符號) 范圍(無符號) 用途
FLOAT 4 字節 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 單精度,浮點數值
DOUBLE 8 字節 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 雙精度,浮點數值
DECIMAL 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 依賴於M和D的值 依賴於M和D的值 小數值

設一個字段定義為 float(5,3),如果插入一個數 123.45678,實際數據庫里存的是 123.457,但總個數還以實際為准,即 6 位。

日期和時間類型

注:每個時間類型有一個有效值范圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。

類型 大小 范圍 格式 用途
DATE 3 字節 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 字節 '-838:59:59'/'838:59:59' HH:MM:SS 時間值或持續時間
YEAR 1 字節 1901/2155 YYYY-MM-DD HH:MM:SS 混合日期和時間值
DATETIME 8 字節 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和時間值
TIMESTAMP 4 字節 1970-01-01 00:00:00/2038 結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和時間值,時間戳

若定義一個字段為timestamp,這個字段里的時間數據會隨其他字段修改的時候自動刷新,所以這個數據類型的字段可以存放這條記錄最后被修改的時間。

字符串類型

類型 大小 用途
CHAR 0-255字節 定長字符串
VARCHAR 0-65535 字節 變長字符串
TINYBLOB 0-255字節 不超過 255 個字符的二進制字符串
TINYTEXT 0-255字節 短文本字符串
BLOB 0-65 535字節 二進制形式的長文本數據
TEXT 0-65 535字節 長文本數據
MEDIUMBLOB 0-16 777 215字節 二進制形式的中等長度文本數據
MEDIUMTEXT 0-16 777 215字節 中等長度文本數據
LONGBLOB 0-4 294 967 295字節 二進制形式的極大文本數據
LONGTEXT 0-4 294 967 295字節 極大文本數據

char和varchar:

  1. char(n) 若存入字符數小於n,則以空格補於其后,查詢之時再將空格去掉。所以 char 類型存儲的字符串末尾不能有空格,varchar 不限於此。
  2. char(n) 固定長度,char(4) 不管是存入幾個字符,都將占用 4 個字節,varchar 是存入的實際字符數 +1 個字節(n<=255)或2個字節(n>255),所以 varchar(4),存入 3 個字符將占用 4 個字節。
  3. char 類型的字符串檢索速度要比 varchar 類型的快。

varchar 和 text:

  1. varchar 可指定 n,text 不能指定,內部存儲 varchar 是存入的實際字符數 +1 個字節(n<=255)或 2 個字節(n>255),text 是實際字符數 +2 個字節。
  2. text 類型不能有默認值。
  3. varchar 可直接創建索引,text 創建索引要指定前多少個字符。varchar 查詢速度快於 text, 在都創建索引的情況下,text 的索引似乎不起作用。

總結

MySql數據關聯型數據庫,使用Sql語句對數據庫進行操作。Sql語句不區分大小寫,無論是關聯型數據庫還是非關聯型數據庫都各有優缺點。

在使用MySql創建表時,需要多注意數據格式,會給數據庫查詢帶來一些性能的提升。

注:數據庫中如果使用大量索引,雖然查詢很快,但是會造成寫入過慢的情況,使用的時候要稍加慎重。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM