1. 安裝
由於我的mysql
是5.1.48
,從官網選擇對應的包
a. 將support-files/q4m-forward 拷貝到mysql
安裝目錄
/bin下
b. 將libqueue_engine.so 拷貝到mysql
安裝目錄
/lib/mysql/plugin下
執行:$cat support-files/install.sql
install plugin queue soname 'libqueue_engine.so';
create function queue_wait returns int soname 'libqueue_engine.so';
create function queue_end returns int soname 'libqueue_engine.so';
create function queue_abort returns int soname 'libqueue_engine.so';
create function queue_rowid returns int soname 'libqueue_engine.so';
create function queue_set_srcid returns int soname 'libqueue_engine.so';
create function queue_compact returns int soname 'libqueue_engine.so';
這時候queue
引擎的狀態還是
disable
,重啟一下
mysqld
就變成active了。
root@test 05:50:59>show plugins;
| name | status | type | library | license |
| binlog | active | storage engine | null | gpl |
| partition | active | storage engine | null | gpl |
| csv | active | storage engine | null | gpl |
| memory | active | storage engine | null | gpl |
| myisam | active | storage engine | null | gpl |
| mrg_myisam | active | storage engine | null | gpl |
| innodb | active | storage engine | ha_innodb_plugin.so | gpl |
| innodb_trx | active | information schema | ha_innodb_plugin.so | gpl |
| innodb_locks | active | information schema | ha_innodb_plugin.so | gpl |
| innodb_lock_waits | active | information schema | ha_innodb_plugin.so | gpl |
| innodb_cmp | active | information schema | ha_innodb_plugin.so | gpl |
| innodb_cmp_reset | active | information schema | ha_innodb_plugin.so | gpl |
| innodb_cmpmem | active | information schema | ha_innodb_plugin.so | gpl |
| innodb_cmpmem_reset | active | information schema | ha_innodb_plugin.so | gpl |
| queue | active | storage engine | libqueue_engine.so | gpl |
安裝完畢,可以開始玩一把了。
2.a.建立乙個
queue表
root@test 05:52:29>create table t1 (a int , b varchar(100)) engine=queue;
query ok, 0 rows affected (0.00 sec)
嘗試插入一條資料:
root@test 05:52:51>insert into t1 values (1,"sd");
error 1598 (hy000): binary logging not possible. message: statement cannot be logged to the binary log in row-based nor statement-based format
咿?插入失敗,看樣子queue
不支援binlog
複製。好吧,重啟把
binlog
禁用掉。再次執行
root@test 05:57:03>insert into t1 values (1,"sd");
query ok, 1 row affected (0.01 sec)
這下插入成功了
root@test 05:57:13>insert into t1 values (2,"sda"),(3,"fio"),(4,"sas");
query ok, 3 rows affected (0.00 sec)
以下內容有些是參考自官方的乙個ppt。
那麼queue
儲存引擎和其他儲存引擎(例如
innodb
)有什麼不同呢?
——不支援主鍵和索引
——支援insert/delete
,但不支援
update
——根據插入資料的順序進行排序
——快取select count(*)
另外該儲存引擎使用了多個定義的函式來簡化操作,堪稱傻瓜式!!!!
針對每個連線有兩種模式:owner
模式和non-owner
模式,在進入
owner
模式後,該連線所擁有的資料對其他連線而言是不可見的。
模式的切換使用函式來實現:
a).進入
owner模式
通常情況下,在發起連線後,處於non-owner
模式,當呼叫函式
queue_wait()
時,進入
owner
模式,根據傳遞給
queue_wait
函式的引數,會等待直到可以獲得一行資料,在這之後,這行資料對其他連線而言是不可見的。
queue_wait的引數類似於如下格式:
select * from t1 where queue_wait(「t1」);
等待獲得t1
內的一行資料,預設超時時間為60秒
select * from t1 where queue_wait(「t1: a<4」)
----等待
a<4
的資料行
注:只支援檢查數值型別的行
select queue_wait(「t1」,」t2」,30)
檢查t1或t2
表是否有記錄,若獲得
t1表記錄,返回
1,若是
t2表,則返回
2,若是
30秒超時,返回0
b)退出owner模式
有兩種方式:
(1).呼叫
queue_end()
刪除之前由
queue_wait
獲得的行記錄並返回到
non-owner模式
(2)呼叫 queue_abort()
釋放擁有的行,但不刪除。關閉連線與
queue_abort()
的效果相同。
3.內部行id
每一行都有乙個內建64
位的row id
,主要用於檢測衝突。
queue_rowid()
----返回當前連線擁有的行的
rowid
,如果不擁有任何行,則返回
null
queue_set_srcid(src_tbl_id, mode, src_row_id)
src_tbl_id:用於定義源表
mode: a表示刪除重複行,
w表示重置
src_row_id:從源表獲得的
row id
該函式用於檢查記錄是否已經插入了目標表裡,如果為true
,那麼下次的插入將被忽略
4 MySQL儲存引擎
檢視當前mysql提供的儲存引擎 檢視當前mysql預設的儲存引擎 1 innodb儲存引擎 innodb是mysql的預設事務型引擎,它被設計用來處理大量的短期 short lived 事務。除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮innodb引擎。2 myisam儲存引擎 m...
關於Mysql的儲存引擎Innodb和Myisam
myisam和innodb 都是採用 b tree這種資料結構來實現 b tree索引。而很大的區別在於,innodb 儲存引擎採用 聚集索引 的資料儲存方式實現b tree索引,所謂 聚集 就是指資料行和相鄰的鍵值緊湊地儲存在一起,注意 innodb 只能聚集乙個葉子頁 16k 的記錄 即聚集索引...
MySQL學習筆記(4) 儲存引擎
選擇表的儲存引擎的標準 是否需要事務支援。是否支援外來鍵。併發量的要求。錯誤恢復處理。是否支援某些功能。表型別 預設的伺服器表型別,通過my.ini可以配置 default storage engine innodb 利用表屬性 engine 引擎型別 innodb myisam區別儲存的檔案的方式...