mysql表類型

MySQL支持6種不同的表類型:BDB、InnoDB、HEAP、ISAM、MERGE以及MyISAM。其中 BDB,InnoDB單獨屬於一類,稱爲“事務安全型”(transaction-safe),其餘的表類型屬於第二類,稱爲“非事務安全型”(non- transaction-safe)。

事務安全型
BDB
   BDB全稱是“Berkeley DB”,它是MySQL具有事務能力的表類型,由Sleepycat Software (http://www.sleepycat.com)開發。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 'xxx.xxx.xxx.xxx' 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如下設置

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章