天天看點

mysql索引

索引的優點缺點

  優點:加快查詢記錄的速度

  缺點:占用實體存儲空間,會減慢寫速度(update delete  insert)

mySQL索引支援的類型

  index 普通索引     

  unique 唯一索引

  primary  key 主鍵   

  foreign  key 外鍵    

  fulltext  全文索引 

索引的使用

  index 普通索引     

  primary  key 主鍵   

  foreign  key 外鍵 

檢視表中是否有索引字段:

        desc   表名;   

檢視索引詳細資訊:

        show index from 表名\G;  (\G:每行獨立顯示)

普通索引 index 使用規則

   1.一個表中可以有多個INDEX字段

   2.字段的值允許有重複,切可以賦NULL值

   3.經常把做查詢條件的字段設定為INDEX字段

   4.INDEX字段的KEY标志是MUL

例題:

mysql> create table t26(

    -> name char(10),

    -> age int(2),

    -> class char(7)default "nsd1724",

    -> homedir varchar(20),

    -> index(name),

    -> index(gamedbclass)

    -> );

mysql>inser tinto t26 values("bob",21,"nsd1702","shanghai");

mysql> insert into t26 values("bob",21,"nsd1703","beijing");

mysql> insert into t26 values("lucy",21,NULL,"beijing");

mysql> show index from t26\G;

在已有表裡建立

create  index    索引名  on   表名(字段名);

create index  aaa on  t16(name);

索引名可以與字段名同名,

删除索引

drop  index    索引名  on   表名;

drop  index   aaa on  t16;

primary  key 主鍵 使用規則

  一個表中隻能有一個primary  key字段

  對應的字段值不允許有重複,且不允許賦NULL值

  如果有多個字段都作為PRIMARY KEY,稱為複合主鍵,必須一起建立。

  通常與 AUTO_INCREMENT 連用(自增長:做自加1++的運算 的值給)

  經常把表中能夠唯一辨別記錄的字段設定為主鍵字段[記錄編号字段]

  主鍵字段的KEY标志是PRI

方法一:mysql> create table t27(

            -> stu_id char(7),

            -> name char(10),

            -> age int(2),

            -> primary key(stu_id)

            -> );

方法二:mysql> create table t28(

            -> stu_id char(7) primary key,

在已有表建立主鍵

alter  table   表名  add  primary key(字段名);

alter  table   t16  add   primary key(name);

删除主鍵

alter  table   表名 drop  primary key;

alter  table   t16  drop   primary key;

複合主鍵 (做主健的值不能同時相同)

多個字段必須同時做主鍵,多個字段值不同時相同重複就可以。

PRI         PRI

cip         por      access

clientip    serport     status

1.1.1.1       21          deny

1.1.1.1       21          allow

2.1.1.1       80          deny

mysql> create  table t29(

    -> cip varchar(15),

    -> port smallint(2),

    -> access enum("allow","deny"),

    -> primary key(cip,port)

mysql>insert into t29 values("1.1.1.1",21,"deny");

mysql>insert into t29 values("1.1.1.1",23,"allow");

mysql>insert into t29 values("2.1.1.1",23,"deny");

mysql> select * from t29;

在已有表裡建立複合主鍵

alter table  t24 add primary key(字段名清單);

預設從0開始加1  的結果賦給第一個字段,自己指派不能賦給已用的值,從最大值自動加1去指派。

primary key  與 auto_increment  一起使用

                           自動增長 ++

                           數值類型

                           主鍵

id  name age   class   maill

1   jim   21  nsd1704   [email protected]

2   tom   29  nsd1704   [email protected]

mysql> create table t221(

    -> id int(2) zerofill primary key

    -> auto_increment,

    -> name char(5),

    -> class char(7),

    -> mail varchar(30)

mysql>insert into t221(name,age,class,mail) values("jim",21,"nad1704","[email protected]");

mysql>insert into t221(name,age,class,mail) values("tom",29,"nad1702","[email protected]");

mysql>insert into t221(name,age,class,mail) values("xixi",20,"nsd1704","[email protected]");

mysql> insert into t221 values(6,"haha",21,"nsd1702","[email protected]");

mysql> insert into t221 values(null,"haha",21,"nsd1702","[email protected]");

Null #空可以寫進去是因為他可以自動增長排序。

mysql> select * from t221;

unique 唯一索引使用規則 (主健)

  一個表中可以有多個UNIQUE字段

  對應的字段值不允許有重複

  UNIQUE字段的KEY标志是UNI

  UNIQUE字段的值允許為NULL,當将其修改為不允許為NULL,則此字段限制與主鍵相同.(但是他并不是主鍵,删除不能用主鍵的删除方法。)

姓名     護照      駕駛證  

            NULL   NULL

jim       xxxx     cccc

bob     xxxx       cccc

建表是建立unique

mysql> create table t222(

    -> sf_id char(18),

    -> js_id char(8),

    -> unique(sf_id),

    -> unique(js_id)

-> );

mysql> insert into t222 values("bob","123456789","66666");

mysql> insert into t222 values("tom","4567891323","45679");

mysql> insert into t222 values("hshs","","");

mysql> insert into t222 values("hshs",null,null);

在已有表裡建立unique

create  unique index  索引名  on 表名(字段名);

create  unique index  sh_id  on t27(sh_id)

删除unique索引

drop   index   索引名 on  表名;

外鍵foreign key 使用規則

  1 表的存儲引擎必須是innodb

  2 字段的類型必須比對

  3 被參考字段必須是索引(key)的一種(通常是primary key主健)

外鍵的功能:給目前表的字段指派時,隻能在另外一張表的中字段值的範圍裡做選擇。

例題:必須先要建立财務表。

cwb财務表

cwb_id     name     pay

  1        tom      2W

  2        jerry    2W

  3        unll       2W

mysql> create table cwb(

    -> cwb_id int(2) primary key

    -> pay float(7,2)

-> )engine=innodb;

班級表

stu_id    name

 1        tom

 2        jerry

 3         unll

mysql> create table bjb(

    -> bjb_id int(2),

    -> foreign key(bjb_id) references cwb (cwb_id) on update cascade on delete cascade

    -> )engine=innodb;

foreign key(bjb_id)     #為班級的id建立外健。

references cwb (cwb_id)  # 參考的是财務表的id。

on update cascade        #于财務表的資訊同步更新。為了保持資訊一緻

on delete cascade        #于财務表的資訊同步删除。

mysql>insert into  cwb(name,pay) values("bob",20000),("tom",20000),("lucy",20000);

mysql> select * from cwb;

mysql> insert bjb values(3,"lucy");

mysql> insert bjb values(1,"bob");

mysql> insert bjb values(2,"tom");

mysql> insert bjb values(null,"tom");

#null是沒有值,相當于沒有寫,沒有限制不允許寫空值。

隻要在财務表的範圍裡都可以寫入,無論重複不重複。

同步更新:

mysql> update cwb set cwb_id=8 where cwb_id=2;

#把原來财表裡的id=2 修改成id=8.驗證同步。

mysql> select * from bjb;

同步删除一條表記錄:

mysql> delete from cwb where cwb_id=8;

Delete  from cwd; #如果不加條件删除全部班級裡的内容也會

删除外鍵、檢視外鍵名:

檢視格式: show create table 表名;(建立外鍵的表名)

删除格式:

       alter table 表名 drop foreign key 限制名;

               (建立外鍵的表名)                

例題:     

mysql> show create table bjb;

mysql> alter table bjb drop foreign key bjb_ibfk_1;

在已有表裡添加外鍵

格式:alter table (表名) add foreign key(列名)    references cwb(列名) on update cascade  on delete cascade;

備注:建立外鍵的表名,建立外健的列名,參考的列名。

mysql> alter table bjb

    -> add

    -> foreign key(bjb_id)references cwb(cwb_id)

    -> on update cascade on delete cascade;

解釋: foreign key(bjb_id)references cwb(cwb_id)

       #指定給哪列作外鍵,參考的對象是誰。

上一篇: mysql查詢
下一篇: zabbix