MySQL中創建視圖、索引

ec3y 9年前發布 | 17K 次閱讀 MySQL 數據庫服務器

數據庫的三級模式兩級映射:

存儲文件------>基本表----->視圖

內模式   ------->模式   ------>外模式

一、視圖

1、什么是視圖:

視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。

視圖就像一個窗口,通過這個窗口可以看到系統專門提供的數據。

這樣,用戶可以不用看到整個數據庫中的數據,而之關心對自己有用的數據。

數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中。

使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。

視圖中的數據依賴于原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變。

2、視圖的作用:

(1)、使操作簡單化,可以對經常使用的查詢定義一個視圖,使用戶不必為同樣的查詢操作指定條件

(2)、增加數據的安全性,通過視圖,用戶只能查詢和修改指定的數據。

(3)、提高表的邏輯獨立性,視圖可以屏蔽原有表結構變化帶來的影響。

3、視圖操作sql:

 創建視圖:

create  view viewName(參數列表/可以不寫這樣就是默認和下面的select一樣)

as select * from   表名;

例1:

(1)、create  table viewdemo(id int primary key , name char(10),score  float);

(2)、create  view  view1

as select* from  viewdemo;

(3)、create view view2(name,score)

as select name ,score from  viewdemo;


修改視圖:

alter  view  viewname (columns)  as  select columns from   tableName ;

例:

 alter view  view2 (id ,name)  as select  id,name from  viewdemo ;


刪除視圖:

 drop  view if exists  view  name;

列:

drop   view  view2;


二、索引

1、什么是索引

  索引是一個單獨的、存儲在磁盤上的數據庫結構,它們包含著對數據庫表里所有記錄的引用指針。

MySQL中索引的存儲類型有兩種:BTREE(樹)和 HASH(哈希),具體和表的存儲引擎有關。MyISAM和InnoDB存儲引擎只支持BTREE索引。

2、索引的好處

  適當使用索引能提升數據庫查詢速度!

3、實例:

在創建表的時候創建索引

   

       CREATE   TABLE  表名  [  列名稱  數據類型 ]  

        [  UNIQUE  |  FULLTEXT  ]   [  INDEX   |   KEY    ]    [  索引名稱  ]   ( 列名稱  [  length  ]  )  [  ASC | DESC ]

       說明:  UNIQUE  、 FULLTEXT  為可選參數,分別表示唯一索引、全文索引;INDEX 與 KEY為同義詞,兩者的作用相同,用來指定索引;

(1)、普通索引(index): 普通索引是MySQL的基本索引類型,允許在定義索引的列中插入重復值和空值

例:
CREATE  TABLE book

(

bookid   INT  NOT  NULL,

bookname VARCHAR(100)  NOT  NULL,

authors  VARCHAR(100)  NOT  NULL,

info  VARCHAR(500) NULL,

year_publication   YEAR  NOT  NULL,

INDEX(year_publication)

);
</div>

(2)、唯一索引(unique):唯一索引列的值必須唯一,但允許有空值。主鍵索引是一種特殊的唯一索引,不允許有空值。

例:

CREATE TABLE  book

(

  id  INT  NOT  NULL,

  name  CHAR(50)  NOT  NULL,

  UNIQUE  INDEX   UniqueIdx(id)

);

(3)、聯合索引:組合索引即是在多個列上創建索引。查詢時,只有在查詢條件中使用了這些字段(創建組合索引的時候指定的哪些列)的最左邊字段時,索引才會被使用。


CREATE TABLE student

(

  id  INT  NOT  NULL,

  name  CHAR(50)  NOT  NULL,

  age  INT  NOT  NULL,

  info  VARCHAR(200),


  INDEX   MultiIdx(id,name,age)

);

(4)、全文索引:MySQL只有MyISAM存儲引擎支持FULLTEXT索引,并且類類型為CHAR、TEXT、VARCHAR。 并且需要指定表的存儲引擎為MyISAM。

例:

CREATE TABLE t4

(

  id  INT  NOT  NULL,

  name  CHAR(50)  NOT  NULL,

  age  INT  NOT  NULL,

  info  VARCHAR(200),

  FULLTEXT INDEX   FullindexName(info)

) ENGINE = MyISAM ;

 在已經存在的表上創建索引:

      語法:

ALTER  TABLE  table_name  ADD   [  UNIQUE  |  FULLTEXT  ]   [  INDEX   |   KEY    ] 

[  inex_name  ]  (col_name [ length ] ,...)  [ASC | DESC ]

(1)、普通索引:ALTER  TABLE  book  ADD  INDEX        indexName( bookname(30) );
(2)、唯一索引:ALTER  TABLE  book  ADD UNIQUE INDEX  UniqueIdx( bookid );
(3)、組合索引:ALTER  TABLE  book  ADD  INDEX  BkAndInfoIdx( authors(20), info(50) );
(4)、全文索引:ALTER TABLE t6  ADD  FULLTEXT  INDEX infiIdx(info);(前提是這個表的存儲引擎為 MyISAM)


使用 create  index  創建索引:

  語法:

CREATE    [  UNIQUE  |  FULLTEXT  ]   [  INDEX   |   KEY    ]  INDEX  index_name

ON   table_name ( col_name[ length ] , ... )  [ASC | DESC ]

 例:在表book的bookname字段上建立名為BkNameIdx的索引。

CREATE INDEX  BkNameIdx   ON   book (bookname);

  例: 在book表的bookId字段上建立唯一索引。

CREATE   UNIQUE    INDEX  UniqueIdx    ON   book (bookId);

4、刪除索引:

(1)、ALTER   TABLE  table_name   DROP   INDEX  index_name;
(2)、DROP    INDEX     index_name   ON  table_name ; </div>

5、總結:

這樣我們的視圖和索引就建立了,是不是建立了視圖我們可以使用show table 來查看,是不是已經建立了索引以及是不是有效我們也可以使用explain select * from student where name='sss';來查看這樣就會出現一張表其中就有select_type 看這里的查詢類型我們就可以知道是不是建立的索引起效。

當我們建立了表、視圖、索引之后如果你想刪除表則要考略這樣一個問題,即和這個表有關的所有對象都刪除還是只


刪除這個表;

cascade(級聯)  restrict(限制)以上的事由這兩個來完成。

delete  table student  cascade;   刪除所有和student表相關的對象(視圖、索引、觸發器、、、)。

delete table student  restrict ; 只是刪除了student表。


解釋: 聚簇索引就是邏輯順序和物理順序保持一致,所以只能建立一個聚簇索引,但可以建立多個唯一索引等。

 索引: rdbms 中索引一般采用b+樹、hash索引來實現,b+樹索引具有動態平和的有點,而hash索引具有快讀查找的特點。索引是關系數據庫的內部實現技術,屬于內模式的范疇。


注意點: 在insert 中一般大家都會省去要插入的屬性列的列出但是這樣有一個影藏的危險,就是當你插入的數據一個相互兼容或者是相同類型的時候,你只要輸入就可以。這樣不好,我們要在插入的時候吧每個列列出來這樣的話就安全多了。

 本文由用戶 ec3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!