mysql 表 型別 mysql表型別

2021-10-20 22:35:13 字數 3042 閱讀 7745

mysql支援6種不同的表型別:bdb、innodb、heap、isam、merge以及myisam。其中 bdb,innodb單獨屬於一類,稱為「事務安全型」(transaction-safe),其餘的表型別屬於第二類,稱為「非事務安全型」(non- transaction-safe)。

事務安全型

bdbbdb全稱是「berkeley db」,它是mysql具有事務能力的表型別,由sleepycat software (開發。bdb表型別提供了mysql使用者長久期盼的功能,即事務控制能力。在任何rdbms中,事 務控制能力都是一種極其重要和寶貴的功能。事務控制能力使得我們能夠確保一組命令確實已經全部執行成功,或者確保當任何乙個命令出現錯誤時所有命令的執行 結果均被回退。可以想象,在電子銀行這類應用中事務控制能力是極其重要的。

innodb

innodb:這種型別是事務安全的.它與bdb型別具有相同的特 性,它們還支援外來鍵.innodb**速度很快.具有比bdb還豐富的特性,因此如果需要乙個事務安全的儲存引擎,建議使用它.如果你的資料執行大量的 insert或update,出於效能方面的考慮,應該使用innodb表。對於支援事物的innodb類 型的表,影響速度的主要原因是autocommit預設設定是開啟的,而且程式沒有顯式呼叫begin 開始事務,導致每插入一條都自動commit,嚴重影響了速度。可以在執行sql前呼叫begin,多條sql形成乙個事務(即使autocommit打 開也可以),將大大提高效能。

非事務安全型

heap

heap表是訪問資料速度最快的mysql表,這是因為這類表使用儲存在記憶體中的雜湊索引。但有極其重要的一點必須注意,如果mysql或者伺服器崩潰,heap表中的資料將會丟失!

isam

isam表型別是myisam出現之前mysql的預設表型別,所以現在這種表型別是不推薦使用的,建議改用myisam表。

merge

merge是一種值得關注的新式表型別,在3.23.25版中提供。merge表實際上由一組同樣的myisam表合併而成。之所以要把多個同樣的表合併成乙個,主要是出於效能上的考慮,因為它能夠提高搜尋速度、提高修復效率、節省磁碟空間。

myisam

myisam表型別是mysql預設的表型別。myisam表型別以isam為基礎,myisam錶比isam表要小,因而占用資源更少。但增加了許多有用的擴充套件。 它是儲存記錄和檔案的標準方法.與其他儲存引擎比較, myisam具有檢查和修復**的大多數工具. myisam**可以被壓縮,而且它們支援全文搜尋.它們不是事務安全的,而且也不支援外來鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量 的select,myisam是更好的選擇。另外,myisam型別的二進位制資料檔案可以在不同作業系統中遷移。也就是可以直接從windows系統拷貝 到linux系統中使用。

注意點:

* 4.0以上mysqld都支援事務,包括非max版本。3.23的需要max版本mysqld才能支援事務。

* 建立表時如果不指定type則預設為myisam,不支援事務。可以用 show create table tablename 命令看錶的型別。

* 對不支援事務的表做start/commit操作沒有任何效果,在執行commit前已經提交

可以執行以下命令來切換非事務表到事務(資料不會丟失),innodb錶比myisam表更安全: alter table tablename type=innodb;

* innodb表不能用repair table命令和myisamchk -r table_name但可以用check table,以及mysqlcheck [options] database [tables]

* 啟動mysql資料庫的命令列中新增了以下引數可以使新發布的mysql資料表都預設為使用事務(只影響到create語句)--default-table-type=innodb

* 臨時改變預設表型別可以用:

set table_type=innodb;

show variables like 'table_type';

或:c:/mysql/bin/mysqld-max-nt --standalone --default-table-type=innodb

* 設定mysql使用者密碼應該採用如下方式(注意密碼的輸入方式):

update user set password=password(『password』) where user=』root』

* 解決host '***.***.***.***' is not allowed to connect to this mysql server異常

解決方法:

1、 改表法。可能是你的帳號不允許從遠端登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改 "mysql" 資料庫裡的 "user" 表裡的 "host" 項,從"localhost"改稱"%"

mysql -u root –p vmware mysql>use mysql; mysql>update user set host = '%' where user = 'root';mysql>select host, user from user;

2. 授權法。例如,你想myuser使用mypassword從任何主機連線到mysql伺服器的話。

grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;

如果你想允許使用者myuser從ip為192.168.1.3的主機連線到mysql伺服器,並使用mypassword作為密碼

grant all privileges on *.* to 'root'@'192.168.1.3' identified by 'mypassword' with grant option;

grant all privileges on *.* to 'root'@'10.10.40.54' identified by '123456' with grant option;

* 解決jpa自動建表沒有生成外來鍵的問題

解決辦法:

1、可能是資料庫表的預設型別不是innodb,所以修改資料庫表的預設型別為innodb。

2、資料連線的dialect如下設定

mysql 表 型別 mysql 表的型別

mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction safe bdb全...

mysql 怎麼修改表型別 修改MYSQL表型別

最近遇到乙個修改 mysql 表型別的問題,以前在 phpmyadmin 管理 mysql 資料庫時,建立的表預設是 myisam 型別,而且修改表型別也比較方便。奈何現在配置 phpmyadmin 出了問題,也懶得去弄了,就裝了另乙個 mysql 的管理工具,比較方便。可是我新建的表預設確是 in...

MySql的表型別

create database sample create table t user id int 11 not null auto increment,name varchar 100 not null default primary key id type myisam 選項只在mysql 3....