日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql牵引例子_MySQL学习06(事务和索引)

發布時間:2023/12/9 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql牵引例子_MySQL学习06(事务和索引) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事務

概述

什么是事務

事務就是將一組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-tree、

總結

以上是生活随笔為你收集整理的mysql牵引例子_MySQL学习06(事务和索引)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。