《深入淺出MySQL》筆記

《深入淺出MySQL》

存儲引擎的選擇

MyISAM

  1. 特性:
  • 不支持事務
  • 不支持外鍵
  1. 優點:
  • 訪問速度快,對事物完整性沒有要求或者以SELECT、INSERT爲主的可以使用

InnoDB

  1. 自動增長列
  2. 外鍵約束
  • RESTRICT:字表存在記錄,限制父表更新
  • NO ACTION:同上
  • CASCADE:父表執行更新或者刪除操作時,字表執行同樣動作
  • SET NULL:父表執行更新或者刪除操作時,字表把對應字段設爲null
  1. 存儲方式
  • 使用共享空間存儲
  • 使用多表空間存儲

MEMORY

  1. 數據存儲在內存中
  2. 訪問速度快默認使用HASH索引
  3. 服務關閉,數據就會丟失

選擇合適的數據類型

char與varchar

  1. char:固定長度字符類型
  2. varchar:可變長度字符類型
  3. 對於即將存儲的數據尾部存在空格的,char將刪除尾部空格,varchar將保留空格

浮點數與定點數

  1. 在數據庫存儲浮點數時存在精度損失,會四捨五入
  2. 定點數存儲準確,用於貨幣存儲

tinyInt(1)、smallint(2)等,代表什麼意思?

在這裏插入圖片描述

Storage (Bytes)表示所佔的字節數,1字節=8位;
tinyInt允許存儲的最大的有符號數字是:2=256;無符號爲256/2 = 128;其他類型以此類推

日期類型選擇

  1. 對於datetimetimestemp,優先使用datetimetimestemp到2038年就不可以用了
  2. 若應用存在多時區,使用timestemp

MySQL字符集設置

  1. MySQL的字符集和校對規則有4個級別的默認設置:
  2. 服務器級
  3. 數據庫級
  4. 表級
  5. 字段級

索引

索引(Index)是幫助MySQL高效獲取數據的數據結構

目的

  1. 目的在於提高查詢效率,類比於字典

功能

  1. 查找
  2. 排序

優勢與劣勢

優:

  1. 提高數據檢索的效率,降低數據庫的IO成本
  2. 降低數據排序的成本,降低了CPU的消耗

劣:

  1. 索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,所以所以也需要佔用空間
  2. 在做數據修改時,不僅要保存數據,還要修改索引信息

索引的分類

  • 單值索引:一個索引只包含單個列,一個表可以有多個單列索引
  • 唯一索引:索引列的值是唯一的,但允許有空值
  • 複合索引:一個索引包含多個列

索引的創建,查看和刪除

CREATE TABLE `example` (
  `id` varchar(40) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `city` varchar(40) DEFAULT NULL,
  `country` varchar(40) DEFAULT NULL,
  `email` varchar(40) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `country_code` varchar(5) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `exampleName` (`name`(10))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 創建

爲example表中的name字段創建10字節的前綴索引

CREATE INDEX exampleName ON example(name(10));
  1. 查看
SHOW INDEX FROM example;
  1. 刪除
DROP INDEX exampleName ON example;

索引的存儲分類

  1. B-Tree索引:最常見的索引類型,大部分引擎都支持
  • B-Tree索引中的B不代表二叉樹,代表平衡樹
  1. HASH索引:只有Memory索引支‘’
  2. R-Tree
  3. Full-Text(全文索引)

存儲過程

存儲過程和函數的區別:函數必須有返回值,而存儲過程沒有

發佈了47 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章