1.檢視當前資料庫支援的型別
show engine
2.查詢表的引擎
show table status from db1;
3查詢具體表的引擎
show table status from db1 where name=『student』;
create dastabase if not exists db1 character set utf8;
create table if not exists student(
id int primary key anto_increment, name varchar(20))engine=myisam;
修改表的儲存引擎
alter table student engine=innodb;
myisam:不支援事務/不支援外來鍵/支援全文檢索和表級別鎖定,獨寫相互阻塞,讀取速度快,節約資源,所以如果應用是以查詢操作和插入操作為主,只有很少的更新和刪除操作,並且對事務的完整性,併發性要求不是很高,那麼選擇合格儲存引擎是非常合適的。
innodb:是mysql的預設儲存引擎,由於innodb支援事務/支援外來鍵/行級鎖定,支援所有輔助索引(5.5.5後不支援全文檢索),高快取,所以用於對事物的完整性有非常高的要求,在併發條件下要求資料的一致性,讀寫頻繁的操作,那麼innodb儲存引擎是比較合適的選擇,比如bbs,計費系統,充值轉賬等。
memory:將所有的資料儲存在ram中,在需要快速定位記錄和其他類似資料環境下,可以提供更快的訪問,memory的缺陷就是對錶的大小有限制,太大的表無法快取在記憶體中,其次要確保表的資料可以恢復,資料庫異常終止後表中的資料是可以恢復的,memory表通常用於更新不太頻繁的小表,用以快速得到訪問結果。
索引的分類:
按照功能分類:
普通索引:最基本的索引,他沒有任何限制。
唯一索引:索引列的值必須唯一,但允許有空值,如果是組合索引,則列值組合必須唯一。
主鍵索引:一種特殊的唯一索引,不允許有空值,一般在建表時同時建立索引。
組合索引:將單列索引進行組合。
外來鍵索引:只有innodb引擎支援外來鍵索引,用來保證資料的一致性,完整性和實現級聯操作。
全文索引:快速匹配全部文件的方式。innodb引擎5.6以後才支援全文索引,memory引擎不支援。
按照結構分類:
b+tree索引:mysql使用最頻繁的乙個索引資料結構,是innodb和myisam儲存引擎預設的索引。
雜湊索引:mysql中memory儲存引擎預設的索引;
無索引的查詢:
沒有索引時查詢,會逐個資料進行查詢,效率最低
為姓名新增普通索引
create index idx_name on student(name);
新增唯一索引
create unique index idx_name on student(name);
(一般不用,只用id為主鍵)
alter table student add index idx_name(name);
b tree
b+tree 非葉子節點只儲存key值
create table if not exists user(
name varchar(10),
address varchar(10),
phone varchar(10));
新增聯合索引
alter table user add index idx_three(name,address,phone);
sql中必須有 name
actomic consistency isolation durability
表操作分類:
共享鎖:
排他鎖:
按粒度分類:
表級鎖:
行級鎖:
業級鎖:
(myisam支援表級鎖,innodb支援表級鎖,行級鎖)
按使用方法分類:
悲觀鎖:
樂觀鎖:
開啟事務
start transaction;
查詢事務,並加鎖
(共享鎖,其他事務可以查詢,不能改
select * from student where id=
1 lock in share mode;
//不帶索引則鎖整張表
select * from student where name=
'小劉' lock in mode;
//排他鎖
select * from student where id=
1for update;
釋放鎖commit
myisam不支援事務,直接加鎖
//加鎖
lock tables student read;
select * from student where id=1;
//解鎖
unlock tables;
innodb效能優化建議
1.盡量通過帶索引的列來完成資料查詢,從而避免innodb無法加行鎖而加表鎖
2.合理設計索引,索引要盡可能準確,盡可能的縮小範圍,避免造成不必要的鎖定。
3.盡可能減少基於範圍的資料檢索條件
4.盡量控制事務的大小,減少鎖定的資源量和鎖定時間長度。
5.在同乙個事務中,盡可能做到一次所鎖定所需要的所有資源,減少死鎖產生的概率
6.對於非常容易產生死鎖的業務部分,可以嘗試使用公升級鎖定顆粒度,通過表級鎖定來減少死鎖的產生。
有關資料庫中的游標
一般情況下,我們用select這些查詢語句時,都是針對的一行記錄而言,如果要在查詢分析器中對多行記錄 即記錄集 進行讀取操作時,則需要使用到游標或while等迴圈 游標的型別 1 靜態游標 不檢測資料行的變化 2 動態游標 反映所有資料行的改變 3 僅向前游標 不支援滾動 4 鍵集游標 能反映修改,...
有關mysql資料庫的編碼
今天在通過表單給php提交資料,然後插入到資料庫中。網頁與php的編碼格式均為utf 8,在插入到資料庫中時也設定了 this query set names utf8 但是還是出現了在mysql中讀取資料出現亂碼和問號的情況。後來實在是無解,將mysql設定為gbk編碼,居然能正確的顯示,簡直就是...
Sybase資料庫 有關概念
資料庫裝置 所有的資料庫都建立在資料庫裝置上。所謂資料庫裝置,不是指乙個可識別的物理裝置,而是指用於儲存資料庫和資料庫物件的磁碟原始分割槽或作業系統檔案。增加乙個新的資料庫裝置時,必須對這些裝置 初始化 初始化的過程就是將物理磁碟 磁碟分割槽或作業系統檔案變為 sybase 資料庫可以識別的裝置。初...