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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql事务用法介绍及储存引擎介绍(MyLSAM,Innodb)

發(fā)布時間:2024/2/28 数据库 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql事务用法介绍及储存引擎介绍(MyLSAM,Innodb) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 事務
  • 什么是事務
  • 事務的3大范式
  • 事務的三大特點
    • 原子性(Atomicity)
    • 一致性(Consistency)
    • 隔離性(Isolation)
    • 持久性(Durability)
  • 控制事務的命令
    • 事務的控制方法
    • 如何存檔
    • 使用事務命令(回滾)
    • 使用set設置控制事務
    • SAVEPOINT 語法
  • 存儲引擎
    • 什么是存儲引擎
    • MyISAM介紹
    • MyISAM有什么特點
    • 什么生產(chǎn)場景適合使用MyISAM
    • InnoDB介紹
    • InnoDB有什么特點
    • 什么生產(chǎn)場景適合使用InnoDB
    • 企業(yè)生產(chǎn)環(huán)境中依據(jù)什么選擇存儲引擎
  • 如何修改存儲引擎

前言

事務

什么是事務

  • 事務是一種機制、一個操作序列,包含了一組數(shù)據(jù)庫操作命令,并且把所有的命令作為一個整體一起向系統(tǒng)提交或撤銷操作請求,即這一組數(shù)據(jù)庫命令要么都執(zhí)行,要么都不執(zhí)行(銀行轉賬;提交轉賬-確認轉賬-回饋信息)
  • 事務是一個不可分割的工作邏輯單元,在數(shù)據(jù)庫系統(tǒng)上執(zhí)行并發(fā)操作時,事務是最小的控制單元(銀行減錢增前是不可以分割的總和不變)
  • 適用于多用戶同時操作的數(shù)據(jù)庫系統(tǒng)的場景,如銀行、保險公司及證券交易系統(tǒng)等等
  • 通過事務的整體性以保證數(shù)據(jù)的一致性
  • 如果事務成功了一部分,一部分未成功,則執(zhí)行回滾,回到事務的起點,重新開始操作

事務的3大范式

確保每列保持原子性

確保表中的每列都和主鍵相關

確保每列都和主鍵直接相關,而不是間接相關

事務的三大特點

原子性(Atomicity)

  • 事務是一個完整的操作,事務的各元素是不可分的(原子的)

  • 事務中的所有元素必須作為一個整體提交或回滾

  • 如果事務中的任何元素失敗,則整個事務將失敗

    銀行轉出和轉進是一起的不會單獨

一致性(Consistency)

  • 當事務完成時,數(shù)據(jù)必須處于一致狀態(tài)!

  • 在事務開始之前,數(shù)據(jù)庫中存儲的數(shù)據(jù)處于一致狀態(tài);

  • 在正在進行的事務中,數(shù)據(jù)可能處于不一致的狀態(tài);

  • 當事y務成功完成時,數(shù)據(jù)必須再次回到已知的一致狀態(tài)

    銀行轉賬轉賬前是一致,的轉賬中不一致,轉賬后一致

    隔離性(Isolation)

    • 對數(shù)據(jù)進行修改的所有并發(fā)事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴于或影響其他事務
    • 修改數(shù)據(jù)的事務可以在另一個使用相同數(shù)據(jù)的事務開始之前訪問這些數(shù)據(jù),或者在另一個使用相同數(shù)據(jù)的事務結束之后訪問這些數(shù)據(jù)

    舉例子:

    a轉賬給b, b轉賬給c, a不會轉給c這就是隔離

持久性(Durability)

  • 事務持久性指不管系統(tǒng)是否發(fā)生故障,事務處理的結果都是永久的
  • 一旦事務被提交,事務的效果會被永久地保留在數(shù)據(jù)庫中

控制事務的命令

事務控制語句

BEGIN或START TRANSACTION ===>表示事務的開始 COMMIT ===>提交 ROLLBACK ===>回滾 SAVEPOINT 存檔點名稱 ===>設置斷點,存檔點 RELEASE SAVEPOINT 存檔點名稱===>釋放存檔點 ROLLBACK TO 存檔點名稱 ===>回滾到某個存檔點 SET TRANSACTION ===>設置事務

事務的控制方法

  • 使用事務處理命令控制事務
    • bein:開始一個事務
    • commit:提交一個事務
    • rollback:回滾一個事務(跳轉到bein狀態(tài))
  • 使用set命令進行控制
    • set autocommit=0:禁止自動提交
    • set autocommit=1:開啟自動提交

如何存檔

格式: savepoint <存檔點名稱>; 例如: savepoint s1;

使用事務命令(回滾)

  • bein:開始一個事務
  • commit:提交一個事務
  • rollback:回滾一個事務(跳轉到bein狀態(tài))

往數(shù)據(jù)表中插入一條數(shù)據(jù)一個在事務中提交,執(zhí)行操作語句必須使用commit,否則事務不可以自動提交

mysql> begin; mysql> insert into info value('5','UI'); mysql> select * from info; +----+--------------+ | id | name | +----+--------------+ | 1 | 云計算 | | 2 | 大數(shù)據(jù) | | 3 | 人工智能 | | 4 | 區(qū)塊鏈 | | 5 | UI | +----+--------------+ mysql> rollback; mysql> select * from info; 再次查看記錄發(fā)現(xiàn)已經(jīng)沒有了 +----+--------------+ | id | name | +----+--------------+ | 1 | 云計算 | | 2 | 大數(shù)據(jù) | | 3 | 人工智能 | | 4 | 區(qū)塊鏈 | +----+--------------+

使用set設置控制事務

  • set autocommit=0:禁止自動提交
  • set autocommit=1:開啟自動提交
mysql> set autocommit=0; 禁止提交 mysql> insert into info (name,score,address) values ('wamgwu',80,'nj'); //插入一條語句 mysql> select * from info; // 查看一下 +----+----------+-------+---------+ | id | name | score | address | +----+----------+-------+---------+ | 1 | zhangsan | 80.00 | nj | | 2 | lisi | 80.00 | nj | | 3 | wamgwu | 80.00 | nj | +----+----------+-------+---------+ mysql> rollback; //執(zhí)行回滾命令,再查看表先前插入的命令已經(jīng)沒有了 mysql> select * from info; +----+----------+-------+---------+ | id | name | score | address | +----+----------+-------+---------+ | 1 | zhangsan | 80.00 | nj | | 2 | lisi | 80.00 | nj | +----+----------+-------+---------+

SAVEPOINT 語法

SAVEPOINT 通過自定義的名稱設置一個存儲點,如果當前事務已經(jīng)有了一個同名的

savepoint 結點名;(回到上一檔下一檔的數(shù)據(jù)全部消失,rollback也意味著結束,必須是innodb引擎)

mysql> begin; mysql> insert into info (name,score,address) values ('wangwu',80,'bieji'); 插入記錄 mysql> select * from info; +----+----------+-------+---------+ | id | name | score | address | +----+----------+-------+---------+ | 1 | zhangsan | 80.00 | nj | | 2 | lisi | 80.00 | nj | | 4 | wangwu | 80.00 | bieji | +----+----------+-------+---------+ mysql> savepoint a; 保存點a mysql> insert into info (name,score,address) values ('tianshan',80,'bieji'); mysql> savepoint b; 保存點b mysql> insert into info (name,score,address) values ('heishang',80,'bieji'); mysql> rollback to b; 回到保存b mysql> select * from info; +----+----------+-------+---------+ | id | name | score | address | +----+----------+-------+---------+ | 1 | zhangsan | 80.00 | nj | | 2 | lisi | 80.00 | nj | | 4 | wangwu | 80.00 | bieji | | 5 | tianshan | 80.00 | bieji | | 6 | heishang | 80.00 | bieji | +----+----------+-------+---------+ mysql> rollback to a; 回到保存a mysql> select * from info; +----+----------+-------+---------+ | id | name | score | address | +----+----------+-------+---------+ | 1 | zhangsan | 80.00 | nj | | 2 | lisi | 80.00 | nj | | 4 | wangwu | 80.00 | bieji | +----+----------+-------+---------+

結束事務3種方法

  • commit;
  • set autocommit=1;
  • rollback;

存儲引擎

什么是存儲引擎

  • MySQL中的數(shù)據(jù)用各種不同的技術存儲在文件中,每一種技術都使用不同的存儲機制、索引技巧、鎖定水平并最終提供不同的功能和能力,這些不同的技術以及配套的功能在 MySQL中稱為存儲引擎
  • 儲引擎就是 MySQL將數(shù)據(jù)存儲在文件系統(tǒng)中的存儲方式或者存儲格式
  • 目前 MySQL常用的兩種存儲引擎
    • MyISAM(不支持事務)
    • InnoDB(支持事務)
  • MyISAM介紹

    • MyISAM存儲引擎是 MySQL關系數(shù)據(jù)庫系統(tǒng)5.5版本之前默認的存儲引擎,前身是ISAM

    • ISAM是一個定義明確且歷經(jīng)時間考驗的數(shù)據(jù)表格管理方法,在設計之時就考慮到數(shù)據(jù)庫被查詢的次數(shù)要遠大于更新的次數(shù)

    • ISAM的特點

      • 優(yōu)點:ISAM執(zhí)行讀取操作的速度很快
      • 缺點:不支持事務處理
      • 缺點:不能夠容錯
      • 對事物沒有完整的要求

    MyISAM有什么特點

    • 不支持事務
    • 表級鎖定形式,數(shù)據(jù)在更新時鎖定整個表
    • 數(shù)據(jù)庫在讀寫過程中相互阻塞
      • 會在數(shù)據(jù)寫入的過程阻塞用戶數(shù)據(jù)的讀取
      • 也會在數(shù)據(jù)讀取的過程中阻塞用戶的數(shù)據(jù)寫入
    • 每個 MyISAM在磁盤上存儲成三個文件,每一個文件的名字以表的名字開始,擴展名指出文件類型
    • MyISAM在磁盤上存儲的文件
      • .frm文件存儲表定義
      • 數(shù)據(jù)文件的擴展名為.MYD( MYData)
      • 索引文件的擴展名是.MYI( MYIndex)

    什么生產(chǎn)場景適合使用MyISAM

    • 公司業(yè)務不需要事務的支持
    • 一般單方面讀取數(shù)據(jù)比較多的業(yè)務,或單方面寫入數(shù)據(jù)比較多的業(yè)務
    • MyISAM存儲引擎數(shù)據(jù)讀寫都比較頻繁場景不適合
    • 使用讀寫并發(fā)訪問相對較低的業(yè)務
    • 數(shù)據(jù)修改相對較少的業(yè)務
    • 對數(shù)據(jù)業(yè)務一致性要求不是非常高的業(yè)務
    • 服務器硬件資源相對比較差

    InnoDB介紹

    InnoDB有什么特點

    • 支持事務:支持4個事務隔離級別
    • 行級鎖定,但是全表掃描仍然會是表級鎖定
    • 讀寫阻塞與事務隔離級別相關
    • 具有非常高效的緩存特性:能緩存索引,也能緩存數(shù)據(jù)
    • 表與主鍵以簇的方式存儲
    • 支持分區(qū)、表空間,類似 oracle數(shù)據(jù)庫
    • 支持外鍵約束,5.5以前不支持全文索引,5.5版本以后支持全文索引
    • 對硬件資源要求還是比較高的場合

    什么生產(chǎn)場景適合使用InnoDB

    • 業(yè)務需要事務的支持
    • 行級鎖定對高并發(fā)有很好的適應能力,但需確保查詢是通過索引來完成
    • 業(yè)務數(shù)據(jù)更新較為頻繁的場景,如:論壇,微博等
    • 業(yè)務數(shù)據(jù)一致性要求較高,例如:銀行業(yè)務
    • 硬件設備內存較大,利用 Innodb較好的緩存能力來提高內存利用率,減少磁盤I/O的壓力

    企業(yè)生產(chǎn)環(huán)境中依據(jù)什么選擇存儲引擎

    • 需要考慮毎個存儲引擎提供了哪些不同的核心功能及應用場景

    • 支持的字段和數(shù)據(jù)類型
      ●所有引擎都支持通用的數(shù)據(jù)類型
      ●但不是所有的引擎都支持其它的字段類型,如二進制對象

    • 鎖定類型:不同的存儲引擎支持不同級別的鎖定
      ●表鎖定
      ●行鎖定

    • 索引的支持
      ●建立索引在搜索和恢復數(shù)據(jù)庫中的數(shù)據(jù)的時候能夠顯著提高性能
      ●不同的存儲引擎提供不同的制作索引的技術
      ●有些存儲引擎根本不支持索引

    • 事務處理的支持

      ●事務處理功能通過提供在向表中更新和插入信息期間的可靠性
      ●可根據(jù)企業(yè)業(yè)務是否要支持事務選擇存儲引擎

    如何修改存儲引擎

    共有四種方法

    alter table 修改; 格式: alter table table_name engine=引擎; 例如: MySQL> alter table user_info engin=MyISAM;

    方法二:

    修改my.cnf,指定默認存儲引擎并重啟服務 格式: default-storage-engine=InnoDB 例如: vim my.cnf default-storage-engine=InnoDB

    方法三:

    create table 創(chuàng)建表時指定存儲引擎 格式: create table 表名 (字段) engine=引擎 例如: MySQL> create table yibiao(id int)engine=MyISAM;

    方法四:(5.7之前的版本可以用)

    Mysql_convert_table_format轉化存儲引擎 格式: Mysql_convert_table_format-user=root--password=密碼--sock=/tmp/mysql.sock-engine=引擎 庫名 表名 例如: [root@localhost ~]# yum install perl-DBI perl-DBD-MySQL -y [root@localhost ~]# /usr/local/mysql/bin/bysql_convert_table_format --user=root --passwork='123' --sock=/tmp/mysql.sock auth

    總結

    以上是生活随笔為你收集整理的mysql事务用法介绍及储存引擎介绍(MyLSAM,Innodb)的全部內容,希望文章能夠幫你解決所遇到的問題。

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