mysql的概念理解(上)

                                                      
 這是一篇設計mysql數據庫時候的一些小結。主要是對對MYISAM和INNODB倆種引擎進行簡單介紹,還有表的一些屬性進行詳細介紹。

   MyISAM:MyISAM是MySQL的ISAM擴展格式和缺省的數據庫引擎。MyISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操做,其代價是你須要常常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。MyISAM還有一些有用的擴展,例如用來修復數據庫文件的MyISAMCHK工具和用來恢復浪費空間的 MyISAMPACK工具。MYISAM強調了快速讀取操做,

   InnoDB:這項技術就是MYSQL++ API。在使用MYSQL的時候,你所面對的每個挑戰幾乎都源於ISAM和MyISAM數據庫引擎不支持事務處理(transaction process)也不支持外來鍵。儘管要比ISAM和 MyISAM引擎慢不少,可是InnoDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。

   在數據表裏添加一個字段,該字段所擁有的屬性是:(phpmyadmin字段查看與解釋)
   名字(field): 字段直接在數據表顯示的名字(字段名)
    
    類型(type):經常使用的類型int(整數型,通常用來儲存手機號,學號,平臺的編號,或者自增的id)  varchar和char(字符串型長度在0-255之間,前者空間能夠自由變更,後者空間一旦設定長度就不會變更,可是會形成前者索引效率相對比較差,在小型開發中,影響不大), text(文本類型長度0-65535)
    
    長度(length):不一樣的類型對應不一樣的長度,好比有的時候若是用tinyint(只能取0-255的值)合適的長度能夠節約數據存儲空間(在數據量不大的時候,其實意義不大,如今的數據庫都挺大的)

    整理(CHARSET=utf8):該數據表的字符集,會在create test () CHARSET = utf8 進行使用,如今廣泛默認的編碼格式都是utf8 gbk很容易出現亂碼問題,須要進行轉換

    默認(DEFAULT):(默認值,就是當添加數據庫的時候,沒有值狀況下顯示的值)

    數據類型:binary(binary屬性只用於char和varchar值。當爲列指定了該屬性時,將以區分大小寫的方式排序。與之相反,忽略binary屬性時,將使用不區分大小寫的方式排序)unsigned 屬性只針對整型(這個具體的類型和C語言裏的是同樣的)

   是否爲空:通常都默認爲not null(通常主要用NOT NULL和NULL倆種類型)
    auto_increment(自增類型,最經常使用的就是用戶註冊的時候,ID值自動增加)


    數據約束:(主要有五種類型的約束 check的約束mysql暫時不支持)
    primary key (主鍵約束 = 非空約束+惟一性約束)
    foreign key (外鍵約束,增長格式:alter table 表 add  constraint 外鍵約束名稱 foreign key (列)  references 表 (主鍵列);)
    NOT NULL(非空約束)
    UNIQUE(惟一性約束)
    CHECK(校驗約束,mysql暫時不支持)
   
    註釋(comment):(對這張表的用途的通常說明)

    示例:
  php

  CREATE TABLE `wp_action` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` char(30) NOT NULL DEFAULT '' COMMENT '行爲惟一標識',
  `title` char(80) NOT NULL DEFAULT '' COMMENT '行爲說明',
  `remark` char(140) NOT NULL DEFAULT '' COMMENT '行爲描述',
  `rule` text COMMENT '行爲規則',
  `log` text COMMENT '日誌規則',
  `type` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '類型',
  `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '狀態',
  `update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改時間',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='系統行爲表'

    下面對MYSQL裏一些經常使用的概念進行小結:
    1.索引分爲聚簇索引和非聚簇索引兩種,聚簇索引是按照數據存放的物理位置爲順序的,而非聚簇索引就不同了;聚簇索引能提升多行檢索的速度,而非聚簇索引對於單行的檢索很快。(InnoDB按照主鍵進行彙集,若是沒有定義主鍵,InnoDB會試着使用惟一的非空索引來代替。若是沒有這種索引,InnoDB就會定義隱藏的主鍵而後在上面進行彙集。因此,對於 彙集索引 來講,你建立主鍵的時候,自動就建立了主鍵的彙集索引。而普通索引就是非彙集索引)
    2.設計索引的一些理論:
     一.只要列中包含有NULL值都將不會被包含在索引中,複合索引中只要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。因此咱們在數據庫設計時不要讓字段的默認值爲NULL。
     二.通常狀況下不鼓勵使用like操做,若是非使用不可,如何使用也是一個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可使用索引。
     三.MySQL查詢只使用一個索引,所以若是where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。所以數據庫默認排序能夠符合要求的狀況下不要使用排序操做;儘可能不要包含多個列的排序,若是須要最好給這些列建立複合索引。
     四.創建索引的目的就是幫助查詢,若是查尋用不到則索引就沒有必要創建,另外若是數據表過大(5w以上)則有些字段(字符型長度超過(40))不適合做爲索引,另外若是表是常常須要更新的也不適合作索引
    3.索引(INDEX):INDEX(這是最基本的索引,MyIASM中默認的BTREE類型的索引,也是咱們大多數狀況下用到的索引。) UNIQUE(與普通索引相似,不一樣的就是:索引列的值必須惟一,但容許有空值(注意和主鍵不一樣)。若是是組合索引,則列值的組合必須惟一,建立方法和普通索引相似)    
    ps:
    一.雖然索引大大提升了查詢速度,同時卻會下降更新表的速度,如對錶進行INSERT、UPDATE和DELETE。由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。
    二.創建索引會佔用磁盤空間的索引文件。通常狀況這個問題不太嚴重,但若是你在一個大表上建立了多種組合索引,索引文件的會膨脹很快。
mysql

相關文章
相關標籤/搜索