主頁 > 資料庫 > MySQL學習06(事務和索引)

MySQL學習06(事務和索引)

2021-02-22 06:55:14 資料庫

事務

概述

什么是事務

  • 事務就是將一組SQL陳述句放在同一批次內去執行
  • 如果一個SQL陳述句出錯,則該批次內的所有SQL都將被取消執行
  • MySQL事務處理只支持InnoDB和BDB資料表型別

事務的ACID原則

原子性(Atomic)
整個事務中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個環節,事務在執行程序中發生錯誤,會被回滾(ROLLBACK)到事務開始前的狀態,就像這個事務從來沒有執行過一樣,
一致性(Consist)
一個事務可以封裝狀態改變(除非它是一個只讀的),事務必須始終保持系統處于一致的狀態,不管在任何給定的時間并發事務有多少,也就是說:如果事務是并發多個,系統也必須如同串行事務一樣操作,其主要特征是保護性和不變性(Preserving an Invariant),以轉賬案例為例,假設有五個賬戶,每個賬戶余額是100元,那么五個賬戶總額是500元,如果在這個5個賬戶之間同時發生多個轉賬,無論并發多少個,比如在A與B賬戶之間轉賬5元,在C與D賬戶之間轉賬10元,在B與E之間轉賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性,
隔離性(Isolated)
隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作,如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統,這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一資料,
持久性(Durable)
在事務完成以后,該事務對資料庫所作的更改便持久的保存在資料庫之中,并不會被回滾,

事務實作

基本語法

-- 使用set陳述句來改變自動提交模式
SET autocommit = 0;  /*關閉*/
SET autocommit = 1;  /*開啟*/

-- 注意:
-- 1.MySQL中默認是自動提交
-- 2.使用事務時應先關閉自動提交

-- 開始一個事務,標記事務的起始點
START TRANSACTION 

-- 提交一個事務給資料庫
COMMIT

-- 將事務回滾,資料回到本次事務的初始狀態
ROLLBACK

-- 還原MySQL資料庫的自動提交
SET autocommit =1;

-- 保存點
SAVEPOINT 保存點名稱 -- 設定一個事務保存點
ROLLBACK TO SAVEPOINT 保存點名稱 -- 回滾到保存點
RELEASE SAVEPOINT 保存點名稱 -- 洗掉保存點


索引

索引分類

索引的作用

  • 提高查詢速度
  • 確保資料的唯一性
  • 可以加速表和表之間的連接 , 實作表與表之間的參照完整性
  • 使用分組和排序子句進行資料檢索時 , 可以顯著減少分組和排序的時間
  • 全文檢索欄位進行搜索優化.

分類

  • 主鍵索引 (Primary Key)
  • 唯一索引 (Unique)
  • 常規索引 (Index)
  • 全文索引 (FullText)

主鍵索引

主鍵 : 某一個屬性組能唯一標識一條記錄

特點 :

  • 最常見的索引型別
  • 確保資料記錄的唯一性
  • 確定特定資料記錄在資料庫中的位置

唯一索引

作用 : 避免同一個表中某資料列中的值重復

與主鍵索引的區別

  • 主鍵索引只能有一個
  • 唯一索引可能有多個
CREATE TABLE `Grade`(
 `GradeID` INT(11) AUTO_INCREMENT PRIMARYKEY,
 `GradeName` VARCHAR(32) NOT NULL UNIQUE
  -- 或 UNIQUE KEY `GradeID` (`GradeID`)
)

常規索引

作用 : 快速定位特定資料

注意 :

  • index 和 key 關鍵字都可以設定常規索引
  • 應加在查詢找條件的欄位
  • 不宜添加太多常規索引,影響資料的插入,洗掉和修改操作
CREATE TABLE `result`(
  -- 省略一些代碼
 INDEX/KEY `ind` (`studentNo`,`subjectNo`) -- 創建表時添加
)

-- 創建后添加
ALTER TABLE `result` ADD INDEX `ind`(`studentNo`,`subjectNo`);

全文索引

作用 : 快速定位特定資料

注意 :

  • 只能用于MyISAM型別的資料表
  • 只能用于CHAR , VARCHAR , TEXT資料列型別
  • 適合大型資料集
-- 方法一:創建表時
CREATE TABLE 表名 (
    欄位名1 資料型別 [完整性約束條件…],
    欄位名2 資料型別 [完整性約束條件…],
    [UNIQUE | FULLTEXT | SPATIAL ]  INDEX | KEY
    [索引名] (欄位名[(長度)] [ASC |DESC])
);
-- 方法二:CREATE在已存在的表上創建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (欄位名[(長度)] [ASC |DESC]) ;
-- 方法三:ALTER TABLE在已存在的表上創建索引
 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (欄位名[(長度)] [ASC |DESC]) ;

洗掉索引:DROP INDEX 索引名 ON 表名字;

洗掉主鍵索引: ALTER TABLE 表名 DROP PRIMARY KEY;

顯示索引資訊: SHOW INDEX FROM student;

/*增加全文索引*/
ALTER TABLE `school`.`student` ADD FULLTEXT INDEX `studentname` (`StudentName`);

/*EXPLAIN : 分析SQL陳述句執行性能*/
EXPLAIN SELECT * FROM student WHERE studentno='1000';

/*使用全文索引*/
-- 全文搜索通過 MATCH() 函式完成,
-- 搜索字串做為 against() 的引數被給定,搜索以忽略字母大小寫的方式執行,對于表中的每個
記錄行,MATCH() 回傳一個相關性值,即,在搜索字串與記錄行在 MATCH() 串列中指定的列的文
本之間的相似性尺度,
EXPLAIN SELECT *FROM student WHERE MATCH(studentname) AGAINST('love');

注意:MySQL 5.6 以前的版本,只有 MyISAM 存盤引擎支持全文索引;MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存盤引擎均支持全文索引;只有欄位的資料型別為 char、varchar、text 及其系列才可以建全文索引,測驗或使用全文索引時,要先看一下自己的 MySQL 版本、存盤引擎和資料型別是否支持全文索引,

索引準則

  • 索引不是越多越好
  • 不要對經常變動的資料加索引
  • 小資料量的表建議不要加索引
  • 索引一般應加在查找條件的欄位

索引的資料結構

hash型別的索引:查詢單條快,范圍查詢慢
btree型別的索引:b+樹,層數越多,資料量指數級增長(我們就用它,因為innodb默認支持它)

不同的存盤引擎支持的索引型別也不一樣

  • InnoDB 支持事務,支持行級別鎖定,支持 B-treeFull-text 等索引,不支持 Hash 索引;
  • MyISAM 不支持事務,支持表級別鎖定,支持 B-treeFull-text 等索引,不支持 Hash 索引;
  • Memory 不支持事務,支持表級別鎖定,支持 B-treeHash 等索引,不支持 Full-text 索引;
  • NDB 支持事務,支持行級別鎖定,支持Hash 索引,不支持 B-treeFull-text 等索引;
  • Archive 不支持事務,支持表級別鎖定,不支持 B-treeHashFull-text 等索引;

權限管理

用戶管理

基本命令

/* 用戶和權限管理 */ 
用戶資訊表:mysql.user

-- 重繪權限
FLUSH PRIVILEGES

-- 增加用戶 CREATE USER chen IDENTIFIED BY '123456'
CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字串)
 - 必須擁有mysql資料庫的全域CREATE USER權限,或擁有INSERT權限,
 - 只能創建用戶,不能賦予權限,
 - 用戶名,注意引號:如 'user_name'@'192.168.1.1'
 - 密碼也需引號,純數字密碼也要加引號
 - 要在純文本中指定密碼,需忽略PASSWORD關鍵詞,要把密碼指定為由PASSWORD()函式回傳的
混編值,需包含關鍵字PASSWORD

-- 重命名用戶 RENAME USER chen TO chen1
RENAME USER old_user TO new_user

-- 設定密碼
SET PASSWORD = PASSWORD('密碼')   -- 為當前用戶設定密碼
SET PASSWORD FOR 用戶名 = PASSWORD('密碼')   -- 為指定用戶設定密碼

-- 洗掉用戶 DROP USER chen1
DROP USER 用戶名

-- 分配權限/添加用戶
GRANT 權限串列 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password']
 - all privileges 表示所有權限
 - *.* 表示所有庫的所有表
 - 庫名.表名 表示某庫下面的某表
 
-- 查看權限  SHOW GRANTS FOR root@localhost;
SHOW GRANTS FOR 用戶名

  -- 查看當前用戶權限
 SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR
CURRENT_USER();

-- 撤消權限
REVOKE 權限串列 ON 表名 FROM 用戶名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名   -- 撤銷所有權限

權限解釋

-- 權限串列
ALL [PRIVILEGES]   -- 設定除GRANT OPTION之外的所有簡單權限
ALTER   -- 允許使用ALTER TABLE
ALTER ROUTINE   -- 更改或取消已存盤的子程式
CREATE   -- 允許使用CREATE TABLE
CREATE ROUTINE   -- 創建已存盤的子程式
CREATE TEMPORARY TABLES     -- 允許使用CREATE TEMPORARY TABLE
CREATE USER     -- 允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL
PRIVILEGES,
CREATE VIEW     -- 允許使用CREATE VIEW
DELETE   -- 允許使用DELETE
DROP   -- 允許使用DROP TABLE
EXECUTE     -- 允許用戶運行已存盤的子程式
FILE   -- 允許使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX   -- 允許使用CREATE INDEX和DROP INDEX
INSERT   -- 允許使用INSERT
LOCK TABLES     -- 允許對您擁有SELECT權限的表使用LOCK TABLES
PROCESS   -- 允許使用SHOW FULL PROCESSLIST
REFERENCES   -- 未被實施
RELOAD   -- 允許使用FLUSH
REPLICATION CLIENT   -- 允許用戶詢問從屬服務器或主服務器的地址
REPLICATION SLAVE   -- 用于復制型從屬服務器(從主服務器中讀取二進制日志事件)
SELECT   -- 允許使用SELECT
SHOW DATABASES   -- 顯示所有資料庫
SHOW VIEW   -- 允許使用SHOW CREATE VIEW
SHUTDOWN   -- 允許使用mysqladmin shutdown
SUPER   -- 允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL陳述句,
mysqladmin debug命令;允許您連接(一次),即使已達到max_connections,
UPDATE   -- 允許使用UPDATE
USAGE   -- “無權限”的同義詞
GRANT OPTION   -- 允許授予權限
-- 分析和存盤表的關鍵字分布
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ...
-- 檢查一個或多個表是否有錯誤
CHECK TABLE tbl_name [, tbl_name] ... [option] ...
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
-- 整理資料檔案的碎片
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

MySQL備份

資料庫備份必要性

  • 保證重要資料不丟失
  • 資料轉移

MySQL資料庫備份方法

  • mysqldump備份工具
  • 資料庫管理工具,如SQLyog
  • 直接拷貝資料庫檔案和相關組態檔

mysqldump客戶端

作用 :

  • 轉儲資料庫
  • 搜集資料庫進行備份
  • 將資料轉移到另一個SQL服務器,不一定是MySQL服務器

-- 匯出
1. 匯出一張表 -- mysqldump -uroot -p123456 school student >D:/a.sql
mysqldump -u用戶名 -p密碼 庫名 表名 > 檔案名(D:/a.sql)
2. 匯出多張表 -- mysqldump -uroot -p123456 school student result >D:/a.sql
mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 檔案名(D:/a.sql)
3. 匯出所有表 -- mysqldump -uroot -p123456 school >D:/a.sql
mysqldump -u用戶名 -p密碼 庫名 > 檔案名(D:/a.sql)
4. 匯出一個庫 -- mysqldump -uroot -p123456 -B school >D:/a.sql
mysqldump -u用戶名 -p密碼 -B 庫名 > 檔案名(D:/a.sql)

-- 匯入
1. 在登錄mysql的情況下: -- source D:/a.sql
source 備份檔案
2. 在不登錄的情況下
mysql -u用戶名 -p密碼 庫名 < 備份檔案

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/262025.html

標籤:其他

上一篇:牛年伊始,你的mysql密碼安全嗎?

下一篇:SQL基礎陳述句

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more