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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL事务及字符集介绍

發布時間:2025/3/15 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL事务及字符集介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文?http://www.abcdocker.com/abcdocker/77


事務介紹

簡單來說,事務就是指邏輯上的一組SQL語句操作,組成這組操作的各個SQL語句,執行時要么全成功要么全失敗。? ? MySQL5.5支持事務的引擎:Innodb/ndb

事務四大特性(ACID)

1.原子性(Atomicity) 事務是一個不可分割的單位,事務中的所有SQL等操作要么全都發生,要么都不發生 2.一致性(Consistency) 事務發生前和發生后,數據的完整性必須保持一致 3.隔離性(Isolation) 當并發訪問訪問數據庫時,一個正在執行的事務在執行完畢前,對于其他的會話是不可見的,多個并發事務之間的數據庫是相互隔離的。 4.持久性(Durability) 一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。如果出了錯誤,事務也不允許撤銷,只能通過“補償性事務”

事務的開啟

數據庫默認事務是自動提交的,也就是發一條sql它就執行一條。如果想多條sql放在一個事務中執行,則需要使用事務進行處理。當我們開啟一個事務,并且沒有提交,mysql會自動回滾事務,或者我們使用rolback命令回滾事務。 MySQL默認是自動提交的,也就是提交一個QUERY,它就直接執行!我們可以通過以下命令進行查詢:
  • mysql> show variables like "%autocommit%";
  • +---------------+-------+
  • | Variable_name | Value |
  • +---------------+-------+
  • | autocommit ? ?| ON ? ?|
  • +---------------+-------+
  • 1 row in set (0.00 sec)
  • 禁止自動提交

    mysql>set global autocommit=OFF mysql>set global autocommit=NO 開啟自動提交 rolback回滾事務(oracle) commit提交事務(oracle)

    MySQL引擎概述

    1.1 什么是存儲引擎?

    我們先來個比喻,我們都知道錄制一個視頻文件,可以轉成不同的格式如mp4、avi、wmv等,而存在我們電腦的磁盤上也會存在不同類型的文件系統中windows里常見的nfs,fat32.存在于linux常見的ext3,ext4,xfs。但是我們活著用戶看到實際視頻內容是一樣的。直觀區別是,占用系統的空間大小與清晰程度可能不一樣

    1.2 MySQL存儲引擎架構

    MySQL的存儲引擎是MySQL數據庫的重要組成部分,MySQL常用的表的引擎為MyISAM和InnoDB兩種。MySQL的美中存儲引擎在MySQL里通過插件的方式使用的。MySQL可以同時支持多種存儲引擎。

    MyISAM引擎介紹

    1.1什么是MyIASM引擎?

    MyIASM引擎是MySQL關系數據庫管理系統的默認存儲引擎(MySQL 5.5.5以前)這種MySQL表的存儲結構從舊的IASM代碼擴展出許多有用的功能。在新版本的MySQL中,InnoDB引擎由于對事物參考完成行,以及更好的并發性等優點開始逐漸的取代MyIASM引擎。 可以使用show create table 庫名\G,查看創建表
  • mysql> show create table user\G
  • ENGINE=MyISAM

  • mysql> show create table wp_users\G
  • ENGINE=InnoDB
  • 提示:MySQL5.1數據庫的默認存儲引擎為MyIASM 每一個MyIASM的表都對應與硬盤上的三個文件。這三個文件有一樣的文件名,但是有不同的擴展名指示其類型用途:frm文件保存表的定義,這個文件并不是MyISAM引擎的一部分,而是服務器的一部分;MYD保存表的數據;MYI是表的索引文件。MYD和MYI是MyIASM的關鍵
  • [root@db02 /]# ll /data/3306/data/mysql
  • -rw-rw---- 1 mysql mysql ? 9996 Jun 20 ?2016 proc.frm
  • -rw-rw---- 1 mysql mysql ? ? ?0 Jun 20 ?2016 proc.MYD
  • -rw-rw---- 1 mysql mysql ? 2048 Jun 20 ?2016 proc.MYI
  • ---------------------分割線----------------------
  • [root@db02 mysql]# file user.MYI?
  • user.MYI: MySQL MISAM compressed data file Version 1
  • [root@db02 mysql]# file user.MYD?
  • user.MYD: DBase 3 data file (167514107 records)
  • [root@db02 mysql]# file user.frm?
  • user.frm: MySQL table definition file Version 9
  • 提示:系統大多數用的是MyISAM引擎 1、為什么MySQL5.5 以前默認是mysiasm引擎,而mysql5.5.5 以后默認是innodb? 2、為什么mysql庫內部表默認是mysqlisam引擎?

    1.2 MyISAM引擎特點(此處面試最好全說出來)

    1.不支持事務 (事務是指邏輯上的一組操作,組成這組操作的各個單元,要么全成功要么全失敗) 2.表級鎖定,數據更新時鎖定整個表:其鎖表機制是表級鎖定,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其并發性能。 3.讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyIASM還會在讀取的時候阻塞寫入,但讀本身并不會阻塞另外的讀。 4.只會緩存索引:MyIASM可以通過key_buffer_size緩存索引,以大大提高訪問性能減少磁盤IO。但是這個緩存區只會緩存索引,而不會緩存數據。
  • [root@db01 ~]# grep key_buffer_ ?/etc/my.cnf?
  • key_buffer_size = 16K
  • 5.讀取速度較快,占用資源相對少 6.不支持外鍵約束,但支持全文索引 7.MyISAM引擎是MySQL5.5.5 前缺省的存儲引擎

    1.3 MyIASM引擎適用的生產業務場景

    1)不需要事務支持的業務(例如轉賬就不行) 2)一般為讀數據比較多的應用,讀寫都頻繁場景不適合,讀多或者寫多的都適合。 3)讀寫并發訪問相對較低的業務(純讀純寫高并發也可以)(鎖定機制問題) 4)數據修改相對較少的業務(阻塞問題) 5)以讀為主的業務,例如:數據庫系統表、www、blog圖片信息數據庫,用戶數據庫。商品庫等業務 6)對硬件一致性要求不是非常高的業務(不支持事務) 7)硬件資源比較差的機器可以用MySAM(占用資源少) 8)使用讀寫分離的MySQL從庫可以使用MyIASM 小結:單一對數據庫的操作都可以使用MyIASM,所以單一就是盡量純讀,或純寫(insert,update,delete)等

    1.4 MyIASM引擎調優精要

    1.設置合適的索引(緩存機制) 2.調整讀寫優先級,根據實際需求確保重要操作更優先執行。 3.啟用延遲插入改善大批量寫入性能(降低寫入頻率,盡可能多條數據一次性寫入) 4.盡量順序操作讓insert數據都寫入到尾部,減少阻塞 5.分解大的時間長的SQL操作,降低單個操作的阻塞時間。 6.降低并發數(減少對MySQL訪問),某些高并發場景通過應用進行排隊隊列機制 7.對于相對靜態(更改不頻繁)的數據庫數據,充分利用Query Cache或memcached緩存服務可以極大的提高訪問效率,網站動態內容靜態化,減少對數據庫的訪問。
  • [root@db02 oldboy]# grep query /data/3306/my.cnf
  • query_cache_size = 2M
  • query_cache_limit = 1M
  • query_cache_min_res_unit = 2k
  • 8.MyISAM的Count只有在全表掃描的時候特別搞笑,帶有其他條件的count都需要進行實際的數據訪問
  • mysql> select count(*) from mysql.user;
  • +----------+
  • | count(*) |
  • +----------+
  • | ? ? ? 11 |
  • +----------+
  • 1 row in set (0.00 sec)
  • 9.可以把主從同步的主庫使用innodb,從庫使用MyIASM引擎(不推薦)

    InnoDB引擎

    1.1 什么是InnoDB引擎?

    InnoDB引擎是MySQL數據庫的另一個重要的存儲引擎,整成為目前MySQL AB所發行新版的標準,被包含在所有二進制安裝包里。和其他的存儲引擎相比,InnoDB引擎的優點是支持兼容ACID的事務(類似于PostgerSQL)以及參數完整性(即對外鍵的支持) Oracle公司2005年10月收購了Innobase。Innobase采用雙認證授權,它使用GUN發行,也允許其他想將InnoDB結合到商業軟件的團體獲得授權。 MySQL5.5.5以后數據庫的默認存儲引擎為InnoDB
  • [root@db02 oldboy]# ll /data/3306/data/oldboy
  • total 16
  • -rw-r--r-- 1 root root?? 65 Jul? 4 00:03 db.opt
  • -rw-r--r-- 1 root root 8644 Jul? 4 00:03 student.frm
  • 提示:只有student.from沒有MyIASM對應的數據文件和索引文件了,這是為什么?
  • [root@db02 oldboy]# ll /data/3306/data/
  • total 143432
  • drwxr-xr-x 2 root ?root ? ? ? 4096 Jul ?4 00:03 aaa
  • drwxr-xr-x 2 root ?root ? ? ? 4096 Jul ?4 00:03 cyh
  • drwxr-xr-x 2 root ?root ? ? ? 4096 Jul ?4 00:03 dadadadadadad
  • -rw-r--r-- 1 root ?root ?134217728 Jul ?4 00:03 ibdata1 存放InnoDB數據的文件
  • 配置路徑
  • [root@db02 oldboy]# grep ibdata /data/3306/my.cnf
  • innodb_data_file_path = ibdata1:128M:autoextend
  • 可以修改為:
  • ibdata1:128M:ibdata2:128M:autoextend
  • 企業場景盡量調大一點
  • InnoDB引擎特點

    1.支持事務:支持4個事務隔離級別,支持多版本讀。 2.行級鎖定(更新時一定是鎖定當前行):通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響。 3.讀寫阻塞與事務隔離級別相關。 4.具有非常搞笑的緩存特性:能緩存索引,也能緩存數據。 5.整個表和主鍵以Cluster方式存儲,組成一顆平衡樹。 6.所有Secondary Index都會保存主鍵信息 7.支持分區,表空間,類似oracle數據庫 8.支持外鍵約束?5.5 以后不支持全文索引,以后支持了。 9.和MyIASM引擎相比,InnoDB對硬件資源要求比較高。

    InnoDB特點:面試必答題

    1.Row-level locking ???????#行級鎖 2.Full-text search indexs ?#全文索引 3.Data caches????????????? #緩存數據 4.Index caches??????????? #索引緩存 5.Transactions??????????? #支持事務 6.占用資源多 7.讀寫阻塞與事務隔離級別相關。 8.外鍵

    InnoDB引擎使用的生產業務場景

    1、需要事務支持的業務(具有較好的事務特性) 2、行級鎖定對高并發有很好的適應能力,但需要確保查詢是通過索引完成 3、數據讀寫及更新都較為頻繁的場景,如:BBS。SNA。微博,微信等。 4、數據一致性要求較高的業務,例如:充值轉賬、銀行卡轉賬。 5、硬件設備內存較大,可以利用InnoDB較好的緩存能力來提高內存利用率,盡可能減少磁盤IO
  • [root@db02 oldboy]# grep -i innodb /data/3306/my.cnf
  • #default_table_type = InnoDB
  • innodb_additional_mem_pool_size = 4M
  • innodb_buffer_pool_size = 32M
  • innodb_data_file_path = ibdata1:128M:autoextend
  • innodb_file_io_threads = 4
  • innodb_thread_concurrency = 8
  • innodb_flush_log_at_trx_commit = 2
  • innodb_log_buffer_size = 2M
  • innodb_log_file_size = 4M
  • innodb_log_files_in_group = 3
  • innodb_max_dirty_pages_pct = 90
  • innodb_lock_wait_timeout = 120
  • innodb_file_per_table = 0
  • 共享表空間對應物理數據文件:
  • [root@db02 oldboy]# ll /data/3306/data/ibdata1?
  • -rw-r--r-- 1 root root 134217728 Jul ?4 00:03 /data/3306/data/ibdata1
  • 獨立表空間對應物理數據文件:
  • innodb_file_per_table
  • innodb_data_home_dir
  • InnoDB引擎調優精要

    1、主鍵盡可能小,避免給Secondary index 帶來過大的空間負擔 2、建立有索引避免全表掃描,因為會使用表鎖。 3、盡可能緩存所有的索引和數據,提高響應速度,減少磁盤IO消耗 4、在大批量小插入的視乎,盡量自己控制事務而不要使用autocommit自動提交,有開關可以控制提交方式: 5、合理設置innodb_flush_log_at_trx_commit參數值,不要過度追求安全性。 如果Innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日志文件到磁盤,提交事務的時候不會任何操作。 6、避免主鍵更新,因為這會帶來大量的數據移動
  • innodb_buffer_pool_size = 2048?
  • innodb_flush_log_at_trx_commit?= 1? #設置為0就等于innodb_log_buffer_size隊列滿后在統一存儲,默認為1,也是最安全的設置。
  • innodb_file_per_table?= 0? #InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間。0關閉,1開啟。
  • 獨立表空間優點:
  • 1、每個表都有自己獨立的表空間。
  • 2、每個表的數據和索引都會存在自己的表空間中。
  • 3、可以實現單表在不同的數據庫中移動。
  • 4、空間可以回收(除drop table操作處,表空不能自己回收。)
  • 生產環境中如何批量更改MySQL引擎

    一般來說這樣的需求不多見,但偶爾也會有。 (1)M月SQL語句修改
  • 創建后引擎的更改,5.0以上
  • ALTER TABLE OLDBOY ENGINE = INNODB;
  • ALTER TABLE OLDBOY ENGINE = MyISAM;
  • 更改引擎實例
  • mysql> ALTER TABLE pre_ucenter_vars ENGINE = INNODB;
  • Query OK, 0 rows affected (0.33 sec)
  • Records: 0 ?Duplicates: 0 ?Warnings: 0
  • 查看修改后結果
  • mysql>show create table pre_ucenter_vars\G
  • (2)使用sed對備份內容進行引擎切換
  • mysqldump >bak.sql
  • nohup sed -e 's/MyIASM/InnoDB/g' bak.sql >innodb.sql &
  • mysql< innodb.sql
  • 數據量不好
  • (3)mysql convert table format命令修改
  • 獨立命令:
  • mysql_conver_table_format --user=root --password=123456 --socket=/data/3306/mysql.sock --engine=MyIASM oldboy t2
  • 依賴:yum -y install perl-DBI perl-DBD-MySQL ?perl-Time-Hires
  • 或者在建表時的語句加上指定引擎
  • CREATE?TABLE?`test`?(
  • ??`id`?bigint(12)?NOT?NULL?auto_increment?COMMENT?'主鍵',
  • ??`name`?varchar(12)?NOT?NULL?COMMENT?'姓名',
  • ??PRIMARY?KEY??(`id`)
  • )?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8;?
  • 有關MySQL企業常見企業面試題

    1.MySQL有哪些存儲引擎,各自有什么特點和區別? MySQL5.5 :MyIASM Memory InnoDB NDB 2.生產環境中應如何選用MySQL的引擎? 在一般生產既有讀又有寫的業務中,建議使用Innodb引擎,一句話盡可能多的使用innodb引擎 純寫,純寫可用myisam。例如系統的MySQL庫 3.不同的引擎如何備份?混合引擎如何備份。 myisam或者混合
  • mysqldump -uroot -p123456 -A -x -B -F -R --master-data=2|gzip >/data/bak$(date +%F).sql.gz
  • innodb
  • mysqldump -uroot -p123456 -A -b -f -r --master-data=2 --single-transaction|gzip >/data/bak.sql.gz
  • 4.設置my.cnf

    總結

    以上是生活随笔為你收集整理的MySQL事务及字符集介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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