二、修改表、欄位屬性設定、索引設定、約束設定,欄位索引

來源:互聯網
上載者:User

二、修改表、欄位屬性設定、索引設定、約束設定,欄位索引


欄位屬性設定
not null 不為空白
auto_increment 設定int類型欄位的值可以“自增長”,即其值無需“寫入”,而會自動獲得並增加
註:此屬性必須隨同 primary key  或 unique key 一起使用。
[primary] key: 設定為主鍵。是唯一鍵“加強”:也不能重複並且不能使用null,並且可以作為確定任意一行資料的“關鍵值”
unique  [key] : 設定為唯一鍵:表示該欄位的所有行的值不可以重複(唯一性)。
default  ‘預設值’: 設定一個欄位在沒有插入資料的時候自動使用的值。
comment  ‘欄位注釋’


索引設定
什麼是索引:
索引是一個“內建表”,該表的資料是對某個真實表的某個(些)欄位的資料做了“排序”之後的儲存形式。
其作用是:極大提高表尋找資料的速度!——其效率(速度)可以匹敵二分尋找。
注意:索引在提供尋找速度的同時,降低增刪改的速度。
對建立(設計)表來說,建立索引是非常簡單的事,形式如下:
索引類型 (欄位名1,欄位名2, .... )  //可以使用多個欄位建立索引,但通常是一個
有以下幾種索引:
普通索引:key(欄位名1,欄位名2, .... ):它只具有索引的準系統——提速
唯一索引:unique  key (欄位名1,欄位名2, .... )
主鍵索引:primary  key (欄位名1,欄位名2, .... )
全文索引:fulltext (欄位名1,欄位名2, .... )

約束設定
什麼叫約束:約束就是一種限定資料以符合某種要求的形式(機制)
約束主要有:
主鍵約束:primary  key (欄位名1,欄位名2, .... )
其實就是主鍵索引,也是主鍵屬性。即primary  key有3個角度的理解(說法):欄位屬性設定為主鍵,或建立的主鍵索引,或設定一個主鍵約束,但他們的本質是一樣
唯一約束:unique  key  (欄位名1,欄位名2, .... ),其實也是“3體合一”(類似primary key)
外鍵約束:
什麼叫外鍵:就是設定一個表中的某個欄位的值,必須“來源於”另一個表的某個主鍵欄位的值。
文法形式:
foreign key (欄位名1,欄位名2, .... ) references 表名2(欄位名1,欄位名2, .... )
說明:
對某個(些)欄位設定外鍵,則其相對應的其他表的對應欄位需要設定為主鍵。
非空約束:就是要求該欄位的值不可為空,其只能在欄位上當作欄位屬性來設定。
預設約束:就是要求該欄位的值在“空”的時候會自動填滿該設定的預設值,也只能欄位上設定。
檢查約束:就是使用一個運算式(邏輯判斷)來決定資料是否有效,比如年齡欄位,可以使用
tinyint,則可能會超過127就不合適了。
tinynit  unsigned,則0-255是可以的。
但:如果考慮現實情況,假設某保險公司只作150歲以下的人的保險。則我們就可以繼續對該欄位可能儲存的資料進行“約束”。比如類似:if(age > 150){return false}
可惜的是:mysql不支援檢查約束的文法和功能。

修改表
修改表是指修改表的結構或特性。理論上建立一個表能做到的事情,修改表也能做到。修改表有二三十項修改項,包括增刪改欄位,增刪索引,增刪約束,修改表選項等等。
舉例如下:
添加欄位:alter table 表名 add [column] 新欄位名 欄位類型 [欄位屬性列表];

修改欄位(並可改名):alter table 表名 change [column] 舊欄位名 新欄位名 新欄位類型 [新欄位屬性列表];

修改欄位(只改屬性):alter table 表名 modify [column]       欄位名 新欄位類型 [新欄位屬性列表];

修改欄位名:灰常灰常抱歉,沒有單純修改欄位名這個功能!

刪除欄位:alter table 表名 drop [column] 欄位名;

添加普通索引:alter table 表名 add index [索引名] (欄位名1[,欄位名2,...]);

添加主鍵索引(約束):alter table 表名 add primary key (欄位名1[,欄位名2,...]);

添加外鍵索引(約束):alter table 表名1 add foreign key (欄位1,[,欄位名2,...]) references 表名2(欄位1,[,欄位名2,...]);

添加唯一索引(約束):alter table 表名 add unique (欄位名1[,欄位名2,...]);

添加欄位預設值(約束):alter table 表名 alter [column] 欄位名 set default 預設值;

刪除欄位預設值(約束):alter table 表名 alter [column] 欄位名 drop default;

刪除主鍵:alter table 表名 drop primay key;#每一個表最多隻能有一個主鍵

刪除外鍵:alter table 表名 drop foreign key 外鍵名;

刪除索引:alter table 表名 drop index 索引名;

修改表名:alter table 表名 rename [to] 新表名;

修改表選項:alter table 表名 選項名1=選項值1,選項名2=選項值2,...;


顯示所有表: show tables;
顯示某表的結構: desc 表名; 或:describe 表名;
顯示某表的建立語句:show create table 表名;
重新命名表:rename table 舊錶名 to 新表名;
從已有表複製表結構:create table [if not exists] 新表名 like 原表名;
從已有表複製表結構:create table [if not exists] 新表名 select * from 原表名 where 1<>1;
建立索引:create [unique | fulltext] index 索引名 on 表名(欄位名1[,欄位名2,...])。這裡省略unique或fulltext,那就是普通索引。實際上此建立索引語句,會在系統內部映射為一條“alter table”的添加索引語句。
刪除索引:drop index 索引名 on 表名。實際上,此語句同樣被映射為一條“alter table”的刪除索引語句。


什麼是視圖:
視圖可以看作是一個“臨時儲存的資料所構成的表”(非真實表),其實本質上只是一個select語句。只是將該select語句(通常比較複雜)進行一個“封裝”,並設定了一個名字,其後就可以通過該名字並把該名字當作一個表來使用。
如果一個select語句比較複雜,又在多個頁面需要使用它,則可以將它做成一個視圖,方便使用。
又如果,某個資料表中的某些欄位不想給別人看(不同公司之間的資料業務交換的時候),但另一個又需要給人看,此時也可以使用視圖。
視圖建立形式:
create  view   視圖名 [(列名1,列名2,...)]   as  一條複雜select語句;
可以將select語句所取得的列重新命名,但也可以不重新命名,則使用select語句中的給定列名。
視圖的使用:
其實就是當作一個查詢表來用(通常只用於select)
select  *  from  視圖名  where 條件  order by .....。
修改視圖:
alter view 視圖名 [(列名1,列名2,...)] as select語句;
刪除視圖:
drop  view  [if exists] 視圖名;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.