【正文】
HEAP數(shù)據(jù)表是一個存在與內(nèi)存中的表,所以他的數(shù)據(jù)和索引都存在于內(nèi)存中,及定義結(jié)構(gòu),當(dāng)mysql關(guān)閉后數(shù)據(jù)都將消失。 定義表的的類型 create table test(id int)engine=heap; 事務(wù)表幣非事務(wù)表有幾大優(yōu)勢: 更安全。即使mysql崩潰或遇到硬件問題 ,要么自動恢復(fù),要么從備份加事務(wù)日志恢復(fù),你可以取回數(shù)據(jù) 你可以合并許多語句,并用mit語句同時接受她們?nèi)浚ㄈ绻鸻utomit被禁止掉) 你可以執(zhí)行rollback來忽略你的改變(如果automit被禁止掉) 如果更新失敗,你的所有改變都變回原來。(用非事務(wù)安全表,所有發(fā)生的改變都是永久的) 事務(wù)安全存儲引擎可以給那些當(dāng)前用 讀得到許多更新的表提供 更好的部署。 非事務(wù)表自身有幾大優(yōu)點: 非事務(wù)表自身有幾大優(yōu)點,因為沒有事務(wù)開支,所有優(yōu)點都能出現(xiàn): 更快 需要更更少的磁盤空間 執(zhí)行更新需要更少的內(nèi)存 你可以在同一個語句中合并事務(wù)安全和非事務(wù)安全表來獲得兩者最好的情況。盡管如此,在automit被禁止掉的事務(wù)里,變換到非事務(wù)安全表依舊即使提交并且不會被回滾 如何在innodb中實現(xiàn)事務(wù): begin://告知服務(wù)器我要開始一個事物 rollback://如果事務(wù)發(fā)生異常,那么數(shù)據(jù)回滾 mit://事務(wù)執(zhí)行成功,進(jìn)行數(shù)據(jù)提交 mysql begin。 Query OK, 0 rows affected ( sec) mysql insert into test11 values(1,39。zhangs39。)。 Query OK, 1 row affected ( sec) mysql select * from test11。 +++ | id | name | +++ | 1 | zhangs | +++ 1 row in set ( sec) mysql end。 ERROR 1064 (42000): You have an error in your SQL syntax。 check the manual that corresponds to your MySQL server version for the right syntax to use near 39。end39。 at line 1 mysql rollback。 Query OK, 0 rows affected ( sec) mysql select * from test11。 Empty set ( sec) mysql mit。 Query OK, 0 rows affected ( sec) mysql select * from test11。 Empty set ( sec) 修改表類型 sql語句:alter table tablename engine=innodb; 注意:不可以將mysql系統(tǒng)表比如‘user’或‘host’轉(zhuǎn)換成innodb類型。系統(tǒng)表必須為myisam類型 對myisam進(jìn)行事務(wù)處理鎖 lock table tablename(read,write) lock table 可以對表進(jìn)行加鎖控制,以保證用戶并發(fā)訪問時非事務(wù)表的數(shù)據(jù)一致性 unlock tables 釋放鎖 mysql 之index(索引) 什么是索引? 索引被用來快速找出在一個列上用一特定值的行。沒有索引,mysql不得不首先以第一條記錄開始并然后讀完整個表直到他找出相關(guān)的行,表越大,花費時間越多。如果表對于查詢的列有一個索引,mysql能快速到達(dá)一個位置去搜尋到數(shù)據(jù)文件的中間,沒有必要考慮所有數(shù)據(jù)。 索引的作用: 快速找出匹配一個where子句的行 當(dāng)執(zhí)行連接時,從其他表檢索行 對特定的索引列找出max()或min()值 mysql中的索引: 索引實際上是一個分離的列表,具有一個指向全表的指針 myisam表,索引被存儲為分離文件 innodb,索引存儲為表空間的一部分 mysql有四種類型的索引:主鍵(primary key)、唯一索引(unique)、全文索引(full index)、普通索引(index) 創(chuàng)建index create index indexname on tablename(columnname); indexname(索引名稱) tablename(表名稱) columnname(要創(chuàng)建索引的字段名稱) alter table tablename add index indexname(columnname); 查看索引show keys from tablename; 刪除indexalter table tablename drop index indexname; full index(myisam支持) create table chat(id int,chat1 text,chat2 text); create fulltext index index_text on tablename(col1,col2); alter table tablename add fulltext(col1,col2); 高效使用索引: 太多的索引,占用空間 每次進(jìn)行插入或更新時,索引都必須針對變化 重新排序,會導(dǎo)致 很多額外負(fù)擔(dān) 何處使用索引? where從句中條件匹配的行 select name from student where ment like“a%”; ment域的索引就起到了作用 Explain 分析索引 語法: explain select age from test12。 Explain 分析mysql中的索引: table:查詢中涉及的表 type:顯示連接中使用了何種類型 const(最好),eq_ref,fef,range,index和all possible_keys:可能用到的索引 key:實際使用的索引,可以在select語句中使用use index(indexname)來強(qiáng)制使用索引,用ignore index(indexname)來強(qiáng)制忽略索引key_len:使用的索引長度,越短越好; ref(references):顯示索引哪一列被使用了 rows:mysql必須檢查用來返請求數(shù)據(jù)的行數(shù) extra:using temporary(需要臨時表來存儲結(jié)果,通常發(fā)生在對不同的列集進(jìn)行order by),usig filesort 意即mysql根本 不能使用索引 索引的算法:btree bitmap 使用索引注意的事項。 合理創(chuàng)建索引,反之會降低數(shù)據(jù)庫的查詢效率,反之創(chuàng)建的索引會失去意義。 mysql的備份方式:backup、 restore 、copy//冷備份、mysqldump、select into backup備份myisam表的 示例: use test。 backup table chat to 39。c:\\db_backup39。 只生成 .frm 和 .myd,可以在數(shù)據(jù)庫恢復(fù)后重建索引 drop table chat。 restore table chat from 39。c:\\db_backup39。 copy備份 停止mysql服務(wù)器一避免 在備份的時候有用戶進(jìn)行數(shù)據(jù)庫的訪問 復(fù)制數(shù)據(jù)庫的文件夾 用mysqldump備份 備份庫 備份 mysqldump uroot p dbname 再打開查看(創(chuàng)建表備份的sql語句) 恢復(fù) mysql uroot p dbname 備份某個表 備份 mysqldump uroot p dbname tablename 再打開文件進(jìn)行查看(創(chuàng)建表備份的sql語句) 恢復(fù) mysql uroot p dbname 用select into 備份 備份:mysqlselect *from tablename into outfile 39。c