MySql入門-(一)

學了不少亂七雜八的東西,可是依然停留在前端,在工做中一直和後端交流,可是不太瞭解數據庫是怎麼回事,爲了增強學習,準備學習一些關於數據庫相關的東西。html

提及數據庫可能會有不少不少,SQLServerOracleSybase等等等,還有就是要學習MySql,說了這麼多數據庫這些都是關係型數據庫。既然有關係型數據庫天然也就會有非關係型數據,好比Neo4jMongodDBCloudant等等等這些也就都屬於非關係型數據庫,非關係型數據庫又被稱爲nosql前端

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

什麼是關係型數據庫,什麼是非關係型數據庫二者之間又有什麼區別呢?mysql

非關係型數據庫

性能NOSQL是基於鍵值對的,能夠想象成表中的主鍵和值的對應關係,並且不須要通過SQL層的解析,因此性能很是高。可擴展性一樣shouce也是由於基於鍵值對,數據之間沒有耦合性,因此很是容易水平擴展。web

優點
  1. nosql數據庫簡單易部署,基本都是開源軟件,不須要像使用oracle那樣花費大量成本購買使用,相比關係型數據庫價格便宜。
  2. nosql數據庫將數據存儲於緩存之中,關係型數據庫將數據存儲在硬盤中,天然查詢速度遠不及nosql數據庫。
  3. nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,因此能夠存儲基礎類型以及對象或者是集合等各類格式,而數據庫則只支持基礎類型
  4. 關係型數據庫有相似join這樣的多表查詢機制的限制致使擴展很艱難。
劣勢
  1. 維護的工具和資料有限,由於nosql是屬於新的技術,不能和關係型數據庫10幾年的技術同日而語。
  2. 不提供對sql的支持,若是不支持sql這樣的工業標準,將產生必定用戶的學習和使用成本。
  3. 不提供關係型數據庫對事物的處理。
關係型數據庫

關係型數據庫對於複雜查詢能夠用SQL語句方便的在一個表以及多個表之間作很是複雜的數據查詢。事務支持使得對於安全性能很高的數據訪問要求得以實現。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建立表時,須要多注意數據格式,會給數據庫查詢帶來一些性能的提高。

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

相關文章
相關標籤/搜索