8使用資料庫和表

安佰勝發表於2011-01-08


8使用資料庫和表

====================

對blob,text欄位可以槍支行的制定新增索引的字元個數
 create index ind_xx on tab_xx(col_name(100));
 為在表tab_xx的col_name欄位的前100個字元上建立索引ind_xx
 
刪除索引
 drop index ind_xx on table_name;

mysql支援全文檢索型別函式fulltext
 alter table table_name add fulltext index (column_name);
 建立好索引後使用against以及match函式就能進行更好的檢索
 select match(column_name) against('char') from table_name;
 同時支援布林搜尋
 select * from table_name where match(column_name) against ('char') in boolean mode);
 
 當修改影響fulltext索引的伺服器變數時,啟用修改後必須重建索引
 可以刪除索引後重建
 或者使用帶有quick引數的repair table命令重建
 repair table table_name quick;
 
 
----------------

獲取表定義
 show create table table_name;
刪除外來鍵
 alter table table_name drop foreign key key_name;

外來鍵自動維護完整性
 create table table_name
 (id int not null,
  fid int not null,
  foreign key (fid) references table_name_pk(column_pk) on delete cascade)
  type=innodb;

delete子句中可用的操作
 
 cascade  刪除包含與已刪除鍵值有參照關係的所有記錄
 set null 修改與已刪除值有參照關係的所有記錄,使用null值替換
 restrict 拒絕修改要求,知道使用刪除鍵值的輔助表被手工刪除,並且沒有引數是這個值是預設值
 no action 什麼都不做

類似delete子句,還有on update xxxx子句可以使用。 

----------------

表型別

建表時type關鍵字指定型別

 myisam
 isam
 heap
 berkeleydb
 innodb
 merge

myisam表型別
 延伸了isam型別,也是mysql的預設表型別
 myisam表優化了壓縮比例和速度
 可以在不同作業系統和病態之間進行移植
 支援大檔案
 允許對blob和text列進行索引
 支援使用字首和完全鍵進行搜尋
 設計上能夠智慧的防治碎片

isam表型別
 與myisam的區別是不壓縮
 使用時佔用的系統資源少,磁碟空間多
 單表有大小限制,並且相容性不好
 isam表容易分裂,降低速度
 對資料,索引的壓縮有限制
 
heap表型別
 比較快速的雜湊索引,所以insert比較快
 系統關閉後資料丟失
 類似於臨時表
 會消耗ram
 不支援blob以及text列
 建立時最好使用max_rows來限制表中的資料量,避免表擴張過大消耗ram
 create table table_name(id int) type=heap max_rows=10;

berkeleydb表型別
 為滿足事務安全而出現
 包括提交和回滾、多使用者併發訪問、檢查點、次要索引、通過日誌恢復崩潰、連續的和鍵控的訪問資料
 限制是移動困難,不能壓縮索引,所以單表很大
 所以被innodb取代

innodb表型別
 支援事務處理並不會影響速度或者效能
 支援行級鎖以及表級鎖
 支援無鎖定讀取操作
 支援非同步io,cache讀取資料
 支援oracle類似的表空間以及檔案級別的儲存規劃
 支援不同作業系統結構上的完全可移植性
 支援外來鍵、提交、回滾和前滾
 是所有表型別中最接近oracle的一種

merge表型別
 通過把多個myisam表組合到一個單獨的表來建立的一種虛擬表
 表結構相同,索引相同才能合併
 支援select delete update操作
 對提高表連線效能有跟好的作用

----------------

建表時可以使用的其他修飾符

 auto_increment   自增插入值
 checksum      是否儲存表校驗和的布林標識
 comment       表的描述性註釋
 max_rows      表中儲存的最大行數
 min_rows      表中儲存的最小行數
 pack_keys      是否壓縮表索引的布林標識
 union        對映到一個單獨的merge表的表
 data directory   表資料檔案的位置
 index directory   表索引檔案的位置

-------------------

建表時使用if not exists子句可以避免存在相同名字的表

 create table if not exists table_name(id int); 
 
-------------------

複製表

 create table table_name1 select * from table_name2;
 和oracle相比少了一個關鍵字as
 同時這種語法不能從原表中複製鍵,與oracle相同  

 另一種方法:
 create table table_name1 like table_name2;
 包含鍵值以及索引,但沒有資料
-------------------

修改表

 alter table add/drop/change
 change很大程度上等同於modify

重新命名錶支援兩種寫法
 alter table table_name1 rename to table_name2;
 rename table_name1 to table_name2;

新增新欄位到指定位置
 alter table table_name add column_name column_type after column;

修改表中欄位的預設值 
 alter table table_name alter column_name set default 1;
  
修改表型別
 alter table table_name type=innodb;

---------------------

檢視錶的索引

 show index from table_name;

==============

mysql中常用的操作
 
 create database
 use
 drop database
 create table
 drop table
 show database
 show tables
 show create
 show index
 alter table
   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13177610/viewspace-684206/,如需轉載,請註明出處,否則將追究法律責任。

相關文章